Reto
Su tarea es escribir un fragmento de código que genere otro fragmento de código. A su vez, ese código debe generar otro código hasta que el código final genere el entero 1 . La cadena termina la primera vez que se emite 1 .
Ninguno de sus programas puede compartir caracteres (hay una excepción en la sección Reglas).
La presentación ganadora será la presentación con la cadena más larga. El desempate será la longitud de código total más corta.
Reglas:
- Puede usar ambas funciones, programas y fragmentos. Puede asumir un entorno REPL.
- Todas las funciones deben estar escritas en el mismo idioma.
- Los lenguajes independientes de símbolos no están permitidos. Esto incluye lenguajes independientes de símbolos parciales, como Headsecks.
- El formato de salida predeterminado se puede descartar opcionalmente en la salida de una función. Esto incluye líneas nuevas,
ans =
etc. - Puede reutilizar el carácter de espacio (punto de código ASCII 32), pero tenga en cuenta lo siguiente:
- Puede usar tantos caracteres de espacio como desee en una de las funciones, pero restringirlo a un máximo de 5 en todas las demás funciones
- No puede reutilizar ningún carácter si el punto de código 32 no es espacio en su idioma.
Ninguno de los programas puede recibir aportes
La cadena debe tener al menos dos programas de largo.
Ejemplo:
Tu código inicial es abc+cab+bac
. Esto genera:, foofoo*123
que a su vez genera disp(~0)
, que genera 1
. Esta es una cadena de 3 programas, con una longitud combinada de 29 (desempate).
code-challenge
code-generation
Stewie Griffin
fuente
fuente
2^3
, que solo se evaluaría1
, o tiene que serlambda:2^3
, por ejemploprint(2^3)
, etc.?1
ser tanto un programa como la salida de ese programa o la cadena termina cuando1
es la salida?Respuestas:
05AB1E , 5 cadenas: 236 + 29 + 13 + 3 + 1 = 282 bytes
Pruébalo en línea!
que imprime el programa
Pruébalo en línea!
que imprime el programa
Pruébalo en línea!
que imprime el programa
Pruébalo en línea!
que imprime el programa
Pruébalo en línea!
que imprime
1
fuente
8784>žxB
y probablemente estoy KO'd. La falta de números para la conversión de bases es una trampa total a menos que lo calcule. El objetivo, si quieres vencer a emigna, es usar la menor cantidad de números únicos por iteración. Su respuesta reina supremamente debido al 88 en la penúltima iteración. Realmente una gran respuesta.10
y hacer algo en binario. Pero no sé si podemos generar el primer programa desde binario sinB
.Java 8, cadena de 2 funciones,
90 + 1037 + 428 + 4 = 32 bytesQue es equivalente a:
-57 bytes gracias a @ OlivierGrégoire .
Pruébalo en línea.
Que devuelve la cadena:
Pruébalo en línea.
Que devuelve el entero:
fuente
\u0076\u002D\u003E\u0022\u0076\u002D\u003E\u0022+(3\u002D2)
(59 bytes + 4 bytes). Las reglas dicen "Ninguno de sus programas puede compartir caracteres", por lo quev->1
es válido porque el final1
no es un programa.v->1
devolver 1 es válido, pero en mi respuesta original\u0031
contendría un 1, yv->1
también contendría un 1. Sin embargo, es una buena combinación de Java unicode y Java normal. Y jugué 2 más al cambiar(2/2)
a2/2
. (PD: También hay una respuesta Java de cadena 3 de Jakob .)"\44\55\76"
lugar de"\u0076\u002D\u003E"
R , 3 cadenas 198 + 44 + 3 bytes
Pruébalo en línea!
Devoluciones :
Pruébalo en línea!
Devoluciones :
Pruébalo en línea!
Devoluciones
1
Explicacion:
El primer programa está casi totalmente escrito en representación octal, donde cada carácter se escribe como
\xxx
dondexxx
está el código ASCII en modo octal. En forma legible para humanos sería:Aquí, para evitar el uso de corchetes, redefinimos el operador de prefijo
+
igual acat
function, luego lo usamos para imprimir la siguiente cadena. Incluso después de asignarcat
a+
, este último aún conserva su "estado" de operador de prefijo y simplemente tomará lo que sigue como su primer parámetro.El segundo programa, simplemente imprime los caracteres que los
F^F
obtienen de ASCII decimal:70,94,70
Como en el primer programa usamos la representación octal, solo los números
8
y9
son libres de ser usados; por lo tanto, obtenemos70
y94
con algunas diferencias entre números con solo8's
y9's
.Finalmente, el último programa,
F^F
, explota la^
función (poder de) que coaccionaFALSE
a0
y calcula0^0
regresar1
Créditos para :
+
para evitar corchetesVersión previa :
R , 2 cadenas
27 + 324 + 2 bytesPruébalo en línea!
Devoluciones:
Pruébalo en línea!
Las devoluciones
1
.fuente
cat
obligatorio?"wri\164e"(function args)
para evitar unat
u otras codificaciones similarescat(intToUtf8(c(49,76)))
funcionaría y es un poco más corto. Sin embargo, no expande la cadena.Python 2 , 2-Chain, 7 + 44 = 51 bytes
y
Pruébalo en línea!
El código base 16 se traduce en
print 1
, que es devuelto por la función anónima.fuente
Perl 5, 3 cadenas,
151139 caracteres (114 + 20 + 5)La fealdad dentro del
&{ }
evalúa aCORE::syswrite
, por lo tanto, la cadena con escape hexadecimal se imprime en la salida estándar como:Tenga en cuenta que ^ C y ^ R en lo anterior representan caracteres de control literales. (Y no debe confundirse con el
^
cautela literal que ocurre entre las dos cadenas).Este programa a su vez genera:
fuente
Octava , 3 programas, longitud 42 bytes
Salidas:
[[63 24]*2 '']
. Pruébalo en línea!Salidas:
~0
. Pruébalo en línea!Salidas:
1
. Pruébalo en línea!fuente
Cjam, 4 cadenas, 28 + 20 + 3 + 1 = 52 bytes
Fragmento 1:
Fragmento 2:
Fragmento 3:
Fragmento 4:
Que luego imprime 1.
Pruébalo en línea!
Nota:
Como Cjam no tiene interpretación para los caracteres de escape, los del fragmento 1 solo están allí para una mejor vista web. Debe usar los caracteres reales correspondientes para ejecutar el fragmento.
Si no puedo eliminar más personajes, entonces ¡buen trabajo para @Emigna por la
05AB1E
respuesta!fuente
1
utilizado en el fragmento 1Excel, cadena 2, 27 + 3 bytes
No estoy seguro si esto está bien ...
fuente
CHAR(61)&
principio para que haya una cadena de 2?CHAR
convertidoCAR
, 3 bytes guardan), no estoy seguro si otro idioma reducir más--1
en una celda y presionar enter, solo se mostrará1
en la pantalla ...=
implícitamente si escribe--1
.=
marca para+1
(pero lo hace para--1
), por lo que no lo consideraré como una expresión. Y no estoy seguro de si simplemente escribir un1
en la celda y llamarlo "salida 1" es válido. Por eso--1
se usa.x86 bytecode, cadena 2, 10 + 4 bytes
(Ensamblado con FASM, formato PE)
ÇA.Ï?¿<÷Y.
produce1À@Ã
en la dirección al lado y la ejecuta, lo que devuelve1
en eax (según FastCall). En ambos casos, el.
realmente representaA
o LF.En hexadecimal:
C7 41 0A CF 3F BF 3C F7 59 0A
y31 C0 40 C3
.Desmontado:
produce
Este (ab?) Utiliza el hecho de que el punto de entrada del programa se almacena en ecx, y luego escribe el inverso del código a ejecutar en la dirección de 10 bytes y lo niega.
Puede romperse o no si se ensambla con otra cosa que no sea fasm, a cualquier cosa que no sea PE o con un punto de entrada diferente.
fuente
JavaScript REPL, muchos bytes, 4 iteraciones
Demasiado perezoso para optimizar el código JSFUCK
JavaScript REPL, 164 bytes, 3 iteraciones
puede ser capaz de expandirse
Pruébalo en línea!
fuente
1
en otros profesionales, por lo que el primero1
es el programa y el segundo es el resultado{}
s?CJam, 7 cadenas, 92365 + 1819 + 79 + 14 + 9 + 3 + 1 bytes
Este programa de 92365 bytes imprime
que imprime
que imprime
que imprime
que imprime
que imprime
que imprime
1
.fuente
MATL , 5 programas, 404 + 159 + 35 + 4 + 1 = 603 bytes
Llegar a 4 programas fue difícil. ¡5 programas fueron muy difíciles!
Pruébalo en línea!
Pruébalo en línea!
Este podría ser mi programa favorito que he escrito en PPCG:
Pruébalo en línea!
Pruébalo en línea!
Pruébalo en línea!
Explicación:
Después de haber usado horas en este programa, ¡no escribiré toda la explicación ahora! ¡Lo escribiré más tarde!
Breve resumen:
Para convertir esto en una cadena en lugar de códigos de caracteres, necesitamos concatenarlo con una cadena usando
h
. Para obtener una cadena, sin usar comillas, o los modificadores XY, hacemos una conversión de base y convertimos un número entero en espacios en blanco.fuente
CJam, 10 programas, 5,751,122,990 bytes
Era demasiado vago para jugar golf ... Pero aparentemente no necesito jugar golf para ser competitivo. Pero sin jugar al golf es un poco difícil publicar la solución en una respuesta.
En teoría, debería funcionar en el intérprete de JavaScript , pero el programa es demasiado largo para probarlo en un navegador. Debería generar lo mismo en el intérprete de Java, excepto para el último programa. Pero también puede quedarse sin memoria en el intérprete de Java para los primeros programas.
Estadística
Primeros bytes
\n
es nueva línea en el segundo programa.Generador
fuente
APL (Dyalog) , 2 cadenas, 15 + 2 = 17 bytes
Pruébalo en línea!
Salidas del programa
Que salidas
fuente
JavaScript (ES6), 2 funciones, 31 + 4 = 35 bytes
vuelve
_=>1
, que vuelve1
Mostrar fragmento de código
fuente
Gelatina ,
38 37 3635 bytes, Cadena de 4Pruébalo en línea! ( 18 bytes)
Pruébalo en línea! ( 13 bytes)
Pruébalo en línea! ( 3 bytes)
Pruébalo en línea! ( 1 byte)
18 + 13 + 3 + 1 = 35 bytes
¿Cómo?
fuente
Python 2 , 3 fragmentos, 68 + 12 + 3 = 83 bytes
que produce la cadena de literales octales:
que produce:
Lo que finalmente produce
1
.Pruébalo en línea!
fuente
Java 8, 3 programas, 431 bytes
Programa 1, 332 bytes
Una lambda de un parámetro (vacío) de cualquier tipo a
String
.Esto es solo una lambda con los caracteres de flecha Unicode-escape que devuelve el texto del segundo programa codificado con secuencias de escape octal.
Pruébalo en línea
Programa 2, 93 bytes
Fragmento que produce a
String
.Pruébalo en línea (con devolución agregada)
Programa 3, 6 bytes
Una lambda de un parámetro (vacío) de cualquier tipo a
int
.Pruébalo en línea
fuente
\166
a\44
por -1 bytes, ya que$
es también un nombre de variable válido. Pruébelo en línea , lo que da como resultado$->9-8
( Pruébelo en línea. )\uXXXX
en el primer código que deben evitarse->
. A continuación, es necesario o bienreturn
(función) oSystem.out
(fragmento o función), ambos contienen unau
que ya se utiliza en\uXXXX
. Por lo tanto, personalmente creo que esta entrada no es válida y la rechacé en consecuencia.System.console().printf
podría usarse para evitar el uso deu
. Algo similar se hace en esta respuesta y también lo he usado en estas dos respuestas mías .x->"\146\157\162\50\143\150\141\162\40\44\72\156\145\167\40\143\150\141\162\133\135\173\47\171\47\54\47\54\47\54\47\75\47\54\47\70\47\54\47\56\47\54\47\70\47\175\51\123\171\163\164\145\155\56\143\157\156\163\157\154\145\50\51\56\160\162\151\156\164\146\50\53\53\44\53\156\145\167\40\123\164\162\151\156\147\50\51\51\73"
(319 bytes) se convierte enfor(char $:new char[]{'y',',','=','8','.','8'})System.out.printf(++$+new String());
(89 bytes) se convierte enz->9/9
(6 bytes). Total: 404 bytes.System.console()
al segundo programa, que tiene 89 bytes correctamente (mientras queSystem.out
hace 83 bytes).SmileBASIC, cadena 3, 375 bytes
Salidas:
Salidas:
Salidas:
fuente
PHP 7.0, 2 cadenas, 35 + 8 = 43 bytes
Mientras escribía mi respuesta inicial, me di cuenta de que podía usar la codificación base64 para el segundo eco. Afeitó 11 bytes, así que aquí está. También puedes encontrar mi idea original a continuación.
Ejecutar usando php -r:
Esto produce:
Que luego obviamente imprime:
Salida:
Mi código cuando se ejecuta en una terminal. El && echo adjunto es solo para legibilidad.
Comentarios:
No hay mucho en realidad. Muy simple una vez que sepas que "?>" Actúa implícitamente como ";". La parte "difícil" era descubrir qué codificar:
Alternativamente, también podemos usar "echO" y "ECHo" (36 + 7 = 43 bytes).
También podemos cambiar el; y?> usando eso. Funciona igualmente bien y todo tiene la misma longitud.
Mi solución inicial:
PHP 7.0, 2 cadenas, 44 + 10 = 54 bytes
Esto es lo mejor que se me ocurrió al principio. Comprendí que "caracteres únicos" significaban "eco" no es igual a "ECHO". ¡Espero haber acertado!
Ejecutar usando php -r:
Esto produce:
Lo que a su vez nos da nuestro número:
Salida:
Mi código cuando se ejecuta en una terminal. El && echo adjunto es solo para legibilidad.
Algunos comentarios:
Gracias por el desafío, ¡aprendí algo hoy!
fuente
Lua, 2 cadenas, 83 + 8 = 91 bytes
Salidas
Que salidas
fuente
Carbón, 2 programas, 10 + 2 = 12 bytes
Pruébalo en línea! Salidas
Pruébalo en línea! Qué salidas 1.
fuente
Braingolf , 2 cadenas, 9 + 2 = 11 bytes
Pruébalo en línea!
Esto salidas
Pruébalo en línea!
(Además de algunos resultados predeterminados que pueden ignorarse según las reglas de OP)
Esto a su vez genera
fuente
Röda , 2 cadenas, 31 + 3 = 34 bytes
Fragmento 1:
Pruébalo en línea!
Fragmento 2:
Pruébalo en línea!
Son fragmentos, porque cada programa válido de Röda debe incluir
main{...}
hinchazón. También son programas válidos de Röda REPL.fuente
cc , 3 programas, 48 bytes
Primero:
Produce el segundo:
Produce el tercero:
Los rendimientos
1
.Pruébalo en línea!(tiene un código de borrado de pila e impresión de nueva línea para que los tres bits se ejecuten de una vez).
Quizás sea mejor comenzar en el programa tres
KZn
,. Solo hay unas pocas formas de imprimir cosasdc
, y me di cuenta en esta etapa que probablemente estaría atrapado con unop
on
ambos, los cuales están en los 100 en ASCII decimal. Esto significa que era casi seguro que iba a tener que generar 1 en lugar de solo usar el programa1n
.K
empuja la precisión actual (predeterminada: 0) a la pila, yZ
empuja el número de dígitos de la parte superior de la pila, lo que nos da el 1 para imprimir.El segundo programa es bastante sencillo.
P
imprime el carácter con el valor ASCII dado, por lo que imprimimos75
(K
)90
(Z
) y finalmente110
(n
), lo que funciona de maravilla. También significa que, aparte del mencionado 1, no puedo usar los dígitos 5, 7, 9 o 0 en otro lugar. También necesito un método que no seaP
para convertir números en caracteres.El primer programa, entonces, tiene que hacer cuatro números sin usar los dígitos 1, 5, 7, 9 o 0. Necesita hacer
80
(valor ASCII deP
)82 2-
:;75
:AA
(110)I-
(reste la raíz de entrada predeterminada, 10)I2/
(so, 5)2^
(so, 5 ^ 2, 25)-
(75);90
:AA
(110)I2*
(dos veces la raíz de entrada predeterminada de 10, entonces 20)-
(90); y110
: bueno, es soloAA
. Después de hacer80
, usamosa
para convertir un número en una cadena. Hay algunos comandosr
everse yd
uplicate para colocar laP
s en los lugares correctos, y finalmente imprimimos toda la pila conf
.Estoy bastante seguro de que no lo arruiné, pero me dio un vuelco la cabeza ...
fuente
05AB1E , 5 + 3 = 8 bytes
Pruébalo en línea!
que de inmediato vuelve
Estoy tomando la salida 1.0 como no igual a 1, así que ejecuto ese código:
Pruébalo en línea!
que vuelve
Y ahi tienes!
Número de programas =
2
fuente
h
(convertir a hexadecimal). Elg
(get length, default 0) witht
(square-root) ya da un decimal0.0
. Con<
(disminuir en 1) se convierte-1.0
y luegon
(cuadrado) cambia esto a1.0
. También puede reemplazar el<n
con>
(aumentar en 1). ;) Entonces, en total son 3 bytes (gt>
). Alternativamente, podría usarXt
(1
y raíz cuadrada). PS: No estoy seguro de si1.0
a1
es una parte válida de la cadena. Le he pedido a OP que verifique. Bienvenido a PPCG y disfrute su estadía.Ruby, 2 cadenas, 24 + 3 = 27 bytes
La salida es
fuente