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

Imágen de perfil
Val: 1.129
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
211 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
212 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
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s5927