Esto es lo que pensé que iba a ser esta pregunta , antes de leerla completamente.
Un grupo de golfistas de código entra en The Nineteenth Bite Pizzeria y pide una pizza. Viene en una forma irregular, hecha de cuadrados unitarios. Su tarea es ayudarlos a cortarlo en rodajas idénticas. Es decir, las rodajas deben tener exactamente la misma forma y tamaño; se pueden girar pero no voltear / reflejar. Por ejemplo, si son piezas de Tetris, deben ser del mismo tipo, no puede usar tanto una pieza L como una pieza J.
Entrada
Se le dará el número de personas en el grupo en la primera línea (siempre un número entero de 2 a 10, inclusive), seguido de una matriz rectangular de caracteres '' (espacio) y '#', que representan la pizza. Todos los caracteres '#' están conectados a través de sus bordes. El número de caracteres '#' está garantizado para ser un múltiplo del número de personas.
Salida
Debe imprimir la misma matriz, con cada carácter '#' reemplazado con un dígito de 0 a n-1 (n es el número de personas). Cada dígito debe marcar una rebanada. La forma del corte debe estar conectada a través de los bordes cuadrados. La numeración de la porción no necesita estar en ningún orden en particular. Si hay varias formas de cortar la pizza, cualquiera de ellas es aceptable.
Si no es posible cortar la pizza según sea necesario, debe imprimir la cadena "¡No hay pizza para usted!" en lugar.
Puntuación
Este es el código de golf. Su puntaje será el número de bytes en el programa. Los caracteres se contarán a través de su codificación UTF-8. La puntuación más baja gana.
Ejemplos
Entrada:
3
#
###
####
#
Salida:
0
100
1122
2
Entrada:
4
###
# #
###
Salida:
001
2 1
233
Entrada:
2
# #
######
Salida:
No pizza for you!
Entrada:
5
#
####
#####
#####
#####
####
#
Salida:
0
1000
21110
32221
43332
4443
4
Entrada:
4
#
####
######
#####
####
Salida:
0
1000
111203
12233
2233
Requisitos
- Debe escribir un programa completo que lea desde la entrada estándar y escriba en la salida estándar.
- El programa debe ser ejecutable en Linux utilizando software disponible gratuitamente.
- Su programa debe terminar cada uno de los ejemplos anteriores en menos de 1 minuto en una computadora moderna.
- No hay lagunas estándar.
fuente
Respuestas:
Código PHP,
1808971 bytesImplementación rápida y sucia en PHP. Primero fuerza bruta todas las formas posibles de corte, luego fuerza bruta todas las posiciones y orientaciones de los cortes.
Uso:
cat pizza.txt | php pizza.php
Editar: redujo el tamaño del código en más del 45% al volver a escribir el algoritmo utilizando recursividad en lugar de bucles anidados. Sin embargo, esto consume memoria (y pizza ;-)). Las pizzas de más de 8x8 probablemente se quedarán sin memoria. La variante de bucle anidado puede manejar fácilmente cualquier tamaño, pero es dos veces el tamaño del código.
Código no documentado y documentado
A continuación se muestra el código original documentado. Para mantener mi cordura, trabajé con el código fuente completo y escribí un script minificador simple para eliminar las declaraciones como
assert()
yerror_reporting()
, eliminar corchetes innecesarios, renombrar variables, funciones y constantes para generar el código de golf anterior.fuente
define('_',98)
sí, ¿no está en conflicto con esofunction _
? No sé php, así que no puedo decir ...