Esta questão é inspirada e é o inverso desta .
Dennis ( E
), maçaneta ( D
), Martin ( M
) e Chris ( C
) pediram uma pizza. A pizza retangular é dividida em pedaços quadrados, cada um marcado com o pretendido.
Escreva um programa ou função que, dada uma pizza retangular com 0 ou mais de cada letra, determine se:
Cada fatia de cada pessoa está conectada ao caminho . Isso significa que todas as letras iguais devem ser diretamente adjacentes uma à outra (sem conexões diagonais).
O número de fatias por pessoa é o mesmo para todos.
Você deve gerar um valor de verdade / falsidade com uma nova linha à direita opcional que indique se a pizza especificada é justa ou não.
Casos de teste válidos:
DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEDMMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC
DEMC
DD
EE
MC
MC
EEDDMMMCCC
EEEDDDMMCC
Casos de teste inválidos:
EDM
EDMCCMDE
DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEMDMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC
DDMMEECC
DMMEECCC
O menor código em bytes vence.
DDDDDDDDDDDDD
<- uma pizza justaRespostas:
Pitão, 53 bytes
Demonstração
Isso é essencialmente um preenchimento de inundação para cada letra, seguido de uma verificação de que todos os conjuntos resultantes tenham o tamanho apropriado.
Para preencher, ele começa com a ocorrência no canto superior esquerdo de cada letra, gera todos os vizinhos dos locais encontrados até o momento, filtra os locais com a letra certa e repete até que o conjunto pare de mudar.
fonte
Caracóis , 129
Imprime 1 para uma pizza justa e 0 para uma pizza injusta.
Versão expandida:
&
significa que o padrão deve corresponder a todos os locais da grade. A primeira linha verifica se há um número igual de E, D, M, C. Ela usa a instrução de teleportet
, que é uma ótima maneira de criar programas com complexidade fatorial. Se uma entrada tiver fatias de tamanho desigual, com várias unidades para cada um dos 4 mods, o programa será interrompido mais ou menos para sempre. Depois disso, há uma verificação de um caminho contíguo para a instância superior esquerda de qualquer letra em que o padrão foi iniciado.fonte
CJam, 93
Experimente online
Isso é ridiculamente longo porque o CJam (ainda) não possui preenchimento de inundação ou localização de união. Eu implementei o union-find no programa.
Explicação:
fonte
JavaScript (ES6), 153
166Usando cadeias de modelo, há uma nova linha significativa e contada
Teste a execução do snippet no FireFox.
fonte
Javascript ES6, 360
Verifica se há números iguais de C, D, E, M e preenche preenchimentos e verifica se há letras órfãs. Não sou um vencedor, mas tive que tentar.
Violino
fonte
JavaScript ES6,
328318316269178Explicação:
fonte
l=>{...}
é bom.k=(o)=>
para salvar mais 2 bytes. As funções de seta de parâmetro único não precisam de parênteses.