El objetivo es escribir un programa que codifique otro programa (entrada) con la menor cantidad de caracteres posible.
Puntuación
- La puntuación es igual al número diferente de caracteres necesarios para la salida.
- Puntaje más bajo es mejor.
Reglas
- No hay idiomas de destino con un conjunto limitado de comandos. (Sin Brainf ** k, espacios en blanco, etc.)
Editar : quiero decir al menos 26 caracteres significativos,A
no cambia la forma en que funciona un programa brainf ** k, por lo que no puede contar este personaje. Lo mismo se aplica al espacio en blanco. - El idioma de destino debe existir en el momento en que se escribe esta pregunta.
- Debe incluir una pequeña explicación de cómo archiva su puntaje.
- El programa de entrada es válido.
- El programa codificado debe ser un programa válido en el mismo idioma que la entrada.
- El programa codificado debe hacer el mismo trabajo que el programa original.
- Su codificador debe funcionar para cada programa válido en ese idioma.
- Incluya algunas entradas y salidas de muestra.
Notas
- El codificador puede estar escrito en cualquier idioma, no solo en el idioma al que apunta.
- Esto no es código golf , se alientan los programas legibles.
- El gran objetivo es ver cuántos caracteres diferentes se necesitan para escribir algo en ese idioma. No permití BF, etc., porque no habría ningún desafío.
- Esto se inspiró en Imprimir una cadena con el menor número posible de caracteres distintos , podría tomarlo como metagolf para esa pregunta.
Ejemplo
En Java, puede usar \uXXXX
en su lugar otros caracteres. Una entrada válida codifica cada carácter de la entrada de esta manera. Esto tendría un puntaje de 18. ( \ 0-9a-f
)
Código en Tcl, codifica un programa Java:
set res {}
foreach char [split [read stdin] {}] {
append res [format \\u%04x [scan $char %c]]
}
puts $res
atomic-code-golf
generation
metagolf
Johannes Kuhn
fuente
fuente
gets
lee una sola línea de entrada? Y te perdiste elu
codificador (pero, por otro lado, no necesitas el espacio y, por lo tanto, la puntuación sigue siendo la misma).Respuestas:
GolfScript / GolfScript, puntaje 4
El codificador en sí es un programa GolfScript que toma el código original en STDIN y lo transforma en una secuencia de caracteres
',+~
. Esta salida en sí es un código GolfScript válido que realiza las mismas operaciones que la versión original.El método básico consiste en una codificación del código como una cadena (usando caracteres
',+
, ver abajo) y luego evaluar esta cadena usando el comando eval~
.Si uno concatena cualquier cadena junto con una matriz de números en GolfScript, los números se convierten en puntos de código y el resultado es una cadena en sí misma. Por lo tanto, la codificación de la cadena simplemente crea una lista de números (a partir de los puntos de código del código de entrada) y luego concatena a todos aquellos con una cadena vacía.
Ejemplo:
El código de entrada
se traduce en (nota: saltos de línea y comentarios agregados para facilitar la lectura)
fuente
Python -> Python, 8 caracteres distintos
Esto utiliza el formato de módulo para reconstruir la cadena de entrada. Por ejemplo, los
print 1
resultados en este programa:En teoría, puede codificar cualquier programa como este, pero el programa resultante siempre tendrá más de 2 n caracteres, donde n es el número de caracteres en la entrada, sin incluir
%
símbolos.fuente
2**n+3*n-1 + 6
caracteres, incluidos todos los caracteres de entrada (si supone que cada carácter es un byte NUL). Esto está tomado de OEIS A132074 , más 6 paraexec''
. Si supone que los caracteres deben ser ASCII imprimibles, entonces el límite inferior es mayor. repl.it/EHENCJam -> CJam, puntuación: 3
CJam es más nuevo que la pregunta, por lo que no es elegible para ganar.
Lo usa
')~
.')
es el personaje)
, y cada extra lo)
incrementa en uno.~
puede evaluar un caracter o una cadena. El programa completo se evalúa después de concatenar todos los caracteres mediante evaluación+
. Y se evalúa un número entero del valor del carácter y una operación de número a carácter para cada carácter menor que)
.Ejemplos
se traduce en:
y
se traduce en:
fuente
APL (puntuación: 10)
Caracteres utilizados en la codificación:
⍎⎕AV[(⍴⍬)]
El programa APL para codificar debe restringirse al juego de caracteres APL y no utilizar ningún Unicode adicional.
Codificación para el programa
42
(que genera la respuesta a la vida, el universo y todo):Cómo funciona:
⍬
es la lista vacía,⍬⍬⍬⍬
por lo tanto , es una lista de cuatro listas vacías,⍴⍬⍬⍬⍬
es la longitud de la lista de cuatro listas vacías, que es cuatro. Dyadic⍴
se reformula, por lo que las instrucciones de longitud de lista de listas deben estar entre paréntesis, dando la codificación final del número cuatro como(⍴⍬⍬⍬⍬)
.Estos números se buscan en
⎕AV
el conjunto de caracteres y⍎
ejecuta la cadena resultante.(A primera vista, parece que el puntaje podría elevarse a 9 usando en
⎕UCS
lugar de⎕AV
y guardando[]
, pero eso no funciona, porque(⍴⍬)(⍴⍬)
es una lista de listas de escalares, es decir, en[[1], [1]]
lugar de la[1, 1]
que se requeriría, y trabajando alrededor de eso requeriría intercalar los valores codificados con comas, lo que elevaría el puntaje a 10).fuente
RProgN , 7 caracteres distintos, sin competencia
RProgN es más nuevo que esta pregunta.
' do.Lc
Convierta el programa a
'oooo...' L c 'ooooo...' L c 'oo...' L c . . . do
, donde cada 'oo ...' representa el código de caracteres en o, rodeado de apostrificados para hacer una cadena de ellos. L c luego los convierte en una constante numérica. Después de que todas las cadenas se colocan en la pila, una cadena de. Es igual a la cantidad de caracteres en la cadena codificada menos uno reconstruye la cadena codificada y la ejecuta.Codificador, también escrito en RProgN.
Pruébalo en línea!
fuente
Ruby -> Ruby, 8
Muestra:
Implementa la solución Ruby dada en el problema vinculado y reemplaza E / S con eval.
fuente