Os irmãos da ordem de São Golfo, o Conciso, têm a tradição de recitar uma breve oração sempre que vêem alguém fazer o sinal da cruz . Devido ao alto nível de pecado medido entre os turistas recentemente, eles instalaram o sistema de CFTV no mosteiro e contrataram você para ajudá-los a manter a velha tradição viva na era da IA.
Sua tarefa é analisar a produção do software de rastreamento de dedos dos frades e dizer quantas orações são devidas. A entrada é uma matriz contendo números inteiros entre 0 e 4. 1,2,3,4 representam as posições dos dedos em momentos consecutivos no tempo. 0 representa não dedos.
O One True Way TM para atravessar a si mesmo é:
.1.
3.4
.2.
("." corresponde a qualquer dígito). No entanto, devido à incerteza sobre a rotação da câmera e à presença de piedosos irmãos ortodoxos orientais na multidão (cuja One True Way TM está na direção oposta lateral), você deve contar todas as rotações e reflexões também:
.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.
Um dígito pode fazer parte de várias cruzes. Ajude os frades a determinar o número de vezes que sua IA deve .pray()
contar contando quantas das submatrizes 3x3 acima estão presentes. Escreva um programa ou uma função. Receba informações de qualquer forma conveniente e razoável.
Casos de 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 seja o menor dos mais curtos, porque vence o reino dos votos positivos." Livro de São Golfo 13:37
"Não usarás brechas, pois são as obras perversas de Lúcifer." - Carta ao Meta 13: 666
Ligeira visualização de pessoas que fazem a cruz
Obrigado @Tschallacka pela visualização.
Respostas:
Grime , 20 bytes
Experimente online!
Uma implementação muito literal da especificação:
n`
faça o Grime contar o número de sub-retângulos da entrada que produzem uma correspondência..\1./\3.\4/.\2.
define o quadrado 3x3:Onde
.
pode haver qualquer personagem.oO
é um modificador de orientação que permite que esse retângulo apareça em qualquer rotação ou reflexão. Ov
é usado para diminuiro
a precedência de s, para que não precisemos de parênteses ao redor do quadrado.fonte
Caracóis ,
1716 bytesExperimente online!
Explicação
A
faz com que o Snails conte o número de possíveis caminhos correspondentes em toda a entrada.o
define a direção inicial para qualquer direção ortogonal (em vez de apenas para o leste). O padrão em si está na segunda linha:fonte
Haskell,
10810293 bytesExperimente online!
Sem regex. Correspondência de padrões
no canto superior esquerdo da matriz, faça um
1
if(l*r-1)*(t*b-1)==11
e recursivamente vá para a direita (solte.l.
) e para baixo (solte a primeira linha). Se o padrão não puder ser correspondido (na borda direita ou inferior), faça a0
. Soma todos os resultados.Edit: -9 bytes graças a @xnor.
fonte
2^(l*r)+2^(t*b)==4100
verificar os números, mas parece que nossas soluções são enganadas2,6
no lugar de3,4
.0..4
(l*r-1)*(t*b-1)==11
.Perl, 70 bytes
Inclui +2 para
0p
Dê matriz de entrada como um bloco de dígitos sem espaços no STDIN:
Gira a cruz girando os dígitos
fonte
Retina ,
9283 bytesExperimente online! Explicação:
Procure todos os quadrados 3x3 sobrepostos. Um lookbehind captura o recuo duas vezes para que ele possa ser equilibrado na segunda e terceira linhas. A entrada é assumida como retangular, portanto não precisamos verificar se os grupos estão equilibrados. As células do meio inferior / superior e as células do meio esquerda / direita são capturadas.
Classifique cada par de células em ordem.
Conte os padrões válidos restantes.
fonte
Geléia , 26 bytes
Experimente online!
Explicação
-3 bytes graças a Jonathan Allan (2) e Sr. Xcoder (3) (mesclado)
fonte
D
. Meu mal, fixo....Fµ€ċ4R¤
, em vez de...Ḍµ€ċ1234
(note também que1234
poderia ter sido substituído por⁽¡ḋ
salvar um)Z3Ƥ
vez deṡ3Z€
e em⁼J$µ€S
vez deḌµ€ċ1234
.Java 8,
135133131 bytes-2 bytes graças a @tehtmi para uma fórmula mais curta:
(l*r-1)*(t*b-1)==11
para~(l*r)*~(t*b)==39
Explicação:
Experimente online.
fonte
~(l*r)*~(t*b)==39
(Haskell que não tem um byte~
aparentemente.)Casca , 23 bytes
Experimente online!
Explicação
fonte
Dyalog APL ,
3029282726 bytes ( SBSC )Experimente online!
fonte
⌽∘⊖×⊢
pode ser menor em 2 bytes, você consegue adivinhar como?×∘⌽∘⊖⍨
(⌽×⊖)
⊢/
para mais -1. Eu não pensei nisso. Nesta situação, você não deveria me creditar.Gelatina , 36 bytes
Experimente online!
37 bytes
Por alguma razão, não consigo mover o
Ḋm2$$
link para o topo.Experimente online!
fonte
Limpo ,
255... 162 bytesNão é benéfico usar frequentemente filtros de padrão nas compreensões, mas, neste caso, é.
Experimente online!
Define a função
$
, recebendo[[Int]]
e retornandoInt
.Primeiro, gera todas as simetrias da matriz
m
(transformando viaf
), pega astails
quais têm três ou mais linhas e verifica de forma síncrona quantos dos três primeiros conjuntos de colunas datails
linha correspondente correspondem ao padrão da cruz.Isto é equivalente à contagem do número de pedi
tails
-of-tails
correspondente ao padrão[[_,1,_:_],[3,_,4:_],[_,2,_:_]:_]
- que por sua vez é logicamente a mesma que a verificação se, para cada célula na matriz, que é a célula canto superior esquerdo de qualquer rotação da cruz.fonte
Python 3,
120118 bytesExperimente online!
Usa o fato de que o produto de pares de números opostos na cruz deve ser 2 e 12, respectivamente, e se compara a um conjunto para cobrir todas as orientações diferentes. Recebe a entrada como uma matriz 2D de números inteiros.
fonte
f=
na pontuaçãoJapt
-x
,393833 bytesExperimente online!
-1 byte graças a @Shaggy.
-5 bytes graças a @ETHproductions refatorando a matriz.
Descompactado e como funciona
Deve ainda haver uma maneira melhor para testar a cruz ...
fonte
e[2C]
.2
inë2
?