Tome una matriz A que consta de enteros positivos y un solo entero positivo N como entrada, y determine si hay al menos N ocurrencias consecutivas del mismo número en cualquier fila o columna de la matriz.
Solo necesita probar horizontal y verticalmente.
Casos de prueba
N = 1
A =
1
Result: True
----------------
N = 3
A =
1 1 1
2 2 3
Result: True
----------------
N = 4
A =
1 1 1
2 2 3
Result: False
----------------
N = 3
A =
3 2 3 4 2 1
4 1 4 2 4 2
4 2 3 3 4 1
1 1 2 2 3 4
3 2 3 1 3 1
1 1 2 2 3 4
Result: True
----------------
N = 1
A =
5 2 3 8
Result: True
----------------
N = 3
111 23 12 6
111 53 2 5
112 555 5 222
Result: False
----------------
N = 2
4 2 6 2 1 5
2 3 3 3 3 3
11 34 4 2 9 7
Result: True
Las explicaciones siempre son buenas :)
code-golf
number
decision-problem
matrix
Stewie Griffin
fuente
fuente
Respuestas:
Casco , 9 bytes
Toma una matriz 2D y un número, devuelve las
0
instancias falsas y un número positivo para las instancias verdaderas. Pruébalo en línea!Explicación
Husk es un lenguaje funcional, por lo que el programa es solo una composición de varias funciones.
fuente
Dyalog APL,
272523 bytes¡Pruébelo en línea!
Gracias a @MartinEnder y @Zgarb por -2 bytes cada uno (la composición elimina la necesidad de usar
w
y parens sin sentido)Avisarme si hay algún problema y / o bytes al golf. Argumento izquierdo es N , argumento de la derecha es una .
Explicación:
fuente
Perl 6 , 60 bytes
Pruébalo en línea!
@^m
es la matriz de entrada (primer argumento) y$^n
es el número de ocurrencias consecutivas para verificar (segundo argumento).[Z,] @^m
es la transposición de la matriz de entrada.(@^m | [Z,] @^m)
es una unión o de la matriz de entrada y su transposición. Lo siguiente semap
evalúa como un valor verdadero si$^n
se producen valores iguales consecutivos en cualquier fila del invocante. Aplicado a la matriz de entrada O su transposición, se evalúa a un valor verdadero si la matriz de entrada o su transposición contienen$^n
valores iguales consecutivos en cualquier fila; si la transposición cumple esa condición, eso significa que la matriz de entrada tiene$^n
valores iguales consecutivos en una de sus columnas.*.rotor($^n => $^n - 1)
convierte cada fila en una secuencia de$^n
cortes de elementos. Por ejemplo, si$^n
es 3 y una fila es<1 2 2 2 3>
, esto se evalúa como(<1 2 2>, <2 2 2>, <2 2 3>)
..map({ [==] $_ })
convierte cada sector en un valor booleano que indica si todos los elementos del sector son iguales. Continuando con el ejemplo anterior, esto se convierte(False, True, False)
..any
convierte esa secuencia de booleanos en una unión o que es verdadera si alguno de los booleanos es verdadero.La salida es un valor verdadero o de unión que es verdadero si la matriz de entrada O su transposición tienen CUALQUIER fila donde los
$^n
valores consecutivos son iguales.fuente
MATL , 12 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Una matriz no cuadrada no se puede concatenar adecuadamente a su transposición, ya sea vertical u horizontalmente. Entonces el código los concatena diagonalmente , creando una matriz de bloques en diagonal.
La matriz resultante se linealiza en orden de columna principal y se codifica por longitud de ejecución. Los ceros resultantes de la concatenación de bloque diagonal sirven para aislar las corridas de valores reales.
Los resultados de la codificación de longitud de ejecución son una matriz de valores y una matriz de longitudes de ejecución. Se mantienen las longitudes de ejecución correspondientes a valores distintos de cero. La salida es
1
si alguna de esas longitudes es mayor o igual que el número de entrada, y de lo0
contrario.Veamos los resultados intermedios para hacerlo más claro. Considerar entradas
y
La matriz diagonal de bloque que contiene la matriz de entrada y su transposición (código
t!Yd
) es:Esta matriz está linealizada implícitamente en el orden de columnas principales (abajo, luego a través):
La codificación de longitud de ejecución (código
Y'
) proporciona los siguientes dos vectores (mostrados aquí como vectores de fila; en realidad son vectores de columna): vector con valoresy vector con longitudes de ejecución
Mantener solo las longitudes correspondientes a valores distintos de cero (código
wg)
) daAl comparar para ver qué longitudes son mayores o iguales que el número de entrada (código
>~
) produce el vectorFinalmente, la salida debería ser
true
(mostrada como1
) si el vector anterior contiene al menos unatrue
entrada (códigoa
). En este caso el resultado esfuente
Octava,
7770 bytesPruébalo en línea!
Explicación: Dado que la matriz solo contiene enteros distintos de cero, podemos agregar un borde de 0 alrededor de la matriz y calcular la codificación de longitud de ejecución de la matriz (reformada en un vector)
fuente
runlength
... Aprende algo nuevo todos los días ...runlength
! Al estar más centrado en Matlab, no recordaba que existiera en Octaverunlength
.Jalea ,
98 bytesToma la matriz como argumentos y lee el entero de STDIN.
Pruébalo en línea!
Cómo funciona
Ejecución de ejemplo
fuente
;Z
, aunque en Japt en lugar de Jelly ...Ȧ
embargo, el átomo fue inspirado por MATL.E
construcción fue la forma de hacerlo. Nice :)Python 2 ,
609291 bytesPruébalo en línea!
En lugar de contar, una lista con tamaño
n
se genera (para cada elemento en la matriz) y se verifica si está en la matrizSin cadenas, 94 bytes
Pruébalo en línea!
fuente
Octava , 59 bytes
Pruébalo en línea! Overificar todos los casos de prueba .
Esto utiliza el mismo enfoque que mi respuesta MATL (vea la explicación allí).
fuente
blkdiag(A,A')
. ¡Muy agradable!Japt ,
181514 bytesPruébalo
Explicación
fuente
cUy)®ò¦ d_l ¨V\nd
, y otro concUy)d_ò¦ d_l ¨V
, y luego prácticamente tiene mi solución (eliminada).CJam , 16 bytes
Pruébalo en línea!
Explicación
fuente
runlength
función de Octave también proporciona salidas en ese orden. Pero de alguna manera siento el ordenvalue, length
más naturalPython 3 ,
129128125120104101 bytesMuchas gracias a @Zachary T, @Stewie Griffin, @Mr. Xcoder, @Rod, @totallyhuman por mejorar mucho esto.
Pruébalo en línea!
fuente
1
yif
.a=b;b=0;c=0
cona=b=c=0
m+zip(*m)
en su lugarm
en la cuarta línea y soltar por completo la primera línea, moviendon<=max()
la última línea comon<=c
b=b+1
usarb+=1
... Ahh, Ninja'd por @StewieGriffin05AB1E ,
16 1412 bytesPruébalo en línea!
fuente
0
s consecutivos en la segunda fila, por lo que debería ser cierto.[3,3,3]
. Leí mal el desafío en ese caso, así que creo que estoy equivocado aquí.Jalea , 18 bytes
Pruébalo en línea!
Devoluciones
0
falso y un entero distinto de cero para verdad.Ew, esto es malo. Y muy largo Se agradecerían consejos de golf :)
fuente
JavaScript (ES6), 99 bytes
Toma la matriz
m
y el número esperado de ocurrenciasn
en la sintaxis de curry(m)(n)
. Devuelve un booleano.¿Cómo?
Este código no es particularmente corto, pero quería probar un enfoque basado exclusivamente en expresiones regulares.
Conversión de la matriz a una cadena.
Usamos
m.join('|')
para transformar la matriz 2D en una cadena. Esto primero provoca una coerción implícita de las filas de la matriz a cadenas separadas por comas.Por ejemplo, esta entrada:
se transformará en:
Coincidencia de fila
Buscamos sucesos consecutivos en una fila con:
Esto es coincidente:
\b
un límite de palabras\d+
seguido de un número(){n-1}
seguido n-1 veces por:,
una coma\1
seguido de nuestra referencia: un límite de palabra + el primer número\b
seguido de un límite de palabraCoincidencia de columna
Buscamos ocurrencias consecutivas en una columna con:
dónde
L
es la longitud de una fila.Esto es coincidente:
\b
un límite de palabras\d+
seguido de un número(){n-1}
seguido n-1 veces por:(){L-1}
L-1 veces:.
cualquier personaje (en efecto: una coma o una barra)\d+?
seguido de un número (este no debe ser codicioso).
seguido de cualquier carácter (de nuevo: una coma o una barra)\1
seguido de nuestra referencia: un límite de palabra + el primer número\b
seguido de un límite de palabraCasos de prueba
Mostrar fragmento de código
fuente
Python 2 , 64 bytes
Pruébalo en línea!
fuente
Clojure, 77 bytes
Crea todas las particiones consecutivas
p
de longitudN
(símbolo%2
) y cuenta cuántos valores distintos tiene. Luego forma el conjunto de estas longitudes y regresa1
si se encuentra del conjunto y de lonil
contrario.for
La construcción fue el ajuste perfecto para esto, mi intento original utilizadoflatten
,concat
o algo así de corto.fuente