Cree el programa ofuscado más corto posible que muestre el texto "Hola mundo".
Para ser considerado un programa ofuscado, debe cumplir al menos dos de los siguientes requisitos:
- No contiene los caracteres:
h
,l
,w
yd
en cualquier caso - No contiene los caracteres:
e
,o
,r
,0
, y1
en cualquier caso - No contiene los caracteres:
2
o7
Entrada:
ninguna
Salida:
Hello World
code-golf
obfuscation
hello-world
restricted-source
Kevin Brown
fuente
fuente
import
en Python no está permitido.72
es"H"
por lo que he elegido esos dosRespuestas:
GolfScript, 17 caracteres
Al probar este envío, guarde el archivo como binario directo, no UTF-8. ¿Tiene problemas para recrear el archivo? Aquí está el hexdump de la misma:
fuente
Perl
Dado que la respuesta obvia usa el desplazamiento de algún tipo, me siento obligado a publicar algo usando Acme :: EyeDrops , sin embargo, con el poder extra, pensé que el mío debería ser un poco más divertido.
Consideración
Desde la versión 5.18 de Perl, el mecanismo que permite que se ejecute este código se ha vuelto tan poderoso que se ha deshabilitado de forma predeterminada para evitar el mal uso. Por lo tanto, en las versiones 5.18+, puede agregar
use re 'eval';
a la parte superior de la secuencia de comandos o, si se nombra la secuencia de comandosworld.pl
, puede ejecutarla comoperl -Mre=eval world.pl
. Es lamentable que se agreguen estos caracteres antiestéticos, pero c'est la vie (Nota: quiero enfatizar que habilitar esta función no es usar alguna biblioteca o complemento, el código que se muestra es un código Perl válido, el mecanismo simplemente ya no está habilitado de forma predeterminada).fuente
(?{ code })
para evaluar el código Perl personalizado mientras coincide con la expresión regular. El código personalizado de Perl imprime el mensaje. Es bueno porque no viola ninguna de las reglas.C # (175 caracteres)
Fue todo un desafío hacer esto en C # porque las restricciones impiden el uso de muchas de las palabras clave comunes. Es posible en C # usar \ uxxxx secuencias de escape Unicode en identificadores, pero desafortunadamente no en palabras clave.
Sospecho que esta solución solo funciona cuando se compila contra .NET 4.0. Ver explicación de por qué.
Explicación
fuente
Uri
lugar deobject
parab
. Puede usar\xHH
en cadenas en lugar de\u00HH
donde no es ambiguo (\x
es de longitud variable). Pensándolo bien, no necesitasb
nada y solo puedes reutilizarloc
como primer argumentoInvoke
. MSDN establece que para los métodos estáticos se ignora el primer argumento. Esto lo reduce a 175 para mí.Invoke
puede ser algo, ni siquiera tiene que serc
, podría ser0
... :)c
(que lamentablemente no funciona ya quenew
requiere une
y.Split('x')
es demasiado largo (salió a 177).GetMethods
. +1BrainFuck, 106 golpes
Cumple con todas las reglas y seguro está ofuscado.
fuente
++++++++++[>++++++>+++<<-]>++++++++++++.---.+++++++..+++.>++.<++++++++.--------.+++.------.--------.
son solo 100 golpes, el mío es mejor que el tuyoJavascript, 2595
Esto solo rompe la regla 2.
fuente
. That's followed by a comment and the expression
[' _ '] `en contexto vacío. Luego, a la variableo
(junto con_
y(゚ー゚)
) se le asigna el valor 3. Continúa en esa línea, haciendo mucho trabajo inofensivo adicional que es efectivamente no operatorio, y usando formas indirectas para hacer el trabajo previsto (llamadaalert("Hello world")
) de una manera no obvia Moda.Befunge-93 - bloque 10x9
Lo siento. :RE
No estaba buscando un tamaño pequeño aquí, estaba tratando de OFUSAR realmente el código al incluir tantas caras sonrientes y ruido como sea posible. :RE
Debería ir con las reglas 2 y 3.
fuente
Golfscript - 17 caracteres
Más fácil de copiar / pegar que Chris '
Básicamente, un cifrado César que cambia por 1 personaje
fuente
e
en ellaPitón
Regla I y III (34 caracteres)
Regla I y III, alternativa (39 caracteres)
Regla II y III (37 caracteres)
Regla I y II (50 caracteres)
Las tres reglas (58 caracteres)
fuente
import codecs
antes de podercodecs.decode
JavaScript, 366 caracteres
Después de ver la solución Perl de Joel Berger, me sentí obligado a hacer algunas bellezas artísticas ASCII yo mismo ... JavaScript, no utiliza caracteres alfanuméricos, y al contrario de la salida de JSFuck, en realidad tiene un tamaño razonable.
fuente
($)
convertido()
(porque agregué$
por simetría).rot13 - 11 caracteres
Uryyb Jbeyq
12/02/2019: esta respuesta se mantiene por razones históricas y ya no es una respuesta válida según las reglas actuales del sitio.
fuente
Bash,
3025 caracteresGracias a Peter Taylor por el uso de herejías.
fuente
tr G-t F-s<<<Ifmmp\ Xpsme
Scala, 39
Soluciones como print ("Qnuux)` x {um "map (_- 9 toChar)) (35 caracteres) no cumplen con las reglas 1 y 2 (" toChar "contiene" h "y" r "), lo que hace que esto sea un un poco duro
Finalmente se me ocurrió esto:
Sugerencias de mejora bienvenida
fuente
TeX, 95 bytes
Rompe la tercera regla.
Ejecute con
tex filename.tex
para obtener una salida de dvi opdftex filename.tex
para obtener un pdf.fuente
> <> , 2 × 20 = 40 caracteres
Viola la Regla II, ya que no puedo mostrar un personaje sin usarlo
o
.fuente
Windows PowerShell, 91
959798Viola solo la Regla II.
Es muy malvado que
char
viole ya dos reglas por sí solo.Y vaya, este era difícil de conseguir.
$OFS
a''
lo que cuando emitan un arreglo en una cadena sin espacios aparecen entre los elementos.char
realidad fue la parte más difícil de todas y pasé alrededor de un día buscando una manera. Obtuve todo el resto trabajando bien, pero una vez que hago cálculos sobre ellos tengoint
s, nochar
s. Ponerlos de vuelta en una cuerda fue un poco difícil.Encontré una forma de invocar
Invoke-Expression
sin necesidad dee
:pero eso aún carecía de argumentos. Y ya he descartado mi objetivo de satisfacer las tres reglas para entonces. Además, no me ayudó particularmente en el casting
char
.Acortado un poco con una nueva versión de PowerShell. Sin embargo, no surgió ninguna forma útil diferente de crear el resultado, lamentablemente.
fuente
PHP (16 bytes)
Me di cuenta de que mi ejemplo anterior de PHP no estaba lo suficientemente ofuscado, así que veamos ejemplos de ofuscación más descarada (¡advertencia, ofuscación!). Además, copia descaradamente el ejemplo de GolfScript, excepto que lo hace más pequeño (¿es posible?). Esta entrada requiere PHP 5.4 o
short_open_tag
habilitado. No se rompió ninguna regla al hacer esto. De hecho, esta entrada no contiene letras ni dígitos ASCII.Este ejemplo no rompe ninguna de las reglas. Que te diviertas. Para generar el archivo, ejecute el siguiente comando.
O, en caso de que no confíe en ejecutar el
printf
comando, he preparado el volcado Base64 del archivo.Si crees que ambos métodos para generarlo rompen las reglas, también he generado un archivo en Dropbox .
Y para ejecutarlo.
El archivo resultante debe tener 16 bytes. Diviértete ejecutándolo. Tenga en cuenta que si tiene
E_NOTICE
habilitadas las advertencias, se mostrará un aviso. Solo ignóralo, arreglarlo desperdiciaríados personajesun personaje (puedo usar el@
operador, después de todo) y haría que el Base64 resultante se vea menos impresionante.fuente
Espacio en blanco (167 caracteres)
Para obtener el programa WS, sustituya un carácter de espacio, tabulación o salto de línea por S, T, L, respectivamente, en la siguiente cadena:
o descargue el programa "en bruto" de espacios en blanco en el archivo de texto hello.ws .
Cuando lo ejecuta este intérprete de WS , este programa imprime "Hello World".
Explicación (¡ignore el espacio en blanco aquí!):
Las cadenas "intermedias" (p
TSSTSSSL
. Ej. ) Son los códigos ascii (en binario, conS
denotando 0,T
denotando 1) para las letras sucesivas en "Hello World". El prefijoSSS
empuja el número que le sigue (terminado por unL
) en la pila.TLSS
genera el carácter cuyo código ascii está en la parte superior de la pila. Finalmente, de acuerdo con este tutorial , un programa debe terminar conLLL
una salida limpia del intérprete.NB: Estoy ingresando esto como una respuesta separada, porque la otra entrada del programa WS es un programa de 1287 caracteres que imprime "¡Hola, mundo de espacios!" en lugar del requerido "Hola Mundo".
fuente
Ruby - 63 caracteres
fuente
puts "Gdkkn~Vnqkc".split("").map(&:succ)*''
- 43C, 160 caracteres
Funciona solo en máquinas little endian con 4 bytes int:
Satisface las tres reglas.
fuente
p[];main(){p={(5*5*5*5*5*64+96696)*(443+5688),(5*3*4*3+4-3)*(66*45*6-6*6-4+3)*83*(3+4),6544494+36868};puts(p);}
- 111 caracteres.x[]={45483*39994-3958,48465*38543-5584,6584695-3333};main(){puts(x);}
- 69 caracteres. Estoy seguro de que podría ahorrarme un poco más si tuviera más tiempo para matematizar los literales un poco más. Fue una forma divertida de pasar un par de horas, de todos modos :)PHP, 28 bytes
No exactamente ofuscado, pero muy corto y obvio :). Mostrando que incluso cuando se limitan los caracteres, puede hacer que los programas sean muy fáciles de seguir. Las restricciones 1 y 3 siguieron. La restricción 2 fue abusada.
Tenga en cuenta que esto requiere
short_open_tag
ser configurado, a menos que esté usando PHP 5.4 o superior. Quizás algunos ejemplos son más cortos, pero creo que este ejemplo es bastante corto.fuente
bash 28 caracteres:
alternativamente con / bin / echo (18 caracteres) *) vea la discusión a continuación.
Autotest:
¡Más duro de lo que piensas! Herramientas, para voltear las palabras al revés, las herramientas piensan que una 'H' u 'o' al revés se muestra mejor como H o o. Esto estaría en conflicto con el grupo 1 (Hlwd: 27: eor01) respectivamente 3.
H se puede mostrar con
pero 01 y 2 también están envenenados. ¡Caramba! Pero el eco bash-buildin no solo tiene la opción de mostrar valores ascii octales, sino también hexadecimales:
Pero si usamos bash como lenguaje de programación, el comando echo es parte del programa, que no solo cuenta para el recuento de caracteres, sino que también contiene los caracteres envenenados (hlwd: 27: eor01) eho de los grupos 1 y 3.
Así que en este momento el eco murió. Afortunadamente, hay printf, que sabe "% b" para mostrar.
La r es el único carácter problemático en printf, y pertenece al grupo 3. Como 'o' está en el último grupo, podríamos dejarlo en Hello y en World, pero podemos usar el omicron ο que parece una o, o °
°
.Enlaces:
fuente
C (94)
En pequeñas máquinas Endian:
Viola la regla II, pero satisface el resto.
fuente
JavaScript: 132 caracteres
Rompe la regla I
Uso :
fuente
1
por!![]+![]
y0
por""-""
que no infringe la regla # 2.!![]+![]
? ¿Por qué no solo4-3
?Dis ,
10283 caracteresDesenrolló el bucle de código ya que las letras se pueden generar con menos de cinco operaciones consecutivas. Se guardaron algunos caracteres al reutilizar el valor del acumulador: dos
l
son consecutivos,SPACE
se pueden generar desdeo
yd
desdel
.Versión antigua
Con comentarios a continuación. Utiliza una secuencia de cinco operaciones idénticas para generar todos los caracteres en
Hello World
: una rotación y cuatro restas.fuente
C: 162 caracteres (excluyendo nuevas líneas innecesarias)
Opté por la legibilidad y la transparencia al escribir esto.
Cumple los tres requisitos.
fuente
7
, violando la regla # 3. Pero sería fácil deshacerse de él7
. Además, al agregar algunosint
sy agregar algunos paréntesis adicionales y agregarint puts(int*);
al principio, se compilagcc -ansi -W -Wall
solo con una sola advertencia: el control llega al final de la función no nula .Bash,
2420 caracteresNecesita tener instalado el paquete "bsdgames".
Gracias gnibbler :)
fuente
PostScript, 41 caracteres
Uso:
$ gs -q -dNOPROMPT -dNODISPLAY filename.ps
fuente
gsnd -q -- filename.ps
JavaScript, 66 caracteres
Otra solución de JavaScript, esta vez rompiendo la regla # 2.
Lo anterior sigue el concepto detrás de la respuesta de hallvabo. Antes de comprender ese enfoque, tenía la versión posiblemente más ofuscada:
que también infringe la regla n. ° 2 y tiene 114 caracteres. (Retire el retorno de carro en esta segunda solución, ya que está allí para facilitar la lectura).
fuente
unescape
.unescape
, y solo jugué durante un año hace más de una década ... ¿Qué me pasa?Haskell, 38
Las restricciones 1 y 3 siguieron.
fuente
Fourier, 39 bytes
Fourier siempre está ofuscado. Esto sigue todas las reglas.
Descompostura:
Esto podría ser refinado un poco.
fuente