Los hermanos del orden de San Golfus el Conciso tienen la tradición de recitar una breve oración cada vez que ven a alguien hacer la señal de la cruz . Debido al alto nivel de pecado medido recientemente entre los turistas, han instalado CCTV en el monasterio y te han contratado para ayudarlos a mantener viva la vieja tradición en la era de la IA.
Su tarea es analizar el resultado del software de rastreo de dedos de los frailes y decir cuántas oraciones se deben. La entrada es una matriz que contiene enteros entre 0 y 4. 1,2,3,4 representan las posiciones de los dedos en momentos consecutivos en el tiempo. 0 representa no dedos.
La One True Way TM para persignarse es:
.1.
3.4
.2.
("." coincide con cualquier dígito). Sin embargo, debido a la incertidumbre sobre la rotación de la cámara y la presencia de piadosos hermanos ortodoxos orientales en la multitud (cuyo One True Way TM está en la dirección lateral opuesta), también debe contar todas las rotaciones y reflexiones:
.4. .2. .3. .1. .3. .2. .4.
1.2 4.3 2.1 4.3 1.2 3.4 2.1
.3. .1. .4. .2. .4. .1. .3.
Un dígito puede ser parte de cruces múltiples. Ayude a los frailes a determinar la cantidad de veces que su IA debería .pray()
contar contando cuántas de las submatrices 3x3 anteriores están presentes. Escribe un programa o una función. Tomar aportes en cualquier forma conveniente y razonable.
Casos del testamento:
// in
[[0,4,2,0],
[1,3,2,4],
[2,3,1,0]]
// out
2
// in
[[4,3,3,2,4,4,1,3,2,2],
[0,3,0,2,1,1,2,3,2,3],
[0,3,1,3,2,4,3,3,1,1],
[4,3,2,3,2,4,1,4,2,3],
[0,4,2,3,4,0,2,3,2,4],
[2,1,0,0,2,0,0,1,2,4],
[4,0,3,1,3,2,0,3,2,3],
[1,4,3,3,1,4,0,1,4,4],
[0,2,4,3,4,3,1,3,0,4],
[3,0,1,0,4,0,3,3,3,3]]
// out
3
// in
[[3,2,3,1,0,3,4,2,1,1,1,1,4,0,1,3,1,1,2,1,1,3,0,1,0,1,1,0,0,1,0,3,4,0,1,1,2,3,1,2,4,1,0,2,3,0,2,4,3,2],
[2,4,1,1,0,3,0,2,4,2,3,2,1,3,0,2,3,2,4,4,4,3,2,1,1,3,2,1,2,3,2,4,0,3,1,4,4,1,1,0,1,1,0,2,2,3,1,2,0,2],
[3,4,0,0,4,4,0,3,4,4,1,3,2,1,3,2,3,2,2,0,4,0,1,2,3,0,4,3,2,2,2,0,3,3,4,4,2,2,1,4,4,1,3,1,1,2,0,1,1,0],
[1,4,2,2,2,1,3,4,1,1,2,1,4,0,3,2,2,4,1,3,3,0,4,1,1,0,0,1,2,2,1,3,4,0,4,1,0,1,1,0,2,1,3,1,4,4,0,4,3,2],
[4,4,2,0,4,4,1,1,2,2,3,3,2,3,0,3,2,1,0,3,3,4,2,2,2,1,1,4,3,2,1,1,4,3,4,2,4,0,1,0,2,4,2,2,0,3,3,0,3,2],
[4,3,3,1,3,1,1,3,3,1,0,1,4,3,4,3,4,1,2,2,1,1,2,1,4,2,1,1,1,1,1,3,3,3,1,1,4,4,0,0,3,3,1,4,4,3,2,3,3,0],
[1,4,1,4,0,0,1,3,1,2,2,1,1,2,3,3,2,0,3,4,3,2,1,2,2,3,3,1,4,2,1,1,4,1,3,2,0,0,0,1,2,4,1,1,3,0,4,2,3,1],
[2,2,3,0,0,4,2,1,2,3,1,2,4,1,0,1,0,2,4,1,3,4,4,0,0,4,0,4,4,2,0,0,2,2,3,3,4,1,0,3,2,1,0,1,1,0,3,0,3,2],
[1,2,4,3,4,3,1,2,2,3,0,1,2,4,4,4,3,1,2,3,4,3,3,2,0,0,2,0,3,4,4,2,3,2,0,2,4,3,0,0,0,4,4,0,4,4,0,3,3,3],
[4,4,1,2,0,2,2,0,0,3,2,3,2,3,4,1,0,2,3,0,3,2,1,1,4,3,0,2,3,1,0,4,1,2,4,1,1,4,4,4,2,2,2,3,0,1,0,3,0,1],
[4,0,3,0,2,2,0,3,2,2,2,4,0,4,0,1,0,1,4,3,3,2,3,1,2,2,4,4,0,3,2,3,1,4,1,0,3,2,3,2,2,0,1,2,4,0,3,0,4,4],
[0,4,0,1,0,2,3,2,1,3,1,1,2,0,3,2,1,4,0,1,4,4,1,3,4,4,1,0,4,1,0,3,4,0,3,2,4,3,3,3,3,1,2,2,3,3,3,1,3,4],
[3,4,1,2,1,1,1,0,4,0,1,1,0,4,1,3,1,1,2,0,2,1,4,1,4,4,3,2,0,3,0,3,0,1,1,2,1,3,0,4,4,2,2,2,1,3,4,1,1,1],
[3,0,1,4,2,0,0,3,1,1,1,4,4,0,2,2,0,4,0,3,1,0,2,2,4,4,4,0,4,4,4,4,4,4,3,0,4,4,4,1,2,4,4,3,0,0,4,0,4,2],
[2,0,1,2,1,1,3,0,3,1,0,4,3,1,2,1,1,3,0,1,2,4,2,1,2,3,4,2,4,4,2,2,3,4,0,0,1,0,0,4,1,3,3,4,1,2,1,3,3,2],
[4,0,2,0,3,1,2,1,1,1,1,2,3,0,3,1,0,4,3,0,0,0,2,0,1,4,0,2,1,3,4,2,2,4,2,3,1,2,0,2,0,2,4,0,1,2,3,4,1,3],
[3,0,2,4,2,0,3,4,3,2,3,4,2,0,4,1,0,4,3,3,1,0,2,2,2,1,3,3,1,1,0,3,3,0,3,2,1,1,0,1,2,2,0,4,4,2,0,1,3,1],
[0,4,4,4,0,3,0,3,0,2,2,0,1,2,3,3,4,3,0,4,1,2,3,3,0,2,2,3,0,0,0,2,4,2,3,4,2,3,4,0,2,0,1,1,3,4,2,2,4,4],
[2,1,2,3,4,3,1,2,0,0,0,0,0,0,3,4,3,3,1,2,2,1,3,4,1,2,4,0,1,4,1,0,0,0,2,1,1,1,3,0,0,3,1,1,4,2,1,3,4,1],
[1,0,3,0,2,1,4,2,3,3,1,1,3,4,4,0,1,2,1,3,0,3,1,1,3,0,2,4,4,4,2,3,1,4,3,4,0,1,4,1,1,1,4,0,0,2,3,4,0,4]]
// out
8
"Bendito sea el más corto de los más cortos, porque gana el reino de los votos". -Libro de San Golfus 13:37
"No usarás lagunas, porque son las obras malvadas de Lucifer". -Carta al Meta 13: 666
Ligera visualización de personas haciendo la cruz.
Gracias @Tschallacka por la visualización.
Respuestas:
Grime , 20 bytes
Pruébalo en línea!
Una implementación muy literal de la especificación:
n`
hacer que Grime cuente el número de subrectangulos de la entrada que producen una coincidencia..\1./\3.\4/.\2.
define el cuadrado 3x3:Donde
.
puede ser cualquier personaje.oO
es un modificador de orientación que permite que este rectángulo aparezca en cualquier rotación o reflexión. Sev
usa para reduciro
la precedencia de s para que no necesitemos paréntesis alrededor del cuadrado.fuente
Caracoles ,
1716 bytesPruébalo en línea!
Explicación
A
hace que Snails cuente el número de posibles rutas coincidentes en toda la entrada.o
establece la dirección de inicio en cualquier dirección ortogonal (en lugar de solo hacia el este). El patrón en sí está en la segunda línea:fuente
Haskell,
10810293 bytesPruébalo en línea!
Sin expresiones regulares. Coincidencia de patrones
en la esquina superior izquierda de la matriz, tome un
1
if(l*r-1)*(t*b-1)==11
y recursivamente vaya a la derecha (soltar.l.
) y hacia abajo (soltar la primera fila). Si el patrón no puede coincidir (en el borde derecho o inferior), tome a0
. Suma todos los resultados.Editar: -9 bytes gracias a @xnor.
fuente
2^(l*r)+2^(t*b)==4100
que verificara los números, pero parece que ambas soluciones están engañadas2,6
en lugar de3,4
.0..4
(l*r-1)*(t*b-1)==11
.Perl, 70 bytes
Incluye +2 para
0p
Dé la matriz de entrada como un bloque de dígitos sin espacios en STDIN:
Gira la cruz girando los dígitos
fuente
Retina ,
9283 bytesPruébalo en línea! Explicación:
Busque todos los cuadrados superpuestos de 3x3. Una mirada atrás captura la sangría dos veces para que pueda equilibrarse en la segunda y tercera línea. Se supone que la entrada es rectangular, por lo que no tenemos que verificar que los grupos se equilibren. Las celdas medias inferior / superior y las celdas medias izquierda / derecha se capturan.
Ordenar cada par de celdas en orden.
Cuente los patrones válidos restantes.
fuente
Jalea , 26 bytes
Pruébalo en línea!
Explicación
-3 bytes gracias a Jonathan Allan (2) y Mr. Xcoder (3) (fusionado)
fuente
D
. Mi mal, arreglado....Fµ€ċ4R¤
lugar de...Ḍµ€ċ1234
(también tenga en cuenta que1234
podría haber sido reemplazado por⁽¡ḋ
guardar uno)Z3Ƥ
lugar deṡ3Z€
y en⁼J$µ€S
lugar deḌµ€ċ1234
.Java 8,
135133131 bytes-2 bytes gracias a @tehtmi por una fórmula más corta:
(l*r-1)*(t*b-1)==11
a~(l*r)*~(t*b)==39
Explicación:
Pruébalo en línea.
fuente
~(l*r)*~(t*b)==39
(Haskell~
aparentemente no tiene 1 byte ).Casco , 23 bytes
Pruébalo en línea!
Explicación
fuente
Dyalog APL ,
3029282726 bytes ( SBSC )Pruébalo en línea!
fuente
⌽∘⊖×⊢
podría ser más corto en 2 bytes, ¿puedes adivinar cómo?×∘⌽∘⊖⍨
(⌽×⊖)
⊢/
para otro -1. No pensé en eso. En esta situación no deberías darme crédito.Jalea , 36 bytes
Pruébalo en línea!
37 bytes
Por alguna razón, no puedo mover
Ḋm2$$
al enlace superior.Pruébalo en línea!
fuente
Limpio ,
255... 162 bytesNo es beneficioso que a menudo use filtros de patrones en las comprensiones, pero en este caso, lo es.
Pruébalo en línea!
Define la función
$
, tomar[[Int]]
y regresarInt
.Primero genera todas las simetrías de la matriz
m
(transformando víaf
), toma lastails
que tienen tres o más filas y verifica sincrónicamente cuántos de los primeros tres conjuntos de columnastails
de cada fila coinciden con el patrón de la cruz.Esto es equivalente a contar el número de ordenadas, que
tails
coincidentails
con el patrón[[_,1,_:_],[3,_,4:_],[_,2,_:_]:_]
, que lógicamente es lo mismo que verificar si, para cada celda de la matriz, esa celda es la esquina superior izquierda de cualquier rotación de la cruz.fuente
Python 3,
120118 bytesPruébalo en línea!
Utiliza el hecho de que el producto de pares opuestos de números en la cruz debe ser 2 y 12 respectivamente, y se compara con un conjunto para cubrir todas las diferentes orientaciones. Toma datos como una matriz 2D de enteros.
fuente
f=
en el marcadorJapt
-x
,393833 bytesPruébalo en línea!
-1 byte gracias a @Shaggy.
-5 bytes gracias a @ETHproductions refactorizando la matriz.
Desempaquetado y cómo funciona
No debe todavía ser una mejor manera de probar la cruz ...
fuente
e[2C]
.2
deë2
?