Le but de ce code golf est de créer un interpréteur pour le langage de programmation HQ9 +
Il y a 4 commandes dans ce langage de programmation:
- H - imprime "Bonjour tout le monde!"
- Q - imprime le code source du programme
- 9 - imprime les paroles de la chanson "99 bouteilles de bière"
- + - incrémente l'accumulateur
Les règles:
- Parce que l'accumulateur n'est pas défini, vous pouvez ignorer la commande +
- Votre programme doit demander une entrée (cette entrée sera le code source) ou le code source est lu à partir d'un fichier
- Vous n'êtes pas autorisé à mettre les paroles de "99 bouteilles de bière" dans un fichier et à lire le texte du fichier
- Vous n'êtes pas autorisé à utiliser un algorithme de compression tel que GZip ou BZip pour compresser le texte du morceau: vous devez créer votre propre algorithme de compression. Cela ne doit pas être un algorithme complexe, mais essayez de compresser le texte autant que possible (rappelez-vous: c'est un code-golf, le code avec le moins d'octets gagne)
- Si le code source contient un caractère qui n'est pas H , Q , 9 ou + , alors affichez "Le code source contient des caractères invalides" avant d'exécuter des commandes! Cela signifie que, si le code source est
H1
par exemple, ne sortez pasHello, world!
avant de sortirSource code contains invalid characters
. Non, sortie immédiateSource code contains invalid characters
- Si votre interprète accepte à la fois les majuscules et les minuscules, alors vous obtenez -8 à votre nombre de caractères
Bonne chance!
code-golf
interpreter
hq9+
ProgramFOX
la source
la source
Réponses:
APL (Dyalog) (326 - 8 = 318)
Collez-le dans une fenêtre de l'éditeur et appelez
H
. L'entrée provient du clavier.la source
Mathematica,
349 346341 caractèresla source
If[StringMatchQ[3, "a"], x, y]
C,
599587487481467 caractèresJe suis sûr que cela peut être battu. J'utilise C après tout. Il y a une raison pour laquelle vous ne voyez pas beaucoup d'entrées de golf gagnantes écrites en C. C'est maintenant 467 caractères grâce à l'abus criminel de
#define
.Spécifiez le fichier source HQ9 + comme argument de ligne de commande.EDIT: accepte maintenant la source de stdin, pas un fichier. Démarrez le programme, commencez à taper le code,CTRL - une Cfois terminé pour l'exécuter.
Il compile au moins dans MinGW / GCC avec:
gcc -o hq9+.exe hq9+.c
Devrait fonctionner dans MSVC, mais je n'avais pas envie de créer une solution complète juste pour cela. :)
Ou:
la source
C
et quelques avantR;
. Pourrait également raser 8 caractères avecp[s++]=0;
après la boucle d'entrée pour simplifier l'impressionp
.Python
2-452453443 octetsBleh. Il était déjà bloqué, mais j'ai découvert un bogue qui me coûtait un octet à corriger. Bleh.
(J'avais l'habitude de ne pas inclure
+
dans la sortie pourQ
. Une entrée deQ+++
donnait la sortieQ
, par exemple.)Enregistré certains caractères en ne quittant pas sur une entrée invalide comme je le pensais.
Version expliquée à venir.J'ai abandonné. Je comprends à peine comment fonctionne cette monstruosité. S'il y a une demande, je recommence, mais jusque-là, cela ne se produit pas.la source
exit
sur le caractère invalide, affichez simplement le message, vous pouvez donc y enregistrer 7 caractères.99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *99* bottles of beer on the wall.
Il est censé dire:99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *98* bottles of beer on the wall.
+
. Vous êtes censé ignorer+
, ne pas donner d'erreurHQHH
il devrait direHello World!HQHHHelloWorld!Hello World!
Perl, 325 - 8 = 317
Étendu:
la source
Rubis,
364360- 8 = 352Il y a encore beaucoup de place pour l'amélioration. 99 bouteilles code volé d' ici .
la source
No more bottles of beer on the wall
après la1 bottle
section. alors c'estGo to the store...
1 bottle of beer on the wall, 1 bottle of beer on the wall, take one down, pass it around, no more bottles of beer on the wall. No more bottles of beer on the wall, no more bottles of beer, go to the store, buy some more, 99 bottles of beer on the wall.
Haskell, 298
c'est assez simple.
%
renvoie la sortie d'une commande (étant donné le code source à utiliser surQ
).d
renvoie la chanson de 99 bouteilles avec une ligne indésirable au début pour des raisons de golf. tout est enveloppé dans une interaction (vous voudrez peut-être utiliser à lag
place dumain
test)la source
<interactive>:8:5: parse error on input ‘=’
.let
pour insérer des définitions (cela casse lors de l'insertion de plusieurs définitions non séparées par;
), soit exécuter le code à partir d'un fichier.main
, il indique que le code source contient des caractères non valides lorsque j'essaie de l'exécuterH
. Lorsque j'essaie d'exécuterg
au lieu demain
, cela donne immédiatement une erreur.main
ne fonctionne pas car la nouvelle ligne ajoutée n'est pas une commande légale. C'est pourquoi j'ai recommandé d'utiliser à lag
place. Quant àg
, neputStrLn $ g "H"
fonctionne pas correctement?J - 444 octets
J'ai aimé le numéro, alors j'ai arrêté de jouer au golf. Voilà, fonction d'expression unique!
Exemples:
la source
Fortran 528
470481Il faut compiler avec le-fpp
drapeau (+3 pour marquer) 1 pour utiliser les directives de prétraitement (ce qui enregistre bien plus de 3 caractères, donc je suis tout à fait d'accord avec ça). Il est également insensible à la casse, il y a donc -8: D. 5 caractères enregistrés en ne prétraitant pas leendif
car il est utilisé une fois de toute façon .Nécessite que le fichier ait une
.F90
extension (il est logique de l'appelerhq9+.F90
) pour que le compilateur force le prétraitement. Le code est sensible à la casse; le rendre insensible à la casse ajoute quelque chose comme 16 caractères, donc cela ne vaut pas vraiment la peine d'enregistrer 8 caractères. Ma réponse précédente ne tenait pas compte des changements de pluriels dansbottles
pour9
; cette version le corrige (et ajoute malheureusement beaucoup plus de caractères).Ressemble beaucoup mieux non golfé et non prétraité (probablement parce que vous pouvez voir ce qui se passe):
la source
.cc
pour éviter d'avoir besoin de l'-lstdc++
indicateur.Python 2, 340 - 8 = 332
la source
Lua 443 - 8 = 435
464 - 8 = 456J'ai réussi à enregistrer 21 caractères en utilisant plusieurs
if-end
s au lieu deif-elseif-end
. J'ai également eu quelques espaces blancs supplémentaires flottant après quelques-uns)
.Je suis assez satisfait de celui-ci, même s'il n'est pas beaucoup plus court que ma réponse Fortran . Le code des 99 bouteilles de bière a été modifié à partir de cette réponse par Alessandro . Non golfé, nous avons
la source
if s in'Hh'
in
est pour les itérateurs for-loop et non pour les comparaisons; vous obtiendrez une erreur si vous collez cela dedans. Il y a trois choix ici: (1) utilisermatch
à chaque ligne, (2) utilisateurs=='h'or s=='H'
à chaque ligne, (3) le faire comme je l'ai fait. Il est clair que (3) est plus court que (1) et (2).Julia, 362
la source
Tcl, 515
Juste un peu de golf, toujours plus petit que C et les 99 bouteilles de bière finales.
la source
regexp
. Vous pouvez obtenir mon golf de 99 bières sur codegolf.stackexchange.com/a/109818/29325JavaScript (ES6), 385
N'a pas opté pour la casse, aurait coûté trop de caractères. Pas même proche de certaines des autres entrées, mais c'était quand même amusant!
JavaScript, 344
J'ai fait une version avec une version moins complète de la chanson:
mais après avoir vu les autres entrées (et vu les paroles réelles, qui savait!), j'ai pensé que c'était un peu flic!
la source
Go to the store, buy some more, *99* bottles of beer on the wall
, pas*No more* bottles of beer on the wall
Q
ça ne marche pas pour moi.Q
devait le faire à l'époque et j'ai fourni le code source de la fonction au lieu de l'entrée ... C'était à l'origine ma raison de le faire dans JS, cette partie serait facile, mais je sais maintenant que ce n'est pas du tout nécessaire!C, 562 octets
En tant que programme complet. Le premier argument est le programme HQ9 +. Avec un véritable accumulateur. Je me suis efforcé de ne pas utiliser de déclarations de définition.
Version non-golfée:
la source
Java, 546 octets
Ceci est ma première soumission de code golf. Je suis sûr que nous pourrions en faire plus. Il lit l'entrée comme argument de ligne de commande. Code de bière «emprunté» à la réponse Java «99 bouteilles de bière» (Creative Commons)
Faites-moi savoir si les arguments de la ligne de commande ne sont pas acceptables. C'était très amusant!
la source
Excel VBA, 489 octets
Indenté:
(en retrait pour la lisibilité)
Renommer l' appel Module1 en M par défaut
avec
h "+++++++++Your Code"
Cela fonctionnera également sur d'autres applications bureautiques, en remplaçant ActiveWorkbook par le type de document approprié
la source
For n=1 To
enFor n=1To
(en supprimant les espaces avantTo
) et 4 octets en convertissant toutes les instances deDebug.? 2;
enDebug.?2;
(supprimer les espaces après le?
mot clé)