Código de JavaScript - Determinar si en un array bidimensional hay N valores consecutivos en cualquier dirección

Imágen de perfil
Val: 2.288
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Determinar si en un array bidimensional hay N valores consecutivos en cualquier direccióngráfica de visualizaciones


JavaScript

Publicado el 18 de Febrero del 2020 por Katas (200 códigos)
590 visualizaciones desde el 18 de Febrero del 2020
Crear una función que reciba un array bidimensional y el numero de valores consecutivos a buscar. El programa tiene que devolver si hay el numero de valores consecutivos (unos) en cualquier dirección, ya sea horizontal, vertical o transversal.

Este algoritmo puede ser utilizado para juegos como el tres en ralla o cuatro en ralla.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
values=[
    [0, 0, 0],
    [0, 0, 0],
    [1, 1, 1],
];
consecutiveValues(values, 3); // true
 
values=[
    [1, 0, 0],
    [0, 1, 0],
    [0, 0, 1],
];
consecutiveValues(values, 3); // true
 
values=[
    [0, 1, 0],
    [0, 1, 0],
    [0, 1, 0],
];
consecutiveValues(values, 3); // true
 
values=[
    [0, 1, 0],
    [0, 0, 0],
    [0, 1, 0],
];
consecutiveValues(values, 3); // false
 
values=[
    [0, 0, 1],
    [0, 1, 0],
    [1, 0, 0],
];
consecutiveValues(values, 3); // true
 
values=[
    [0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 1, 0],
    [0, 1, 0, 0, 1, 0, 0],
    [0, 0, 1, 1, 0, 0, 0],
    [0, 0, 1, 1, 0, 0, 0],
    [0, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0],
];
consecutiveValues(values, 4); // true
consecutiveValues(values, 5); // true
consecutiveValues(values, 6); // false
 
values=[
    [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
    [1, 0, 0, 1, 0, 0, 1, 0, 0, 0],
    [1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
    [0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
];
consecutiveValues(values, 5); // true
consecutiveValues(values, 6); // false

1

Publicado el 18 de Febrero del 2020gráfica de visualizaciones de la versión: 1
591 visualizaciones desde el 18 de Febrero del 2020
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
 * Función que busca unos (1) consecutivos en un array bidimensional
 * @param {array} arr
 * @param {integer} len - numero de elementos consecutivos a encontrar
 */
function consecutiveValues(arr, len) {
    const lenH=arr[0].length;
 
    // convertimos el array bidimensional en un solo array
    arr=arr.reduce((acum, el) => [...acum, ...el], []);
 
    // recorremos todos los elementos del array
    for (let i=0; i<arr.length; i++) {
        if (arr[i]!=1) {
            continue;
        }
        if (
            findNext(arr, len, i, i+len, 1) || // position: -
            findNext(arr, len, i, i+(len*lenH), lenH) || // position: |
            findNext(arr, len, i, i+(len*lenH), lenH-1) || // position: /
            findNext(arr, len, i, i+(len*lenH)+1, lenH+1) // position: \
            ) {
            return true;
        }
    }
    return false;
}
 
/**
 * Función que recorre el array entre dos puntos buscando si en todos
 * ellos hay un uno (1)
 *
 * @param {array}   arr
 * @param {integer} len   - cantidad total de unos (1) a encontrar consecutivos
 * @param {integer} start - inicio del array a recorrer
 * @param {integer} end   - fin del array a recorrer
 * @param {integer} steep - salto entre elementos (step)
 *
 * @return {boolean}
 */
function findNext(arr, len, start, end, steep) {
    let total=0;
    for (let i=start; i<end; i+=steep) {
        if (arr[i]==1) {
            if (++total==len) {
                return true;
            }
        } else {
            total=0;
        }
    }
    return false;
}



Comentarios sobre la versión: 1 (0)


No hay comentarios
 

Comentar la versión: 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s5927