Créez le programme le plus court possible qui affiche le texte "Hello World".
Pour être considéré comme un programme obscurci, il doit satisfaire à au moins deux des exigences suivantes:
- Ne contient pas les caractères:
h
,l
,w
etd
dans tous les cas - Ne contient pas les caractères:
e
,o
,r
,0
et1
dans tous les cas - Ne contient pas les caractères:
2
ou7
Entrée:
aucune
Sortie:
Hello World
code-golf
obfuscation
hello-world
restricted-source
Kevin Brown
la source
la source
import
qu'en python n'est pas autorisé.72
est"H"
ce qui explique pourquoi j'ai choisi ces deuxRéponses:
GolfScript, 17 caractères
Lorsque vous testez cette soumission, veuillez enregistrer le fichier en tant que fichier binaire, pas UTF-8. Vous ne parvenez pas à recréer le fichier? Voici l'hexdump de celui-ci:
la source
Perl
Puisque la réponse évidente utilise un décalage quelconque, je me sens obligé de publier quelque chose en utilisant Acme :: EyeDrops , mais avec la puissance supplémentaire que je pensais, la mienne devrait être un peu plus amusante.
Caveat
Depuis Perl version 5.18, le mécanisme permettant à ce code de s'exécuter est devenu si puissant qu'il a été désactivé par défaut pour éviter toute utilisation abusive. Par conséquent, sur les versions 5.18+, vous pouvez ajouter
use re 'eval';
en haut du script ou, si le script est nommé,world.pl
vous pouvez l'exécuter commeperl -Mre=eval world.pl
. Il est regrettable que ces personnages disgracieux doivent être ajoutés, mais c'est la vie. (Remarque: je tiens à souligner que l'activation de cette fonctionnalité n'utilise pas une bibliothèque ou un addon, le code affiché est un code Perl valide, le mécanisme n'est tout simplement plus activé par défaut).la source
(?{ code })
pour évaluer le code Perl personnalisé lors de la correspondance d'expressions rationnelles. Le code Perl personnalisé imprime le message. C'est bien parce que cela n'enfreint aucune des règles.C # (175 caractères)
Cela a été tout un défi de le faire en C #, car les restrictions empêchent toute utilisation d'un grand nombre de mots clés courants. Il est possible en C # d’utiliser des séquences d'échappement Unicode \ uxxxx dans des identifiants, mais malheureusement pas dans des mots-clés.
Je soupçonne que cette solution ne fonctionne que lorsqu'elle est compilée avec .NET 4.0. Voir l'explication pour pourquoi.
Explication
la source
Uri
au lieu deobject
pourb
. Vous pouvez utiliser des\xHH
chaînes au lieu d’\u00HH
être dépourvues d’ambiguïté (\x
longueur variable). À la réflexion, vous n'avez pas besoinb
du tout et vous pouvez simplement le réutiliserc
comme premier argumentInvoke
. MSDN indique que pour les méthodes statiques, le premier argument est ignoré. Cela le ramène à 175 pour moi.Invoke
puisse être quoi que ce soit, il ne devrait même pas l'êtrec
, il pourrait être0
... :)c
(ce qui malheureusement ne fonctionne pas car celanew
nécessite une
et.Split('x')
est trop long (sorti à 177).GetMethods
. +1Brainfuck, 106 coups
Répond à toutes les règles et il est certainement obscurci.
la source
++++++++++[>++++++>+++<<-]>++++++++++++.---.+++++++..+++.>++.<++++++++.--------.+++.------.--------.
seulement 100 coups, le mien est meilleur que le vôtreJavascript, 2595
Cela ne fait que briser la règle 2.
la source
. That's followed by a comment and the expression
['_']` dans un contexte vide. Ensuite, la variableo
(ainsi que_
et(゚ー゚)
) se voit attribuer la valeur 3. Elle continue dans cette veine, effectuant de nombreux travaux inoffensifs qui ne sont en réalité aucune opération, et en utilisant des moyens détournés pour effectuer le travail souhaité (appeleralert("Hello world")
) de manière non évidente. mode.Befunge-93 - bloc 10x9
Pardon. :RÉ
Je ne cherchais pas la petite taille ici, j'essayais de vraiment OBFUSCER le code en incluant le plus de visages souriants et de bruit possibles! :RÉ
Devrait aller avec les règles 2 et 3.
la source
Golfscript - 17 caractères
Plus facile à copier / coller que Chris '
Fondamentalement, un chiffre de César se déplaçant de 1 caractère
la source
e
dedansPython
Règle I & III (34 caractères)
Règle I & III, alternative (39 caractères)
Règle II et III (37 caractères)
Règle I et II (50 caractères)
Les trois règles (58 caractères)
la source
import codecs
avant de pouvoircodecs.decode
JavaScript, 366 caractères
Après avoir vu la solution Perl de Joel Berger, je me suis senti obligé de faire moi-même un peu de joliesse artistique en ASCII ... JavaScript, n'utilise pas de caractères alphanumériques, et contrairement à la sortie JSFuck, il est en fait de taille raisonnable.
la source
($)
transformé()
(parce que j'ai ajouté$
pour la symétrie).rot13 - 11 caractères
Uryyb Jbeyq
2019/2/12: Cette réponse est conservée pour des raisons historiques et n'est plus une réponse valide selon les règles en vigueur sur le site.
la source
Bash,
30 à25 caractèresAvec mes remerciements à Peter Taylor pour l’utilisation de herestring.
la source
tr G-t F-s<<<Ifmmp\ Xpsme
Scala, 39 ans
Des solutions comme print ("Qnuux)` x {um "map (_- 9 toChar)) (35 caractères) enfreignent les règles 1 et 2 (" toChar "contient à la fois" h "et" r "), ce qui en fait un un peu difficile.
Enfin venu avec ceci:
Suggestions d'amélioration bienvenue
la source
TeX, 95 octets
Brise la troisième règle.
Exécuter avec
tex filename.tex
pour obtenir une sortie dvi oupdftex filename.tex
pour obtenir un pdf.la source
> <> , 2 × 20 = 40 caractères
Enfreint la règle II, car je ne peux pas sortir un caractère sans utiliser
o
.la source
Windows PowerShell, 91
959798N'enfreint que la règle II.
C'est très mal qui
char
viole déjà deux règles.Et oui, celui-ci était difficile à faire fonctionner.
$OFS
sur''
donc lors du transtypage d'un tableau en chaîne, aucun espace ne s'affiche entre les éléments.char
était en fait la partie la plus difficile de toutes et j'ai passé une journée à chercher un moyen. J'ai tout le reste travaillé bien mais une fois que je fais des calculs sur eux, j'aiint
s, paschar
s. Remettre ceux-ci dans une ficelle était un peu difficile.J'ai trouvé un moyen d'invoquer
Invoke-Expression
sans avoir besoin due
:mais cela manquait encore d'arguments. Et j'ai déjà jeté mon objectif de satisfaire aux trois règles d'ici là. De plus, ça ne m'a pas particulièrement aidé à faire le casting
char
.Réduit un peu avec une version plus récente de PowerShell. Aucune autre façon utile de créer le résultat n'a émergé, malheureusement.
la source
PHP (16 octets)
J'ai remarqué que mon précédent exemple PHP n'était pas assez obscurci, voyons donc des exemples plus flagrants (avertissement, obscurcissement!). En outre, copiez de manière flagrante l'exemple GolfScript, sauf en le rendant plus petit (est-ce même possible?). Cette entrée nécessite PHP 5.4 ou
short_open_tag
activé. Aucune règle n'a été enfreinte en faisant cela. En fait, cette entrée ne contient aucune lettre ou chiffre ASCII.Cet exemple n'enfreint aucune des règles. S'amuser. Pour générer un fichier, exécutez la commande suivante.
Ou, si vous ne faites pas confiance à la
printf
commande en cours , j'ai préparé le dump du fichier en Base64.Si vous pensez que les deux méthodes pour le générer enfreignent les règles, j'ai également généré un fichier sur Dropbox .
Et pour l'exécuter.
Le fichier résultant doit avoir 16 octets. Amusez-vous en cours d'exécution. S'il vous plaît noter que si vous avez
E_NOTICE
activé les avertissements, cela affichera un avis. Ignorez-le, le réparer vous ferait perdredeux personnagesun caractère (je peux utiliser@
opérateur, après tout) et rendrait le résultat obtenu en Base64 moins impressionnant.la source
Espace blanc (167 caractères)
Pour obtenir le programme WS, remplacez les caractères S, T, L par un caractère d'espace, de tabulation ou de saut de ligne, respectivement, dans la chaîne suivante:
ou téléchargez le programme "brut" ne contenant que des espaces dans le fichier texte hello.ws .
Lorsqu'il est exécuté par cet interpréteur WS , ce programme imprime "Hello World".
Explication (ignorez les espaces ici!):
Les chaînes "intermédiaires" (par exemple
TSSTSSSL
) sont les codes ascii (en binaire,S
0 (T
1)) pour les lettres successives de "Hello World". Le préfixeSSS
pousse le numéro qui le suit (terminé par unL
) sur la pile.TLSS
affiche le caractère dont le code ASCII se trouve en haut de la pile. Enfin, selon ce tutoriel , un programme doit se terminer parLLL
une sortie propre par l'interprète.NB: J'écris ceci séparément, car l'autre entrée du programme WS est un programme de 1287 caractères qui affiche "Bonjour, le monde des espaces!" au lieu du "Hello World" requis.
la source
Ruby - 63 personnages
la source
puts "Gdkkn~Vnqkc".split("").map(&:succ)*''
- 43C, 160 caractères
Fonctionne uniquement sur les machines little-endian de 4 octets int:
Satisfait les trois règles.
la source
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 caractères.x[]={45483*39994-3958,48465*38543-5584,6584695-3333};main(){puts(x);}
- 69 caractères. Je suis sûr que je pourrais en économiser un peu plus si je disposais de plus de temps pour mathématiser davantage les littéraux. C'était une façon amusante de passer quelques heures quand même :)PHP, 28 octets
Pas exactement obscurci, mais très court et évident :). En montrant que même lorsque vous limitez les caractères, vous pouvez très facilement suivre les programmes. Les contraintes 1 et 3 ont suivi. La contrainte 2 a été abusée.
Notez que ceci nécessite d'
short_open_tag
être défini, à moins que vous n'utilisiez PHP 5.4 ou supérieur. Certains exemples sont peut-être plus courts, mais je pense que cet exemple est assez court.la source
bash 28 caractères:
alternativement avec / bin / echo (18 caractères) *), voir la discussion ci-dessous.
Auto-test:
Plus dur que thougth! Outils, pour retourner les mots à l'envers, les outils pensent qu'un «H» ou un «o» renversé est mieux affiché sous la forme H ou o. Cela serait en conflit avec le groupe 1 (Hlwd: 27: eor01) respectivement 3.
H peut être affiché avec
mais 01 et 2 sont également empoisonnés. Gee! Mais l’écho bash-buildin a non seulement la possibilité d’afficher des valeurs ascii octales, mais aussi des valeurs hexadécimales:
Mais si nous utilisons bash comme langage de programmation, la commande echo fait partie du programme, qui compte non seulement dans le nombre de caractères, mais contient également les caractères empoisonnés (hlwd: 27: eor01) issus des groupes 1 et 3.
C'est donc le moment où l'écho est mort. Heureusement, il y a printf, qui sait que "% b" doit être affiché.
Le caractère r est le seul caractère problématique dans printf et appartient au groupe 3. Puisque "o" est dans le dernier groupe, nous pourrions le laisser dans Hello et dans World, mais nous pouvons utiliser l'omicron ο qui ressemble à un o, ou °
°
.Liens:
la source
C (94)
Sur les petites machines Endian:
Enfreint la règle II, mais satisfait le reste.
la source
JavaScript - 132 caractères
Règle des pauses I
Utilisation :
la source
1
par!![]+![]
et0
par""-""
pour ne pas casser la règle n ° 2.!![]+![]
? Pourquoi pas juste4-3
?Dis ,
10283 caractèresDéroulé la boucle de code car les lettres peuvent être générées avec moins de cinq opérations consécutives. Vous avez enregistré quelques caractères en réutilisant la valeur de l'accumulateur: deux
l
sont consécutifs,SPACE
peuvent être générés à partir deo
etd
peuvent être générés à partir del
.Ancienne version
Avec des commentaires ci-dessous. Il utilise une séquence de cinq opérations identiques pour générer tous les caractères dans
Hello World
une rotation et quatre soustractions.la source
C: 162 caractères (excluant les nouvelles lignes inutiles)
J'ai opté pour la lisibilité et la transparence lors de l'écriture.
Il répond aux trois exigences.
la source
7
, enfreignant la règle n ° 3. Mais il serait facile de s'en débarrasser7
. De plus, en ajoutant quelquesint
secondes, en ajoutant quelques parenthèses supplémentaires et en ajoutantint puts(int*);
au début, il compilegcc -ansi -W -Wall
avec un seul avertissement: le contrôle atteint la fin de la fonction non-vide .Bash,
24 à20 caractèresVous devez avoir le paquet "bsdgames" installé.
Merci gnibbler :)
la source
PostScript, 41 caractères
Usage:
$ gs -q -dNOPROMPT -dNODISPLAY filename.ps
la source
gsnd -q -- filename.ps
JavaScript, 66 caractères
Une autre solution JavaScript, enfreignant cette fois la règle n ° 2.
Ce qui précède suit le concept de la réponse de hallvabo. Avant d’accepter cette approche, j’avais la version plus obscure:
qui enfreint également la règle n ° 2 et se situe à 114 caractères. (Supprimez le retour chariot dans cette deuxième solution, car il n’est là que pour la lisibilité.)
la source
unescape
.unescape
et je n'ai joué que pendant un an, il y a plus de dix ans ... Qu'est-ce qui ne va pas avec moi?Haskell, 38 ans
Les contraintes 1 et 3 ont suivi.
la source
Fourier, 39 octets
Fourier est toujours obscurci. Cela suit toutes les règles.
Panne:
Cela pourrait peut-être être affiné un peu.
la source