source: Dilbert, 8 septembre 1992
J'espère ajouter une nouvelle tournure au classique "Hello World!" programme.
Coder un programme qui sort Hello World!
sans:
- Littéraux chaîne / caractère
- Numéros (toute base)
- Fonctions prédéfinies qui renvoient "Hello World!"
- RegEx littéraux
À l'exception de "O" † et 0.
† "O" est en majuscule, "o" n'est pas acceptable.
"O"*
signifie qu'elles peuvent avoir un littéral de chaîne avec un nombre quelconque de 0, y compris zéro. Je ne pense pas que c'était l'intention. Précisez s'il vous plaît.Réponses:
Windows PowerShell, beaucoup trop
Oui, en effet, à l'époque, nous devions écrire un "Hello world" en utilisant (presque exclusivement) des zéros ...
Sur une note plus sérieuse:
Windows PowerShell, 25
Pas de chaîne littérale. Il
Hello World!
se trouve que la chaîne in est analysée comme une chaîne, car PowerShell est en mode d’analyse des arguments.la source
C, 327 caractères
Étrangement, il ne perd pas sa beauté après le prétraitement:
la source
BrainFuck, 102
111caractèresRépond à toutes les règles.
Le mérite en revient à Daniel Cristofani .
la source
0 and/or "O" must be used
. C'est un peu méchant pour BrainFuck et Golfscript, mais ils n'ont pas vraiment de difficulté avec ce défi.C, 182 octets
la source
Programme C - 45
(La triche)
Lexicalement, cela n’utilise pas de littéraux de chaîne ni de littéraux de regex. Il tire parti de la fonction de stringification du préprocesseur C.
s(x)
est une macro qui transforme son argument en une chaîne.la source
Haskell - 143 caractères
oy, c'était laineux!
Pas de chiffres, pas d'opérations numériques, variables renommées pour l'amusement.
Certaines expositions pourraient être sympas:
o%y
,,o&y
eto!y
chacun applique la fonctiono
ày
plusieurs fois: 3, 9 et 29 fois respectivement. 29?!?! Oui, 29 ans!r
etw
sont les caractères suivant et précédent, qui, lorsqu'ils sont appliqués à l'aide des fonctions d'ordre supérieur ci-dessus, peuvent être configurés pour obtenir tous les caractères nécessaires'O'
.La séquence de sauts nécessaire est la suivante:
$
, renommé#
en!
Hugs.la source
r=succ
etw=pred
aller à l' encontre de la façon dont étreintes met en œuvre la restriction de monomorphisme. Changerr x=succ x
et lew x=pred x
faire fonctionner (au prix de 4 caractères). Ceux-ci semblent être des problèmes dans Hugs.Unary ,
10 1971137672766964589547169964037018563746793726105983919528073581559828 octetsJe suis surpris que personne ne l'ait encore fait ...
C'est trop long de poster ici, mais c'est 1137672766964589547169964037018563746793726105983919528073581559828 zéros.
Ou, plus facilement, lisez: ~ 10 67 zéros.
Merci à @dzaima pour avoir économisé 10 197 octets
la source
Mathematica 12 caractères
Seuls les symboles, pas de chaînes.
Le ! est un opérateur factoriel, mais comme les symboles Hello et World ne sont pas définis, retourne l’entrée inchangée.
Si on modifie un peu le programme:
Ensuite, il imprime
12
(2 * 3!)la source
assemblage i386 (Linux, syntaxe gcc),
440442435Aujourd'hui, c'est mon jour d'assemblée, et après j'en aurai assez pendant un moment.
Je me suis permis le numéro 128, voir ci-dessous le programme pour discuter de pourquoi.Rien d'extraordinaire: je suis juste en train d'encoder "Hello World!" en tant qu'opodes d'assemblage où cela avait un sens sans constantes numériques et complétait le reste avec de l'arithmétique.(assembler avec
gcc -nostartfiles hello.S -o hello
, éventuellement en-m32
fonction de votre arcade)Pourquoi la tolérance pour 128? J'ai besoin d'appels système pour montrer quoi que ce soit; Les appels système Linux sont sur INT 80h (128 décimales); le seul format d'opérande pour INT est immédiat, il n'est donc pas possible d'y avoir autre chose qu'une constante (du code). Je pourrais (après que je sois sobre) essayer de l'exprimer en fonction d'autres constantes symboliques du code, probablement n , mais cela devient très ennuyeux pour un gain minime. J'ai lu la contrainte sur les chiffres comme un moyen d'empêcher le codage ASCII, et ce n'est certainement pas ce que je fais ici, alors je me sens suffisamment innocent pour le soumettre. (FWIW, j'ai aussi essayé d'auto-modifier le code, mais celui-ci est défectueux)Il ne reste plus 128 maintenant. Le code est pur!mov
avec des macros CPP; éliminé les 128 restants.la source
Javascript - 305
Un peu long mais j'aime bien la méthode utilisée.
la source
OO
,OOO
mais bien sûr , qui rendraient plus.C # (131 caractères)
141 caractères142 caractèresLisible:
la source
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()
->+""
sauve des cahrsJavaScript, 88
99
Merci à @ Timwi pour les suggestions
opérateur ternaire retiré:
103
alias
String.fromCharCode
117
Basculé si-sinon sur opérateur ternaire
125
Je garde
"O"
juste le droit d'avoir un "O" dans le programme.133
la source
GolfScript, 63 caractères
Quoi, pas encore d'entrée GolfScript?
Celui-ci utilise un seul littéral numérique
0
et une variable nomméeO
(utilisée pour stocker le nombre3
). Tout le reste est arithmétique et manipulation de pile. La chaîneHello World!
est construite à partir de ses codes ASCII, caractère par caractère.Voilà comment cela fonctionne:
la source
Brainfuck, 111 octets
Algorithme expliqué
Version plus longue sans boucle, 389 octets:
la source
Lua
1449786 caractèresUne approche différente, basée sur le fait que les clés de table sont également des chaînes et sur le fait que #Hello == #World == 32 == string.byte '\ n'
Solution de 145 caractères
Est-ce que l'encodage delta des octets, puis quelques primers, etc etc :)
Version golfée:
Commenté:
Edit: Modifié plusieurs chaînes en O et trouvé quelques optimisations supplémentaires.
la source
Python (
126130)la source
''
n'est pas autorisé.[:0]
.J, 250
Je me suis beaucoup trop amusé avec celui-ci et j’ai appris un peu plus J à démarrer. Aussi,
ooo ooo ooo
peut-être le code le plus stupide que j'ai jamais écrit.la source
QR avec demi-blocs
(169)121 caractèresAvec QR-Code en utilisant les caractères de demi-blocs UTF-8:
Malheureusement, cela ne rendra pas bien ici. Il y a un petit extrait avec la feuille de style appropriée, mais .. Non! Le langage présenté ici n'est pas HTML! La langue présentée ici est le code QR ! (HTML et CSS sont utilisés ici uniquement pour contourner un bogue de présentation!)
Afficher l'extrait de code
QR avec demi-blocs (169)
Idéalement, cela pourrait ressembler à:
la source
zbar
sous linux. (exemple:xwd | xwdtopnm | zbarimg /dev/stdin
)Code golf!
personnage n'est-il pas littéral?postscript
,svg
ou d'autres langues de présentation déjà utilisées là-bas!? Une façon d'encoder est une langue quand même ... je pense!Scala (
357423361 caractères)Malheureusement, ce n’est pas la réponse la plus courte, mais nous espérons obtenir des points en prime pour la plupart des utilisateurs
'O'
.'0'
Précédemment:
Ancienne version (illégale):
la source
""
) et les chaînes / caractères contenant le caractère zéro ('0'
) ne sont pas autorisés. Seuls la chaîne"O"
(majuscule O) et le nombre0
sont.C (ou C ++) (segment du corps: 49) (tricherie)
lors de la compilation, compilez en un binaire appelé
Hello\ World\!
, le code est le suivant:Le
strrchr
segment est requis pour supprimer le chemin complet dans le cas où le nom du programme transmis contient le chemin complet, aucun argument ne doit être passé .La ligne de compilation typique pourrait être:
gcc -o Hello\ World\! foo.c
la source
Java 389 caractères
repéré une déclaration inutile
L'historique est dans l'historique des modifications, maintenant la version originale non lue lisible:
la source
C ++, 141,
146La première fois que l’on essaie l’un d’eux, on peut probablement encore s’y améliorer un peu:
MODIFIER:
J'ai volé le piège d'un autre billet, je ne peux pas croire que je n'y ai pas pensé :(
la source
std::
, etc.Haskell - 146
J'ai pensé que l'appariement de motifs donnerait un avantage considérable à Haskell, en particulier parce que vous pouvez initialiser des puissances de deux comme ceci:
Cependant, comme on le voit dans Haskell de MtnViewMark réponse (qui mérite beaucoup beaucoup upvotes, en passant) et d' autres réponses, une meilleure compression peut être obtenue en utilisant plus que juste
+
et-
.la source
Clojure - 46 caractères
Notez que
Hello
etWorld!
sont des symboles, pas des littéraux de toutes sortes.la source
C ++
la source
100
viole la règle sur les nombres. S'il vous plaît remplacez-le par quelque chose de plus amusant.Line 7: error: ISO C++ forbids declaration of 'main' with no type
int
g ++PHP - 49 caractères
Changelog :
la source
<?$a=-~-~-~0;echo Hello.chr($a.$a-1).World.chr($a.$a);
ça marche, mais c'est 54 caractères.1
dedans. Là je vais enfreindre mes propres règles ...<?$a=-~-~-~0;echo Hello,chr($a.~-$a),World,chr($a.$a);
est ce que j'aurais dû utiliser, toujours 54 caractères.Python, 106
la source
Perl, 186 octets
Chaque caractère est imprimé via son nombre ordinal, qui est la longueur d'un tableau. La construction des tableaux est optimisée via la représentation binaire des numéros de caractères.
Ungolfed:
la source
Perl 6 , 199 octets
(les nouvelles lignes sont ajoutées pour réduire la largeur, mais sont inutiles et ne sont donc pas comptabilisées)
Hello World!
est codé comme une liste de listes des puissances de 2 de chaque lettre.Il y a exactement un endroit où j'ai un littéral
0
qui est utilisé pour autre chose qu'un0
. Il est utilisé pour créer une liste à un élément, qui est immédiatement transformée en nombre1
avec l'opérateur de préfixe numérique (+[0]
).la source
JavaScript 662 caractères
Qu'en est-il d'abuser des littéraux de tableau juste pour avoir une base unaire. Ce programme a l'avantage de ne pas utiliser
0
.la source
0
. Qu'en est- ilO_O=0;
?O_O=[].length
peut être écrit commeO_O=false
ce qui le diminue de 4.