¡Hola Mundo! sin repetición

27

En cualquier lenguaje de programación que existiera antes de hacer esta pregunta, escriba un programa (no una función) que muestre los caracteres Hello world!seguidos de una nueva línea. Su programa:

  • no debe usar ningún carácter más de una vez (incluido el espacio en blanco)
  • solo debe usar caracteres ASCII
  • no debe usar ninguna biblioteca incorporada
  • no debe recibir información (usuario, archivo, nombre de archivo, variable del sistema, internet, cualquier cosa)
  • no debería generar nada más

El ganador es el que tiene más votos después de 14 días y cumple con las seis reglas.

La sexta regla es que no puede usar H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hello, Hello +, Hello ++, Hexish, CHIQRSX9 + o Fugue. Además, todas las respuestas que requieren implementaciones más recientes que este desafío deben marcarse como no competidoras.


Descargo de responsabilidad: esta pregunta se publicó con la suposición de que ¡Hola, mundo! con una repetición limitada no causó ningún daño a su computadora o su cerebro en el proceso de encontrar las respuestas.

Timtech
fuente
si estamos escapando de los códigos de caracteres, ¿se puede usar el carácter "\" más de una vez?
WallyWest
44
¿Qué hay de piet?
Victor Stafusa
@Victor "solo debe usar caracteres ASCII"
Timtech
3
Ese fue un gran rompecabezas, y disfruté haciéndolo :-).
Konrad Borowski
99
“Solo debe usar caracteres ASCII”, lo que es una restricción draconiana. Eso elimina una clase completa de idiomas que no utilizan ASCII.
Timwi

Respuestas:

33

Perl 6 (29 28 caracteres)

Esto fue algo molesto, pero finalmente logré hacer un programa para esta tarea. Gracias a la gran comunidad # perl6 , por ayudarme con esta tarea. Me tomó dos horas, espero que lo disfruten. El resultado está completamente a la altura de las especificaciones, incluida una nueva línea.

say
Q[@A`DO world!]~|<HeLhg>

Hay cuatro fichas de interés.

  • say

    Esto genera el argumento con una nueva línea al final. La nueva línea después del comando en sí es necesaria como reemplazo de espacio.

  • Q[@A`DO world!]

    Esta es la primera cadena. Q[]es para cadenas sin formato (como r""en Python). Puede tomar cualquier delimitador (o un par de ellos), en este caso []. En este caso, lo uso para citas, no necesito un comportamiento de cadena sin formato.

  • ~|

    Este es el operador stringwise ( ~) bitwise u ( |).

  • <HeLhg>

    <>es una lista literal, que toma una lista de elementos separados por espacios. En este caso, tiene un elemento y, usado como escalar, da una cadena.

Konrad Borowski
fuente
3
¡Asombroso! Necesito seguir aprendiendo. ¡Alguna sintaxis de Perl 6! También estoy de acuerdo con tu comentario, ¡definitivamente fue un problema divertido!
Dom Hastings
44
Woah ... mi mente está impresionada: O +1
Pomo de la puerta
12

Perl 5 con -M5.01029 bytes

say+He.v108
x2,q(O world!)^$"

Pruébalo en línea!

He adquirido muchos conocimientos desde que intenté esto por primera vez. Todavía no es tan breve como las otras respuestas, ¡pero lo mejor que puedo encontrar!

Dom Hastings
fuente
El desafío tiene minúsculas w.
Ørjan Johansen
@ ØrjanJohansen ¡Gracias, lo olvidé!
Dom Hastings
11

Perl 5.10+: 24 caracteres

say+He,YZX^q(567 world!)

Bien, creo que esto es tan corto como se pone en Perl.

Ejecute con perl -M5.010(o simplemente perl -E) para habilitar la función Perl 5.10+ say.

Ilmari Karonen
fuente
Gravemente impresionado! Pasé las edades tratando de conseguir alrededor de los lls ...
Dom Hastings
9

Golfscript 42 33

También podría jugar esto, teniendo en cuenta que tenía que ajustar parte del código y todos los datos en el mismo bloque sin ninguna forma de delimitar los dos. Creo que este es un resultado bastante corto. A diferencia de mi primer envío, el código de bloque ahora es una parte completamente integrada de los datos, por {1lo tanto , no solo comienza el bloque y coloca un archivo 1en la pila, sino que también son los datos los que definen H, y así sucesivamente. La creación de la matriz ahora incluye la cadena de entrada vacía, lo que significa que no tengo que recortar el principio ya que solo hay un carácter entre la cadena vacía y el H, ese carácter se corta cuando tomo cada segundo carácter, y el vacío La cadena finalmente se genera como nada.

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

Demostración en línea: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

Define un bloque de código. Hace una copia del bloque de código y lo convierte en cadena. Utiliza el bloque de código para iterar sobre la cadena. Para cada iteración, el código hará una copia del valor de carácter anterior, xor con el valor de carácter actual y restará 1. La cadena resultante tiene los primeros 6 caracteres eliminados, y cada segundo carácter eliminado. Finalmente se agrega un avance de línea.

"r iFNGDJUHv98oIMgtplbh4m" es solo dos variables no declaradas, no hacen nada, pero están cuidadosamente construidas para producir el resultado deseado.

Demostración en línea: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r

aaaaaaaaaaaa
fuente
6

Vim 7.3, 18 pulsaciones de teclas

:h-cu
9j3wy$<C-^>P<End>r!o

Copia la cadena Hello worldde este archivo de ayuda , que desafortunadamente se ha eliminado en las versiones nunca de Vim.

Alondra
fuente
De acuerdo con esto , las pulsaciones de teclas <Esc>y combinaciones que involucran la tecla Ctrl cuentan como un byte
oktupol
6

Befunge-98 , 34 31 bytes

f"v!dlrow
+c<>a,kb@#*98e':g05-3

Pruébalo en línea!

Utiliza bastantes métodos diferentes para evitar caracteres duplicados.

Primero, usamos literal de cadena de envoltura para evitar usar dos "s. Esto agrega "mundo!" a la pila.

Yendo a la izquierda en la segunda línea, agregamos 9 al extra fpara hacer oel "Hola". Escribimos gel carácter de la celda 5,0 ( l) y luego lo duplicamos. El 'se utiliza para buscar la carta e. Multiplique 9 por 8 para obtener 72, el valor ASCII de H. Luego lo imprimimos todo usando ck,, y volteamos la dirección con >para reutilizar ,para imprimir la nueva línea ( a).

Jo King
fuente
Muy bien, pero este desafío es sin la coma.
Ørjan Johansen
Oh, ja, eso lo hace más fácil ... Gracias @ ØrjanJohansen
Jo King
Tienes dos de +y d.
Ørjan Johansen
@ ØrjanJohansen oops. debería arreglarse ahora
Jo King
3

Elixir , 37 bytes

IO.puts~c(He#{[?n-2,108]}\x6f world!)

Pruébalo en línea!

No puedo garantizar que esto hubiera funcionado en 2014 cuando se publicó este desafío, y Elixir todavía era anterior a la 1.0 (y, por lo tanto, si está formalmente "compitiendo", pero mirando sus notas de lanzamiento, creo que debería ser OKAY). De todos modos, ¡estoy feliz de que finalmente encontré una solución válida para esta tarea usando un lenguaje convencional de propósito general que no sea Perl!

Tutorial

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!
Kirill L.
fuente
0

Stax (no competidor), 8 bytes

`dx/&\p4

Pruébalo en línea!

Solo un literal de cadena comprimido. Afortunadamente, Stax me deja ir sin el backtick de cierre.

Weijun Zhou
fuente