Como você provavelmente agora, existem 2339 soluções para o quebra-cabeça pentomino em uma grade 6x10. Existem diferentes esquemas de rotulagem para os 12 pentominós, dois deles são mostrados na imagem abaixo:
Crédito de imagem: Wikipedia
Para os propósitos da tarefa atual, diremos que uma solução pentomino normalizada é uma solução que utiliza o segundo esquema de rotulagem (de Conway).
Exemplo:
O O O O O S S S Z Z
P P R R S S W W Z V
P P P R R W W Z Z V
U U X R T W Y V V V
U X X X T Y Y Y Y Q
U U X T T T Q Q Q Q
A peça com 5 quadrados seguidos é indicada por letras O
, de acordo com o esquema. O mesmo vale para todas as peças.
Tarefa:
Dada uma solução para o pentomino 6x10 no qual as peças são rotuladas com um sheme aleatório, normalize-a para que todas as peças sejam rotuladas no esquema de rotulagem de Conway. Você precisa reconhecer as peças e marcar cada quadrado de uma peça em particular com o símbolo da peça.
Entrada:
A solução a ser normalizada, em qualquer formato que seja conveniente para você, por exemplo:
Uma sequência multilinha
Uma lista de strings
Uma lista de listas de caracteres
e assim por diante
Resultado:
A mesma solução (todas as posições e orientação das peças preservadas), mas cada peça é rotulada de acordo com o esquema de rotulagem de Conway. Nota: A saída DEVE SER IMPRESSA como uma grade 6x10 de caracteres. Novas linhas e espaços à esquerda e à direita são permitidos. Você também pode imprimir um espaço entre os caracteres (mas não as linhas vazias), como no exemplo acima.
Casos de teste:
1. Entrada:
6623338888
6222344478
66A234BB70
1AAA94B770
11A99BB700
1199555550
Resultado:
UURTTTQQQQ
URRRTVVVSQ
UUXRTVZZSY
PXXXWVZSSY
PPXWWZZSYY
PPWWOOOOOY
2. Entrada:
45ookkkk00
455ooogk00
4a55gggdd0
4aaa3gnnd.
4am333ndd.
mmmm3nn...
Resultado:
OWSSQQQQPP
OWWSSSRQPP
OTWWRRRUUP
OTTTXRZZUV
OTYXXXZUUV
YYYYXZZVVV
Critérios de vitória:
A solução mais curta em bytes em cada idioma vence. Não desanime pelas línguas do golfe. Explicações sobre algoritmos e implementações são bem-vindas.
fonte
Respostas:
APL (Dyalog Classic) ,
545350 bytesExperimente online!
Calcule uma invariante para cada pentomino na entrada: meça (∆x, ∆y) de cada um dos seus quadrados até o centro de gravidade, tire abs (∆x) e abs (∆y), some os componentes x e separadamente y componentes e multiplique as duas somas. Isso fornece 12 resultados distintos. Em seguida, encontre o índice da invariante de cada pentomino na coleção classificada de todos os invariantes. Substitua 0 por
'O'
, 1 por'X'
, 2 por'R'
, etc.fonte
Geléia , 37 bytes
Um programa completo com uma lista de strings (porque precisamos imprimir - caso contrário, remova o
Y
e você tem uma mônada fazendo uma lista de listas de números ou caracteres que retorna uma lista de listas de caracteres).Experimente online!
Quão?
Eu acredito que isso funciona usando a mesma categorização de pentominos que a solução APL da ngn , embora de uma maneira um pouco diferente (eu também não conheço a APL, portanto, não tenho certeza de quão semelhante o método está além da categorização).
(Observe que
“æṂ⁾+’Œ?¤+78Ọ
é apenas um salvamento de um byte“XRPTZWUYSVQO”
!)fonte
Wolfram Language (Mathematica) , 103 bytes
Recebe a entrada como uma lista de listas de caracteres.
Experimente online!
A idéia principal aqui é que, para cada caractere da entrada, localizemos as coordenadas onde ocorrem, pegamos a curtose e somamos suas coordenadas. Isso nos dá um invariante para cada peça.
(A curtose é um operador quase irrelevante das estatísticas - a chave é que ela é invariante na tradução, enquanto reflexão e rotação podem mudar a ordem das coordenadas no máximo. Somamos as coordenadas, para que a invariante nunca mude.)
De qualquer forma, além da invariante estranha, essa solução é semelhante às outras: classificamos os personagens e as peças por cada invariante e substituímos cada caractere pelo caractere correspondente de
"UPSWZVRTQXYO"
: as peças, classificadas pela soma da curtose.Por fim,
""<>Riffle[...,"\n"]
é o código de impressão como grade.fonte
Sort@Variance
substituídaTr@Kurtosis
e provavelmente mais pessoas já ouviram falar de variação. MasTr@Variance
não funciona porque vários pentominós (como P e X) têm a mesma soma de variância x e variância y. Então eu procurei na documentação do Mathematica por algo mais sofisticado.Python 2 , 191 bytes
Experimente online!
Pega uma sequência de várias linhas com uma nova linha à direita e faz seis compreensões de lista aninhadas.
Versão Ungolfed
fonte