Debería escribir un programa o función que genere o devuelva la mayor cantidad posible del Capítulo I de El Principito . Su programa o función tiene que ser un bloque de código M-por-N que contenga solo caracteres ascii imprimibles (punto de código del 32 al 126) y nuevas líneas al final de cada fila.
Solo puede usar como máximo 26 caracteres de su elección entre los 96 caracteres ascii imprimibles (y las nuevas líneas al final de las filas).
En cada fila y columna, cada personaje debe ser distinto al de un sudoku, es decir, no puede haber una letra en una fila o columna dos veces.
Un ejemplo bloque de código correcta con M = 4
, N = 3
y alphabet = {a,b,c,d,/,*}
:
abcd
bcd*
*/ac
Detalles del código
- Puede elegir la forma de su bloque de código (es decir,
M
yN
). - El bloque debe completarse con caracteres por completo, es decir, cada fila debe tener la misma longitud.
- Una nueva línea al final de la última fila es opcional.
- Como se escribió anteriormente en cada fila y columna, cada carácter debe ser distinto.
Detalles de salida
- Debería generar o devolver un prefijo del Capítulo I de The Little Prince sin ningún resultado adicional.
- Si llega a una nueva línea en el texto, puede representarla como cualquier variante común (\ r, \ n, \ r \ n) pero use solo una de ellas y cuente como 1 byte para la puntuación.
- Una nueva línea adicional es opcional.
Su puntaje es la longitud del texto de salida, excluyendo una nueva línea adicional si está presente. Mayor puntaje es mejor.
Ejemplo de respuesta
##Python3, score = 6
alphabet = `print('O\ce w)#X` (alphabet element count = 16)
print('O\
nce w')#X
Puede verificar la validez de su código con este programa Python 3 (ideone) o este programa CJam (en línea) provisto por @ MartinBüttner.
Respuestas:
CJam, 47
Pruébalo en línea
Alfabeto:
"'*-/2INOSacdehilmnorswxy
Explicación:
fuente
Pip , puntaje = 38
Alfabeto:
"'015:IMORXacdehilnorswxy
(Seguro que odiaría probar esto en un lenguaje de programación real ).
Explicación:
fuente
Python 3, puntuación = 11
Este es un problema realmente difícil para Python, ya que las restricciones en la repetición de caracteres en una línea o columna hacen que sea casi imposible hacer más de una cadena literal. Por lo tanto, las diversas formas de unir cadenas son bastante inútiles, ya que no puede obtener las cadenas para comenzar de ninguna manera útil. Aquí está mi mejor intento:
Tenga en cuenta que hay un espacio al final de la primera línea. El alias
x
parachr
es necesario para evitar que el mismo carácter termine en más de una columna. Los caracteres de comentario al final podrían ser casi cualquier cosa.El alfabeto tiene 21 caracteres imprimibles, más nueva línea (observe el espacio al inicio):
Salida es:
fuente
CJam, puntaje = 21
Alfabeto:
-;INOSacehinoswxy
Solo para hacer rodar la pelota; Esto probablemente se puede superar fácilmente.
fuente
CJam, puntaje = 15
He tenido esta idea por un tiempo, pero no he tenido tiempo de sentarme y barajar las cosas hasta que obtenga la singularidad de columna necesaria, así que aquí hay una versión para bebés por ahora:
Alfabeto (26):
" #)*+,0123456789:;=>Ibcef
Pruébalo en línea .
Explicación
La idea básica es utilizar la codificación base para que podamos imprimir más de 26 tipos de caracteres. El código central es
Tenga en cuenta que tratamos el primero
"O"
por"Once"
separado porque incluirlo en nuestra cadena tomaría demasiado de nuestro alfabeto. Si quisiéramos, podríamos intentar extender nuestra cadena de indexación, pero como no suceden más caracteres en mayúscula por un tiempo, aparte de"I"
eso, no me molesté demasiado con esto.Entonces necesitamos construir el gran número en la segunda línea de alguna manera. El enfoque que tomé fue multiplicar repetidamente por algo de potencia, luego agregar una constante y repetir, por lo que en el código anterior
85032995607801617394
se reemplaza pordonde
)
es incremento y#
es exponenciación en CJam.Luego, el resto (la parte más molesta) está rellenando cada fila para cumplir con los criterios de la columna. Para hacer esto, volcamos los caracteres en cadenas y los usamos
;
para reventarlos. Desafortunadamente, si bien nos gustaría usar también lose#
comentarios para facilitar las cosas, el hecho de que#
sea exponenciación lo prohíbe, por lo que esto solo se hace en la última línea.Estoy bastante seguro de que este método puede extenderse hasta la coma en la primera oración, pero desafortunadamente barajar las cosas para cumplir con los criterios de la columna está resultando difícil, por lo que podría necesitar otro método para generar el entero codificado en base.
fuente
Python 2, puntaje = 13 (inválido)
Python no es el mejor lenguaje para esto ... Luego de una inspección más profunda, hay dos
n
s en mi primera línea. No hay remedio que valga la pena, y voy a dejar de perder el tiempo con Python. Actualmente estoy trabajando para hacer una solución en otro idioma, pero aún no compartiré cuál.Alfabeto (22):
"#(),0167IOcehinprtw
Salida:
Once when I w
fuente
n
s. Este problema es casi imposible en Python, ya que solo puede usar una barra diagonal inversa de continuación de línea una vez (ya que la barra diagonal inversa debe estar en la última columna) y ninguna línea puede tener dos del mismo tipo de comillas.