Usando un lenguaje de programación, escriba 5 programas de una sola línea, cada uno de los cuales genera una línea diferente del primer verso de la canción de 1972 de Harry Nilsson " Coconut " cuando se ejecuta individualmente:
Hermano compró un coco, lo compró por un centavo.
Su hermana tenía otro, ella lo pagó por una lima
. Puso la lima en el coco, se los bebió a los dos
. Puso la lima en el coco, se los bebió a los dos.
Ella puso la lima en el coco, ella los bebió a ambos
( letra completa )
Las últimas 3 líneas tienen la misma letra, por lo que sus últimos 3 programas también podrían serlo.
Hay 5 factores o 120 formas en que estos 5 programas de una sola línea se pueden organizar uno por línea en un solo programa de 5 líneas. Debe optimizar sus programas de una sola línea de modo que para la mayor cantidad posible de estas 120 combinaciones, el programa de 5 líneas muestre todo el verso en su orden correcto , exactamente como aparece arriba.
Ejemplo
La respuesta más simple tendría 5 declaraciones de impresión de una sola línea, las últimas 3 idénticas:
print('Brother bought a coconut, he bought it for a dime')
print('His sister had another one, she paid it for a lime')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
La salida a los programas de 5 líneas será el verso en su orden correcto siempre que los dos primeros trazos estén en sus lugares correctos. Solo 6 de los 120 arreglos posibles logran esto.
Puntuación
La presentación con la mayoría de los casos de trabajo de todas las 120 victorias. El desempate se dirige al conjunto de programas con el recuento de bytes acumulativo más bajo (no se cuentan las nuevas líneas). El ejemplo tiene 309 bytes.
Detalles
Es posible que sus programas no lean su propio código fuente. Tampoco deberían leer otros archivos externos o requerir una conexión de red.
Salida a stdout o alternativa más cercana. También puede enviar a un archivo con el nombre que elija.
Los "programas de una sola línea" son cadenas que contienen caracteres, excepto los terminadores de línea (probablemente solo deba preocuparse por las nuevas líneas).
Al componer las líneas simples en las líneas 5, debe agregar exactamente 4 líneas nuevas, una entre cada par adyacente de líneas simples. Opcionalmente, puede agregar una nueva línea final.
fuente
main
método? Entonces, ¿cuál debe ejecutarse al ejecutar el programa?main
.Respuestas:
CJam, 120 permutaciones válidas,
334 299290 bytesLógica bastante simple:
ACTUALIZACIÓN : Resulta que no necesita el ciclo de envolver-ordenar-desenvolver después de los 3 similares y que aparecen en las líneas finales de la canción. Puedo explicar por qué si no es tan aparente :)
fuente
Preludio , 120 permutaciones,
20452035 bytesEsto finalmente me ha convencido de que Prelude y CJam necesitan un hijo. Si no fuera por el conjunto de instrucciones muy limitado de Prelude, esta presentación en realidad sería muy competitiva, si ni siquiera superara a CJam.
La idea básica es la siguiente.
En Prelude, cada línea es su propia "voz" con su propia pila, y estas voces se ejecutan en paralelo. Es decir, en el programa completo, cada línea construirá individualmente la cadena y al imprimirla al final. Pero debido a los desplazamientos de las declaraciones de impresión, el orden de las líneas no importa en absoluto para el orden de la salida, ya que la ejecución es de izquierda a derecha, no de arriba a abajo.
Ahora, ¿por qué las líneas son tan largas? Prelude solo almacena números en su pila. Además, solo puede empujar un número de un solo dígito a la vez, por lo que se deben construir números más grandes a partir de la suma y la resta (tampoco hay multiplicación u otra aritmética). Entonces, la mayor parte del código es simplemente calcular y empujar los códigos de caracteres correctos. Para acortar esto un poco, los compensé
96
. Al final, para imprimir, hago un bucle hasta que la pila esté vacía (es decir,0
se encuentra un a), agrego 96 a cada número e imprimo.Tenga en cuenta que las cadenas se empujan hacia atrás, ya que se imprimen del último al primer carácter.
Esto supone el intérprete de Python con
NUMERIC_OUTPUT = False
(que es cómo la especificación define E / S).Usé el siguiente código CJam para generar la construcción de la cadena:
Por último, solo por diversión, por qué creo que esto sería realmente corto si Prelude tuviera un concepto de cadenas:
Ahora las declaraciones de impresión
!
ya están en el orden correcto, por lo que ni siquiera necesitaría compensarlas. Creo que me pondré a implementar esto en algún momento.fuente
Ruby, 120 permutaciones válidas, 430 bytes
Funciona en cualquier orden, o individualmente. Cada línea modifica el estado global, luego establece un enlace que se ejecutará al final del programa a menos que el enlace ya se haya establecido.
fuente
> <> , 120 permutaciones, 703 bytes
La restricción de una línea fue bastante difícil para un lenguaje 2D, así que tuve que encontrar la manera de aprovechar al máximo la
.
instrucción de teletransporte.La inicial
<
hace que el programa fluya hacia la izquierda, envolviendo y ejecutandoEsta es una serie de
p
instrucciones (put) que colocan caracteres hasta que el tablero se ve así:El
#.!50
entonces se invierte de nuevo el flujo del programa a la derecha de nuevo, antes de saltar a la línea 5. Lo que sigue es el siguiente:/
espejo en la línea 5 encuentra la letra 5, que se empuja a la pila. Luego nos teletransportamos a la línea 6./
espejo en la línea 6 encuentra la letra 4, que se empuja a la pila. Luego nos teletransportamos a la línea 7./
espejo en la línea 7 encuentra la letra 3 ...Esto sucede hasta que empujamos la letra 1, en cuyo punto nos teletransportamos a la línea 10. Este es un ciclo para imprimir toda la pila hasta que esté vacía.
Si solo está presente una línea del programa, los
\
espejos hacen el mismo trabajo que los teletransportes en cada línea lírica.Si el programa está codificado, entonces la explicación anterior aún se aplica, por lo que el programa funciona para todas las permutaciones.
fuente