Esta pregunta está inspirada y es la inversa de esta .
Dennis ( E
), Doorknob ( D
), Martin ( M
) y Chris ( C
) han pedido una pizza. La pizza rectangular se divide en piezas cuadradas, cada una de ellas marcada con el comedor deseado.
Escriba un programa o función que, dada una pizza rectangular que consta de 0 o más de cada letra, determine si:
Cada segmento para cada persona está conectado a la ruta . Esto significa que todas las letras que son iguales deben estar directamente adyacentes entre sí (sin conexiones diagonales).
El número de rebanadas por persona es el mismo para todos.
Debe generar un valor verdadero / falso con una nueva línea final opcional que indique si la pizza dada es o no justa.
Casos de prueba válidos:
DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEDMMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC
DEMC
DD
EE
MC
MC
EEDDMMMCCC
EEEDDDMMCC
Casos de prueba inválidos:
EDM
EDMCCMDE
DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEMDMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC
DDMMEECC
DMMEECCC
El código más corto en bytes gana.
DDDDDDDDDDDDD
<- una pizza justaRespuestas:
Pyth, 53 bytes
Demostración
Esto es esencialmente un relleno de inundación para cada letra, seguido de una verificación de que todos los conjuntos resultantes son del tamaño apropiado.
Para el relleno de inundación, comienza con la ocurrencia superior izquierda de cada letra, luego genera todos los vecinos de las ubicaciones encontradas hasta ahora, filtra las ubicaciones con la letra correcta y se repite hasta que el conjunto deja de cambiar.
fuente
Caracoles , 129
Imprime 1 para una pizza justa y 0 para una pizza injusta.
Versión ampliada:
&
significa que el patrón debe coincidir en todas las ubicaciones de la cuadrícula. La primera línea verifica un número igual de cada uno de E, D, M, C. utiliza la instrucción de teletransportet
, que es una excelente manera de hacer programas con complejidad factorial. Si una entrada tiene segmentos de tamaño desigual con varias unidades para cada uno de los 4 mods, el programa se bloqueará más o menos para siempre. Después de eso, hay una comprobación de una ruta contigua a la instancia superior izquierda de cualquier letra en la que comenzó el patrón.fuente
CJam, 93
Pruébalo en línea
Esto es ridículamente largo porque CJam (todavía) no tiene relleno de inundación incorporado o búsqueda de unión. Implementé union-find en el programa.
Explicación:
fuente
JavaScript (ES6),
153166Usando cadenas de plantilla, hay una nueva línea que es significativa y contada
Prueba a ejecutar el fragmento en Firefox.
fuente
Javascript ES6, 360
Comprueba el mismo número de C, D, E, M, luego inunda los rellenos y comprueba cualquier letra huérfana. No es un ganador, pero tuve que intentarlo.
Violín
fuente
JavaScript ES6,
328318316269178Explicación:
fuente
l=>{...}
está bien.k=(o)=>
para guardar 2 bytes más. Las funciones de flecha de un solo parámetro no necesitan paréntesis.