Antecedentes
Hola golfistas! ¡Me gustaría aprender todos los lenguajes de programación! Pero tengo un poco de atención ... y copiar todos los ejemplos de Hello World se vuelve aburrido ... ¡pero me gusta el fuego! ^ w ^
Desafío
¡Así que aquí está el plan! Quiero que todos escriban el código más pequeño que compilará, imprimirá Goodbye Cruel World!
y luego se bloqueará. O, como desafío adicional, imprima Hello World!
y bloquee conGoodbye Cruel World!
Reglas
- Su puntuación será el recuento total de caracteres utilizado. La respuesta debe ser un programa ejecutable completo.
- Su programa debe imprimir
Goodbye Cruel World!
a la salida y luego bloquearse (error inesperado).- Para obtener una bonificación de puntaje, debe imprimir
Hello World!
en la salida, pero el mensaje de error también debe contenerGoodbye Cruel World!
. Si completa el desafío de bonificación, puede dividir su puntaje por 2. (¡Incluya a! Al final de su puntaje si reclama el bono!)
- Para obtener una bonificación de puntaje, debe imprimir
- Mientras la salida estándar todavía se imprima, y el error estándar aún se imprima, el orden no importa. Siempre y cuando ninguno pueda impedir que el otro suceda.
- La salida debe contener el contenido de lo anterior;
"
no debería aparecer en la salida. - La salida debe contener la cadena especificada y nada más.
- El informe de bloqueo puede contener cualquier cosa, pero para reclamar la bonificación, la siguiente expresión regular debe coincidir
/Goodbye Cruel World!/mi
(es decir, contiene, ignorar mayúsculas y minúsculas) - Las cadenas
Hello World!
y noGoodbye Cruel World!
distinguen entre mayúsculas y minúsculas, pero de lo contrario deberían aparecer exactamente como se indica arriba. - Si el idioma es capaz de bloquearse (no puede cambiar su código de salida), debe bloquearse. De lo contrario, utilice el "informe de error" estándar (es decir,
STDERR
) para el idioma.
Puedo bloquear Python 3, así que he incluido un ejemplo de respuesta Python 3. ¡Ahora vamos a prender fuego al mundo! ^ W ^
code-challenge
hello-world
Tezra
fuente
fuente
as a bonus twist challenge, print "Hello World!" and crash with "Goodbye Cruel World!"
?Respuestas:
Jalea , 12 bytes
Pruébalo en línea!
Explicación:
Como la división entera es una diada, tomará implícitamente el valor actual de la cadena como ambos argumentos, que es una cadena. Se bloquea porque espera enteros.
fuente
A base-250 encoded string
Es genial y aterrador que puedas hacer eso. X3C, 43 bytes
Imprime la cadena y luego intenta usar el valor de retorno como un puntero para que se imprima otra cadena, lo que provoca un error de segmentación.
Pruébalo en línea!
C, 42 bytes
Gracias a @Ruslan!
Pruébalo en línea!
Solo por diversión: C (en Linux de 64 bits), 149 bytes
Modificado de este programa Hello World aquí .
Pruébalo en línea!
fuente
The answer must be a whole executable program.
main(i){i=puts("Goodbye Cruel World!")/0;}
quita un byte.i
.puts("")/0;
es una declaración sintácticamente correcta.SOGL ,
152517 bytes / 2 = 8.5!Explicación:
(Ab) usa el hecho de que SOGL usa STDERR como salida de depuración, por lo que hay mucho texto, junto con la línea
Si canalizaste el STDOUT del boceto Procesando a un archivo, el "¡Adiós mundo cruel!" estaría allí.
fuente
Hello World!
y noGoodbye Cruel World!
distinguen entre mayúsculas y minúsculas, pero de lo contrario deberían aparecer exactamente como se indica arriba ", puede jugar golf su código al deshacerse de la función por█
completo y simplemente emitir en minúsculas.> <> , 25 bytes
Básicamente agrega la cadena a la pila (hacia atrás, la última entrada, la primera salida) y luego hace el equivalente de:
Cuando no quedan caracteres en la pila (se ha impreso toda la cadena) al abrir la pila aparece un error
fuente
#o<"Goodbye Cruel World!"
, que es básicamente lo mismo.sed, 32 bytes
i
inserta una línea yw
escribe en un archivo./dev/full
en este caso porque todas las escrituras regresanENOSPC
("No queda espacio en el dispositivo").Sin embargo, todavía necesita una sola línea de entrada para funcionar.
fuente
Lua,
31, 30 bytesprimero imprime '¡Adiós mundo cruel!' y luego se bloquea al intentar agregar un valor nulo y 0.
Salida:
Crédito a GalladeGuy por 1 byte menos
fuente
a=-print"Goodbye Cruel World!"
Python 3 | Puntuación:
24.5!2322!Imprima "Hello World", que utilice el operador no válido '+' en "Goodbye Cruel World!" al elemento de retorno NoneType. (recortar \ n \ r de la versión anterior)
Pruébalo en línea!
Python 3 | Puntuación:
3430Print Goodbye, que hacer una operación unaria + no válida en el resultado de impresión (NoneType)
Pruébalo en línea!
fuente
+"Goodbye Cruel World!"
es más corto en 3 bytes y genera un TypeError.print("Goodbye Cruel World!")/0
es más corto para el segundo (¿3 bytes?)R,
2220! bytes(44/2)(40/2)Pruébalo en línea!
Salida:
Ahorró dos puntos gracias a digEmAll
fuente
40/2
probarlo en línea!¡AWK , 72 bytes, puntaje 36!
Pruébalo en línea!
AWK
no le gusta tratar de dividir por 0.fuente
CJam , 34 bytes, puntaje 17!
Pruébalo en línea! (Ver panel de depuración para STDERR)
Explicación
En TIO, genera este mensaje de error:
fuente
Preprocesador C, 27 bytes
Salida:
fuente
#Goodbye Cruel World!
APL (Dyalog) , 17.5 bytes
Sin bono, 20 bytes
Pruébalo en línea!
Tenga en cuenta que el código no está entre comillas, por lo que APL intenta ejecutarlo pero
World
no está definido, lo que provoca un bloqueo de VALOR ERROR con la línea de código ofensiva incluida en el mensaje de error.Con bonificación, 35 ÷ 2 = 17.5 bytes
Pruébalo en línea!
Primero imprime la cadena requerida, luego se bloquea como el programa anterior.
Versión de bonificación más sofisticada, 35 ÷ 2 = 17.5 bytes
Pruébalo en línea!
Imprime la primera cadena, luego suelta los primeros cinco caracteres de ese (
5↓
), luego concatena ese (,
) a un nuevo prefijo, y luego intenta ejecutar (⍎
) eso, causando el mismo error que el anterior.fuente
Bash
20.5!18.5!No voy a golpear a gelatina, pero soy un poco tímido de mi golpe al descifrar un script de golpe rápido. 18.5 no es tan malo para un lenguaje que no sea de golf. (Tenga en cuenta que esto tiene que ser un script, bash interactivo intentará interpretarlo
!
como una búsqueda de historial)Devuelve con el código de error 127 y:
Según lo solicitado no
"
's ... en cualquier lugar:)
. Como lo sugeríapricot boy
, ahora busco el último argumento del comando anterior para guardar 4 bytes.fuente
W=\ World\!;echo Hello$W;"Goodbye Cruel$W"
Goodbye\ Cruel\ !$
, no al 100%, pero bastante seguro de que!$
es "la última palabra del último comando"TeX, 19!
Para forzar a TeX a producir un archivo dvi / pdf sin intervención manual, compile con
-interaction=nonstopmode
.Imprime
Hello World!
, arroja un error para usar#
cuando no se supone que debe hacerlo y luego detiene la compilación\bye
. Sin embargo, todo\bye
lo que sigue se muestra en el mensaje de error, por lo que se aplica para la bonificación.fuente
WinDBG (depuración del kernel local de Windows XP / Vista), 33 bytes
Advertencia: Esto bloqueará toda la máquina, no solo el programa.
La depuración local del kernel solo está permitida en Windows XP y Vista (pero no está habilitada de forma predeterminada en Vista). El cuadro de diálogo WinDBG sobre la depuración del kernel local no menciona ningún otro sistema operativo Windows, así que supongo que ni siquiera se puede habilitar para esos. Presumiblemente para otros sistemas operativos Windows, puede conectarlo a una máquina remota para la depuración del kernel, pero es la máquina remota la que fallará, así que no creo que esta solución cuente allí.
fuente
JS (ES5), 46/2 = 23 bytes!
Alertas
Hello, World!
, luego errores conUncaught TypeError: Cannot read property 'Goodbye Cruel World!' of undefined
fuente
PowerShell, 26 bytes
Creo que dividir por 0 es la forma más fácil de arrojar un error.
PowerShell, 35/2 = 17.5 Bytes
por TessellatingHeckler , arroja el error así:
fuente
$w='World!'
(con un!
)?"Hello World!";Goodbye Cruel World!
es de 17.5 bytes, arroja una excepción porque Goodbye no se reconoce como un comando, y el mensaje de excepción incluye la línea completa para que coincida con la expresión regular ..'Goodbye Cruel World!';x
ahorraría dos bytes para 24Lenguaje de script Operation Flashpoint , 45/2 = 22.5 bytes
Llamar con:
Salida:
fuente
Fortran (GFortran) , 58/2 = 29 bytes!
Pruébalo en línea!
fuente
Node.js, Puntuación:
25.524.5!Ahorró 1 punto gracias a ETHproductions
Un programa completo sintácticamente correcto que se bloquea en tiempo de ejecución porque
console.log()
no devuelve una función.Pruébalo en línea!
fuente
25.5
...: ((Gamma(26.5)
, como con la definición de Mathematica.X
(y tal vez incluso la nueva línea)?Aceto , puntuación: 21.5!
Imprime
Hello World!
, luego se bloquea confuente
Pyth,
2824 bytesImprime una cadena, luego intenta obtener el primer elemento de la lista vacía.
¡Prueba esto!
fuente
AHK, 50/2 = 25! (no competidor)
No competir porque un requisito adicional hizo que la respuesta no sea válida. No puedo encontrar una manera de compilarlo, generar el texto y bloquearlo. Lo que sea que intente falla al menos uno de esos requisitos.
Esta es la solución más aburrida que se me ocurre. En realidad no se bloquea, pero técnicamente no es un requisito. Todo lo que tiene que hacer es enviar un mensaje a la ventana de depuración. Lo hace porque le digo que lo haga.
fuente
Japt , 22 bytes
Pruébalo en línea!
Guardado 3 bytes gracias a obarakon y ETHproductions
fuente
Oc"<string>"
y luego reemplazar la cadena actual con la versión comprimida y rodeada por comillas.C #, 116/2 = 58 bytes!
Versión normal para
9487 bytes:Guardado 7 bytes gracias a @KevinCruijssen.
fuente
int n=0;n/=n;
es más corto para tu primera respuesta.int n=1/0;
, pero aparentemente eso no es posible en C # (que en realidad es algo bueno para el lenguaje, pero malo para codegolfing). Por cierto, ¿por qué no está el bono en la parte superior? Ese es más corto.Jalea , 10.5! bytes
Pruébalo en línea!
Esto explota el comportamiento indefinido, utilizando cadenas de Python (cadenas) en lugar de cadenas Jelly (lista de cadenas 1-char). La conversión se realiza mediante la reducción de la cadena Jelly por adición, y Python
+
concatena dos cadenas, por lo que dos cadenas sumadas se concatenan en Python. Luego, usa la mónada (rango) apropiada para que Pythonint
sea llamado en la cadena, lo que resulta en un error que siempre contendráGoodbye Cruel World!
.Explicación:
fuente
Ruby,
4342 bytes / 2 = 21!Se salvó medio byte con la ayuda de Alexis Andersen, reemplazándolo
"String"/0
por-"String"
. ¡Esto solo "funciona" con versiones de Ruby inferiores a la 2.3, en las que el método menos unario en realidad se agregó a la clase String!Con Ruby <2.3:
Con Ruby> = 2.3:
fuente
-
la cadena en lugar de, por/
ejemplo-"Goodbye crueld World!"
Código binario x86-64 (con llamadas al sistema Linux), 43 bytes
Desmontaje
Este programa agrupa los datos que necesita (la cadena
"Goodbye Cruel World!\n"
) en su propio código. Carga un puntero a esa cadena usando elrip
direccionamiento relativo, y llama a la llamada alwrite
sistema directamente en lugar de hacerlo a través de un contenedor glibc, por lo que es completamente independiente de la posición, y podemos probarlo fácilmente incrustando el código en unaconst
cadena y convirtiendo esa cadena en una función puntero. Para bloquear el programa, lo finalizo con unahlt
instrucción, que con privilegios de anillo 0 silenciaría el procesador para siempre (o al menos hasta que llegue la próxima interrupción), pero con privilegios de anillo 3 (típico para programas de usuario) obtenemos mucho menos dramáticaSegmentation Fault
.Programa de prueba:
Salida:
Tenga en cuenta que el código de 43 bytes es un programa completo según lo especificado por el desafío, no solo una función. No depende de la
main
función del programa de prueba para funcionar correctamente; aún imprimirá la cadena y se bloqueará si el cargador la carga y salta directamente a ella.fuente
push
/pop
para cargar registros. Por ejemplo, las dos primeras instrucciones pueden serpush 1
+pop rax
, que es 1 byte más corto. Luego, las siguientes dos instrucciones se pueden reemplazar pormov edi, eax
2 bytes más cortas. El mismopush
/pop
truco se puede aplicar a las instrucciones 6 y 7:push 0x15
+pop rdx
.LOLCODE , PUEDO HAZ 21 BYTES
Simplemente coloca un operador no válido delante de la cadena. Puedes probarlo en línea aquí.
fuente
Pyth , 38/2
= 19 bytes!36/2 = 18 bytes!¡Pruébalo en línea!
Explicaciones
Imprime
Hello World!
, luego intenta evaluarGoodbye Cruel World!
. No lo hace porque esa cadena no es un código válido.El resultado es:
fuente