Cree un programa que genere una cadena hello world ("Hello world", "Hello, World", etc.) y el código fuente. La salida se escribe en stdout o equivalente. La cadena Hello World está incrustada en el código fuente.
Por ejemplo, la salida para podría ser
(some source code here)hello world(some source code here)
Cuando la salida se compila o se vuelve a interpretar, debe crear una salida similar, pero la cadena hello world debe tener una puntuación o mayúscula diferente. Por ejemplo, el ejemplo anterior podría crear el siguiente resultado
(some source code here)hello, wORld(some source code here)
Cada "(algún código fuente aquí)" en estos ejemplos puede cambiar después de cada ejecución, o puede ser el mismo.
Su salida debe contener una cadena válida de hello world exactamente una vez. Puede contener cualquier cantidad de cadenas inválidas de hello world. El código fuente puede contener cualquier cantidad de comentarios, y la cadena hello world puede estar incrustada en los comentarios. El primer programa puede tener cero o una cadena válida de hello world, pero no más.
La siguiente puntuación es válida:
hello, world
hello world
helloworld
Cualquier capitalización es aceptable. Por ejemplo, estas son cadenas válidas de hello world:
Hello, world
hellO WORld
HELLoworlD
Estas cadenas no son válidas:
Hello world
Hello(newline)world
Hello,world
Hello, Steve
Su programa falla tan pronto como se cumpla una de las siguientes condiciones:
- Produce una cadena hello world que se ha generado durante alguna ejecución anterior,
- la salida ya no es código fuente válido en el mismo idioma, o
- la salida no contiene exactamente una cadena válida de hello world.
Su programa no es válido para este concurso a menos que al menos dos primeras ejecuciones sean exitosas. Esto significa que la tercera salida puede ser inválida. La salida de su programa puede no ser aleatoria. La primera ejecución siempre debe crear la misma segunda salida, la segunda ejecución siempre debe crear la misma tercera salida, etc.
La puntuación se calcula como la cantidad de bytes en el código fuente del programa inicial. La puntuación más baja gana.
Se aplican los siguientes bonos (hasta -60%):
- -5% * (N - 2), donde N es el índice de la ejecución después de la cual su programa produce resultados no válidos. Este bono se limita a -50%. Si su programa tiene éxito 12 veces o más, obtendrá el bono máximo.
- -10%, si sus salidas (incluido el primer código fuente) incluyen las tres alternativas de puntuación válidas.
Su envío debe incluir el primer código fuente, y también debe contener los resultados de las ejecuciones exitosas. Si su programa tiene éxito más de 12 veces, agregue la salida para 12 ejecuciones.
Ejemplo
La siguiente línea es el primer código fuente. Cuando lo ejecutamos, es la primera ejecución.
hello world(some source code here)
La siguiente línea es la salida del primer código de código fuente. Es la primera salida.
hello, world(some source code here)
La siguiente línea es la salida de la segunda ejecución. Es la segunda salida.
helloworld(some source code here)
Cuando ejecutamos la primera salida, este programa se convirtió en elegible para el bono de -10%. Eso significa que tenemos dos salidas y un código original, que tienen diferentes puntuaciones. Además, debido a que la segunda salida fue válida, este programa es elegible para este concurso.
La siguiente línea es la salida de la tercera ejecución. Es la tercera salida.
Helloworld(some source code here)
La siguiente línea es la salida de la cuarta ejecución. Es la cuarta salida.
hellworld(some source code here)
Esta salida fue inválida. El índice de la última ejecución válida fue 4. Este programa es elegible para un bono de -5% * (4 - 2) y un bono de -10% de la puntuación. Esto hace un total de -20%. La longitud del primer código fuente ("hola mundo (aquí está el código fuente)") fue de 34 bytes, por lo que el puntaje final es 27.2.
hello world
?Respuestas:
Pyth, 17 bytes
Una solución diferente de Pyth:
Salida:
Segunda salida:
fuente
Mathematica, 214 - 50% = 107 bytes
Decidí optimizar el recuento de cadenas aquí. Esto se ejecuta para 1024 programas sin parar, pasando por cada combinación de letras mayúsculas y minúsculas. La ejecución se puede ver aquí .
fuente
s
y lo evalúaToExpression
).Vitsy, 33-33 * .05 * (11-2) = 18.15 Bytes
Je! ¡Supera eso! Probablemente lo hagas. :C
Primera salida:
Segunda salida:
Tercera salida:
Cuarta salida:
Quinta salida:
Sexta salida:
Séptimo resultado:
Octava salida:
Novena salida:
Décima salida:
Undécimo resultado:
Esta es la última salida, ya que causará un error.
fuente
CJam, N =
34, 28 bytes - 10% - 10% = 22.4Esto inicia la siguiente cadena:
donde el último ya no contiene un "Hola Mundo" válido.
Pruébalo aquí.
Explicación
Tenga en cuenta que el programa inicial no contiene un "Hello, World" válido, pero eso nos permite ir una iteración más allá.
fuente
CJam
6960 - 50% = 30Todavía soy principiante, por favor dime cómo jugar golf en CJam.
Es tedioso imprimir cada iteración, ya que será válido por 99 iteraciones.
Funciona enumerando la capitalización de hola palabra. El tedio es dividir las cadenas en partes, ya que tanto "hello world" como el contador deben actualizarse.
Explicación
NOTA: No leo la respuesta de Mathematica, lo siento, creo que fue original
Con el reordenamiento y las diferentes mayúsculas, pierdo 9 bytes.
CJam 73 - 60% = 29.2
Esta vez también enumera la puntuación.
fuente
GolfScript, 35 bytes - 50% = 17.5
Decidí exagerar el número de ejecuciones antes de repetir. Este programa, con su salida realimentada en el intérprete de GolfScript, producirá 890 cadenas Hello World distintas antes de la primera repetición. Como breve muestra, aquí están las primeras 15 iteraciones:
La forma en que funciona es iterando a través de la cadena, volteando las mayúsculas de cada letra (haciendo XOR con su código ASCII con 32) si la letra anterior (después de posiblemente cambiar su mayúscula y minúscula) está en minúscula. La primera letra cambiará de mayúsculas y minúsculas si el número al comienzo del programa es 32 en lugar de 0, y el número de salida para la siguiente iteración será 32 siempre que la última letra de la cadena esté en minúscula, causando cambios al final de la cadena para propagarse al principio en la próxima iteración.
(Este proceso de retroalimentación en particular se obtuvo de una manera totalmente ad hoc . Originalmente quería ejecutar un contador binario simple usando mayúsculas y minúsculas como bits, pero eso tomó demasiados bytes para implementar, así que comencé a ajustarlo para encontrar algo más corto eso todavía produciría una duración de ciclo bastante alta. Dado que el máximo teórico, usando solo mayúsculas y minúsculas, es 2 10 = 1024, obtener un ciclo de 890 iteraciones es bastante bueno).
Por desgracia, la bonificación por iteraciones adicionales tiene un límite de −50%; sin el límite, este programa tendría una enorme bonificación de −4440%. ;-)
fuente
Pyth, 18 bytes
Que devuelve:
Que a su vez imprime:
Tenía una solución que hacía las tres ortografías, pero es más larga incluso con la bonificación.
fuente
Simplex , 21 bytes.
Esto es lo que era Simplex nació . Definitivamente puedo ir más lejos con esto.
(Sigo presionando Ctrl + Enter, lo siento, lo culpo en el teclado de la tableta)
Intento 3, v.0.8 +, 31-5% = 29.45 bytes (me parece que UTF-8)
Ese gesto en el medio se expresa. Algo así como. ¿Por qué hice esto otra vez? ._.
2da salida:
3ra salida:
Salida final:
Intento 2, v.0.8 +, 21 bytes (UTF-8, creo)
Salida:
Salida final:
Intento 1, v.0.7 +
2826 bytesNo estoy seguro de si esto califica para el primer bono ...
Primera salida:
El programa externo se evalúa al final de la ejecución (lo hace por y; así es como se ve el programa externo:
Salida final:
fuente
Rubí, 81 - 50% = 40.5
Código original:
Productos sucesivos:
Creo que esto cuenta como el 50% completo? Podría estar fuera por uno. Además, probablemente haya una solución sin bonificación con mejor puntuación en Ruby.
El código original no contiene "helloworld", pero construye un quine que reemplaza la primera letra mayúscula en su código fuente con la versión en minúscula. Por lo tanto, cada ejecución sucesiva del quine genera una letra minúscula menos.
El truco aquí es usar una cadena de formato para interpolar tanto la cadena en sí, para el quining, como la cadena Hello World, para que solo aparezca una vez.
fuente
PHP, 297 - 40% = 178.2 bytes
No es realmente competitivo pero fue divertido escribir
Es una variación de esta quine:
pero también agrega "helloworld" a la salida y reemplaza
0
con0+1
(en la próxima iteración1
con1+1
y así sucesivamente). Utilizandosubstr
cualquier salida "helloworld" existente se elimina antes de que se agregue el nuevo "helloworld".Para obtener una salida diferente, una letra de "helloworld" se escribe con mayúscula (determinada por el número creciente). Este es el código relevante:
Un desafío era no usar ningún número excepto aquí y para el reemplazo del número
Ahí ya ves que
+1
se realiza como+(int)true
.Para los argumentos de la subcadena que necesitaba
0, 146
:La cadena no vacía "i" se coacciona
true
y se niega.false
es un argumento entero válido y se trata como0
.ord(I)
es el valor ASCII de "I": 73Salida (primera iteración):
Salida (segunda iteración):
Salida (10ª iteración):
Esta es la última salida válida pero ya no es un programa válido
fuente
(int)true
darme cuenta de que puedo cambiar a `` !! i` y guardar 12 bytes. Intentaré jugar al golf un poco más tardePip, 48 - 50% = 24
que evoluciona de la siguiente manera:
con la última salida no válida porque
HELLOWORLD
no ha cambiado. (Corrígeme si no he hecho bien la bonificación).Gracias a esta pregunta, ¡acabo de descubrir una nueva técnica de quine! La base quine es
V Y"`V Y`.RPy"
:Nuestro código adicional modifica la cadena en
y
, antes de reproducirla, de la siguiente manera:0
caracteres estén en mayúsculas;0
cono+0
(dondeo
es una variable integrada que equivale a 1).La próxima vez alrededor del número en el código es en
1
lugar de0
, y así sucesivamente.fuente
Javascript, 52 bytes
Prueba
=>
<='("hello world").replace(" ","")'
=> eval('("hello world").replace(" ","")')
<= 'helloworld'
fuente
///, 23 bytes - 10% = 20.7?
Pruébalo en línea!
Primera salida:
Segunda salida:
fuente
BBC BASIC, 56 bytes
Tuve una grieta en esto antes de darme cuenta de lo tarde que llegaba al juego. Para lo que vale, aquí está mi versión y mi primer intento en StackExchange code golf.
Aquí, V. repite los caracteres dados por los códigos ASCII en la siguiente lista separada por comas y P. es la abreviatura para imprimir. Hago uso del carácter de retroceso para sobrescribir la cadena existente 'helloworld'.
Codigo de entrada:
Primera salida:
Segunda salida:
Se puede probar en línea en https://bbc.godbolt.org/
fuente