fuente: Dilbert, 8 de septiembre de 1992
Espero agregar un nuevo giro al clásico "¡Hola Mundo!" programa.
Codifique un programa que salga Hello World!
sin:
- Cadena / literales de caracteres
- Números (cualquier base)
- Funciones preconstruidas que devuelven "Hello World!"
- RegEx literales
Con las excepciones de "O" † y 0.
† "O" está en mayúscula, "o" no es aceptable.
code-golf
hello-world
restricted-source
zzzzBov
fuente
fuente
"O"*
significa que pueden tener un literal de cadena con cualquier número de O, incluido cero. No creo que esa fuera la intención. Por favor aclararRespuestas:
Windows PowerShell, demasiado
Sí, de hecho, antes teníamos que escribir un »Hola mundo« usando ceros (casi exclusivamente) ...
En una nota más seria:
Windows PowerShell, 25
Sin cadena literal. El
Hello World!
allí sólo pasa a ser analizada como una cadena desde PowerShell está en el modo de análisis argumento allí.fuente
C, 327 caracteres
Curiosamente, no pierde su belleza después del preprocesamiento:
fuente
BrainFuck, 102
111caracteresCumple con todas las reglas.
El crédito va para Daniel Cristofani .
fuente
0 and/or "O" must be used
. Es un poco malo para BrainFuck y golfscript, pero no tienen exactamente dificultades con este desafío.C, 182 bytes
fuente
Programa C - 45
(engañando)
Léxicamente, esto no usa ningún literal de cadena o literal de expresiones regulares. Aprovecha la función de stringificación del preprocesador C.
s(x)
es una macro que convierte su argumento en una cadena.fuente
Haskell - 143 caracteres
oy, eso fue lanudo!
Sin números, sin operaciones numéricas, variables renombradas para diversión.
Alguna exposición puede ser buena:
o%y
,,o&y
yo!y
cada uno aplica la funcióno
ay
múltiples veces: 3, 9 y 29 veces respectivamente. 29?!?! Si, 29!r
yw
son los caracteres siguientes y anteriores, que cuando se aplican utilizando las funciones de orden superior anteriores se pueden hacer para obtener todos los caracteres necesarios'O'
.La secuencia de saltos necesarios es:
$
, rebautizado#
a!
para los abrazos.fuente
r=succ
y enw=pred
conflicto con la forma en que Hugs implementa la restricción de monomorfismo. Cambiar x=succ x
yw x=pred x
hace que funcione (a costa de 4 caracteres). Estos parecen ser problemas en los abrazos.Unario ,
10 1971137672766964589547169964037018563746793726105983919528073581559828 bytesMe sorprende que nadie haya hecho esto todavía ...
Es demasiado largo para publicar aquí, pero son 1137672766964589547169964037018563746793726105983919528073581559828 ceros.
O, lea más fácilmente: ~ 10 67 ceros.
Gracias a @dzaima por guardar 10 197 bytes
fuente
Mathematica 12 caracteres
Solo símbolos, sin cadenas.
Los ! es un operador factorial, pero como los símbolos Hello y World no están definidos, devuelve la entrada sin cambios.
Si modificamos un poco el programa:
Luego imprime
12
(2 * 3!)fuente
Ensamblado i386 (Linux, sintaxis gcc),
440442435Hoy es mi día de asamblea, y después de eso tendré suficiente por un tiempo.
Me permití el número 128, ver el programa a continuación para discutir por qué.Nada extraordinario: solo estoy codificando "¡Hola Mundo!" como códigos de operación de ensamblaje donde eso tenía sentido sin constantes numéricas, y completaba el resto con aritmética.(ensamblar
gcc -nostartfiles hello.S -o hello
, posiblemente-m32
según su arco)¿Por qué la tolerancia para 128? Necesito syscalls para mostrar realmente cualquier cosa; Las llamadas del sistema Linux están en INT 80h (128 decimales); El único formato de operando para INT es inmediato, por lo que no es posible tener nada más que una constante (para el código) allí. Yo pude (después de obtener sobrio) intentar expresarlo en función de otras constantes simbólicas en el código, probablemente n , sino que está poniendo muy aburrido para no mucha ganancia. Leí la restricción sobre los números como una forma de evitar la codificación ASCII, y eso definitivamente no es lo que estoy haciendo aquí, así que me siento lo suficientemente inocente como para enviar esto. (FWIW, también probé el código de auto modificación, pero eso falló)Ahora tampoco quedan 128. ¡El código es puro!mov
con macros CPP; eliminó los 128 restantes.fuente
Javascript - 305
Un poco largo pero me gusta el método utilizado.
fuente
OO
,OOO
pero por supuesto que lo harían más tiempo.C # (131 caracteres)
141 caracteres142 caracteresLegible:
fuente
enum X{Hello,World,A,B=A<<A<<A}void Main(){var c=(char)X.B;(X.Hello.ToString()+c+++X.World+c).Dump();}
.ToString()
->+""
ahorra algunos cahrsJavaScript, 88
99
Muchas gracias a @Timwi por las sugerencias.
operador ternario eliminado:
103
alias
String.fromCharCode
117
Conmutado if-else a operador ternario
125
Me estoy quedando
"O"
solo para tener una "O" en el programa.133
fuente
GolfScript, 63 caracteres
¿Qué, todavía no hay entrada de GolfScript?
Este usa un solo literal numérico
0
y una variable llamadaO
(que se usa para almacenar el número3
). Todo lo demás es aritmética y manipulación de pila. La cadenaHello World!
se construye a partir de sus códigos ASCII, carácter por carácter.Así es como funciona:
fuente
Brainfuck, 111 bytes
Algoritmo explicado
Versión más larga sin bucle, 389 bytes:
fuente
Lua
1449786 caracteresUn enfoque diferente, basado en el hecho de que las teclas de la tabla también son cadenas, y el hecho de que #Hello == #World == 32 == string.byte '\ n'
Solución 145 char
Hizo la codificación delta de los bytes, luego algunos números primos, etc., etc. :)
Versión de golf:
Comentado:
Editar: se cambiaron varias cadenas O y se encontraron algunas optimizaciones más.
fuente
Pitón (
126130)fuente
''
no está permitido.[:0]
.J, 250
Me divertí demasiado con este, y aprendí un poco más de J para arrancar. Además,
ooo ooo ooo
puede ser el código más estúpido que he escrito.fuente
QR con medios bloques
(169)121 caracteresCon código QR utilizando caracteres UTF-8 de medio bloque:
Desafortunadamente, esto no se verá bien allí. Hay un pequeño fragmento con la hoja de estilo apropiada, pero ... ¡No! ¡El lenguaje presentado aquí no es HTML! El idioma presentado aquí es el código QR ! (¡HTML y CSS se usan aquí solo para evitar errores de presentación!)
Mostrar fragmento de código
QR con semibloques (169)
Idealmente, esto podría verse así:
fuente
zbar
debajo de Linux. (muestra:xwd | xwdtopnm | zbarimg /dev/stdin
)Code golf!
un personaje literal?postscript
,svg
u otros idiomas de presentación ya utilizados allí? Una forma de codificar es un lenguaje de todos modos ... ¡creo!Scala (
357423361 caracteres)Desafortunadamente, no es la respuesta más corta, pero espero obtener puntos de bonificación por el mayor uso
'O'
y'0'
Previamente:
Versión antigua (ilegal):
fuente
""
) y las cadenas / literales de caracteres que contienen el carácter cero ('0'
) no están permitidos. Solo la cadena"O"
(O mayúscula) y el número0
son.C (o C ++) (segmento del cuerpo: 49) (trampa)
Al compilar, compilar a un binario llamado
Hello\ World\!
, el código es:El
strrchr
segmento es necesario para eliminar la ruta completa en caso de que el nombre del programa pasado contenga la ruta completa, tampoco se deben pasar argumentos .La línea de compilación típica podría ser:
gcc -o Hello\ World\! foo.c
fuente
C ++, 141,
146La primera vez que intente uno de estos, probablemente se pueda mejorar bastante todavía:
EDITAR:
Robé el truco de división de otra publicación, no puedo creer que no haya pensado en eso :(
fuente
std::
, etc., etc.Haskell - 146
Supuse que la coincidencia de patrones le daría a Haskell una gran ventaja, en particular porque puedes inicializar poderes de dos de esta manera:
Sin embargo, como se ve en la respuesta Haskell de MtnViewMark (que, por cierto, merece muchos votos a favor) y otras respuestas, se puede lograr una mejor compresión usando más que solo
+
y-
.fuente
Clojure - 46 caracteres
Tenga en cuenta que
Hello
yWorld!
son símbolos, no literales de ningún tipo.fuente
C ++
fuente
100
viola la regla sobre los números. Reemplácelo con algo más divertido.Line 7: error: ISO C++ forbids declaration of 'main' with no type
int
g ++PHP - 49 caracteres
Registro de cambios :
fuente
<?$a=-~-~-~0;echo Hello.chr($a.$a-1).World.chr($a.$a);
funciona, pero son 54 caracteres.1
allí. Ahí voy rompiendo mis propias reglas ...<?$a=-~-~-~0;echo Hello,chr($a.~-$a),World,chr($a.$a);
es lo que debería haber usado, todavía 54 caracteres.Python, 106
fuente
Perl, 186 bytes
Cada personaje se imprime a través de su número ordinal, que es la longitud de una matriz. La construcción de las matrices se optimiza mediante la representación binaria de los números de caracteres.
Sin golf:
fuente
Java 389 caracteres
vio una declaración innecesaria
La historia está en el historial de edición ahora, la versión original sin golfing legible:
fuente
Perl 6 , 199 bytes
(se agregan nuevas líneas para reducir el ancho, pero son innecesarias, por lo que no se cuentan)
Hello World!
está codificado como una lista de listas de las potencias de 2 de cada letra.Hay exactamente un lugar donde tengo un literal
0
que se usa para cualquier cosa que no sea a0
. Se utiliza para crear una lista de un elemento, que se convierte inmediatamente en el número1
con el operador de prefijo numérico (+[0]
).fuente
JavaScript 662 caracteres
¿Qué pasa con el abuso de los literales de matriz solo para tener una base unaria? Este programa tiene la ventaja de no usar
0
.fuente
0
. ¿Qué hay deO_O=0;
?O_O=[].length
se puede escribir comoO_O=false
que lo disminuye en 4.