La tâche est simple. Écrivez un interprète pour la langue * .
Voici un plus gros lien vers le wiki.
Il n'y a que trois programmes * valides:
*
Imprime "Bonjour tout le monde"*
Imprime un nombre aléatoire compris entre 0 et 2 147 483 647*+*
Fonctionne pour toujours.
Le troisième cas doit être une boucle infinie selon les spécifications de cette question
Contribution:
- L'entrée peut être prise via n'importe quelle méthode d'entrée acceptable par nos règles d'E / S standard
- Ce sera toujours l'un des programmes ci-dessus
Production:
- Le premier cas doit imprimer exactement
Hello World
, avec ou sans saut de ligne de fin. - Dans le second cas, si le maximum entier de votre langue est inférieur à 2 147 483 647, utilisez le maximum entier de votre langue
- Les premier et deuxième cas peuvent imprimer sur n'importe quelle sortie acceptable par nos règles d'E / S standard.
- Le troisième cas ne devrait donner aucune sortie.
Notation:
Comme il s'agit de code-golf , la réponse la plus courte, en octets, l'emporte.
code-golf
interpreter
code-golf
array-manipulation
sorting
code-golf
halting-problem
code-golf
javascript
code-golf
algorithm
code-golf
arithmetic
code-golf
math
counting
code-golf
math
code-golf
decision-problem
radiation-hardening
code-golf
conversion
bitwise
code-golf
number
decision-problem
code-golf
string
decision-problem
code-golf
random
game
code-golf
ascii-art
graphical-output
code-golf
decision-problem
binary-tree
tree-traversal
code-challenge
array-manipulation
code-challenge
graphical-output
path-finding
test-battery
algorithm
code-golf
integer
factorial
code-golf
binary-tree
code-golf
grid
graph-theory
code-golf
regular-expression
quine
code-golf
encoding
code-golf
king-of-the-hill
javascript
TheOnlyMrCat
la source
la source
0
et2,147,483,647
», est-ce inclusif ou exclusif? (Par exemple,0
une sortie valide?)-1
de ma part.Réponses:
* , 0 octets
Puisque * n'a aucun moyen de lire l'entrée, les règles par défaut permettent de spécifier que l'entrée doit être donnée en la concaténant sur le programme .
(... Je pense. Il y a une condition "au moins deux fois plus de votes positifs que négatifs" que je n'ai pas de représentant pour vérifier).
la source
R , 69 octets
Essayez-le en ligne!
switch
essaie de faire correspondre les arguments nommés et s'il n'y a pas de correspondance, sélectionne le premier sans nom après le premier, qui dans ce cas est la boucle infinierepeat{}
.la source
Gelée ,
2120 octetsUn lien monadique acceptant une liste de personnages.
Essayez-le en ligne!
vL’...
fonctionne également (voir ci-dessous).Comment?
Alternative
la source
C (gcc) ,
6663 octetsMerci à attinat pour les -3 octets.
Je n'ai qu'à vérifier le deuxième caractère: si le LSB est défini, c'est un
+
(donc le programme est "*+*
") et le programme boucle. Après cela, si c'est unNUL
, le programme était "*
" et nous affichonsHello World
; sinon, il affiche une valeur aléatoire ("*
", la seule autre option qui reste.)Essayez-le en ligne!
la source
f(char*s){*++s&1?f(s-1):printf(*s?"%d":"Hello World",rand());}
rand
n'est pas garanti de retourner une valeur suffisamment grande;RAND_MAX
etINT_MAX
ne sont pas garantis d'être les mêmes (et ne sont pas sur des compilateurs du monde réel, par exemple Visual StudioRAND_MAX
est32767
, tandis queINT_MAX
est [sur les systèmes dérivés x86 modernes] la2147483647
valeur spécifiée dans la question de l'OP).Python 2 ,
103938987 octetsJe combiné ma réponse plus tôt avec Chas Browns réponse et a obtenu quelque chose de quelques octets plus court.
Le nombre aléatoire sera compris entre 0 et 2 ** 31-1 inclus.
Essayez-le en ligne!
Versions précédentes:
103 octets
93 octets
la source
randint(0,2**31-1)
parrandrange(2**31)
.while'*'<i
sauve 2randrange(2**31)
engetrandbits(31)
(ce dernier retournelong
nonint
, maisprint
imprimera lestr
formulaire, pas lerepr
formulaire, donc le dernierL
ne sera pas là).i=input()
ne fonctionne que si les entrées sont citées, si vous saisissez simplement*/ * /*+*
, il mourrait avec unSyntaxError
(carinput
inclut un impliciteeval
); vous devez saisir'*'/' * '/'*+*'
(ou l'équivalent avec des guillemets à la place). Je n'ai rien vu d'évident sur les règles d'E / S standard qui permettraient cela, ce qui pourrait signifier que vous auriez besoin d'utiliserraw_input()
, coûtant quatre octets.input()
prend une chaîne en entrée et l'évalue. Je n'ajoute pas vraiment à l'entrée, je prends simplement une chaîne en entrée et les chaînes ont des guillemets. C'est assez standard, de la même manière que je peux prendre un tableau comme[1,2,3]
au lieu d'une chaîne délimitée que je dois ensuite diviser et analyser. Le but du site n'est pas de rendre l'entrée stricte, c'est de faciliter les E / S afin que nous puissions concentrer le code sur le défi à relever.Keg ,
-lp
,-ir
302625242019 octets-1 octet utilisant des drapeaux
Essayez-le en ligne!
Historique des réponses
Essayez-le en ligne!
Raccourci
Hello World
en chaîne de dictionnaireEssayez-le en ligne!
Je n'ai jamais cessé d'être étonné de la puissance de Keg. Crédits à l'utilisateur EdgyNerd pour un autre octet enregistré.
Versions antérieures
Essayez-le en ligne!
Crédit à l'utilisateur A__ pour l'octet supplémentaire enregistré.
Ancienne version
Essentiellement, prend le programme d'entrée et:
Imprimez ensuite implicitement la pile.
4 octets économisés car le monde bonjour n'a pas besoin de ponctuation.
Essayez-le en ligne! Ancienne version
Essayez-le en ligne! Nouvelle version
la source
Befunge-93 , 54 octets
Essayez-le en ligne!
Annoté:
Le caractère aléatoire n'est pas uniforme. À chaque incrément, il y a 50% de chances d'arrêter l'incrémentation.
la source
Japt , 22/25 octets
La première solution est pour la spécification d'origine qui avait
*<space>
comme deuxième programme et l'autre est pour la spécification mise à jour qui l'a arbitrairement changé en<space>*</space>
, avec merci à EoI pour le "correctif" suggéré.Les deux lancent une erreur de débordement en entrant dans la boucle infinie du troisième programme mais, théoriquement, avec suffisamment de mémoire (que nous pouvons supposer aux fins du code-golf ), fonctionnerait pour toujours.
Essayez le programme 1
Essayez le programme 2
Essayez le programme 3
Essayez le programme 1
Essayez le programme 2
Essayez le programme 3
la source
*<space>
. Je n'ai pas le temps de mettre à jour maintenant.UÌ>S
au lieu du¢
deuxième ternaireJavaScript (ES7), 66 octets
Essayez-le en ligne!(Bonjour le monde)
Essayez-le en ligne!(nombre aléatoire)
Essayez-le en ligne! (boucle infinie)
la source
x=(z=>x())&&x()
fonctionnerait pas pour -1 octet à partir du code de boucle infinie, en supposant un navigateur sans taille maximale de pile d'appels?Gelée ,
2321 octetsEssayez-le en ligne!
Un lien monadique prenant un seul argument et revenant
Hello World
, un entier aléatoire de 31 bits ou bouclant à l'infini selon la spécification.Toutes les options:
*
*
*+*
Explication
la source
Java (JDK) , 83 octets
Essayez-le en ligne!
la source
Python 2 ,
918988 octetsEssayez-le en ligne!
2 octets merci à Jonathan Allan ; 1 octet de thx à ShadowRanger .
la source
while'*'<p
sauve 2getrandbits(31)
enregistre un octet de plusrandrange(2**31)
.PowerShell,
60, 56 octetsJolie Version muet, la technique du golf seulement ici omettre
Get-
dansGet-Random
.UPD. Réduit à 56 octets en supprimant les guillemets, grâce à veskah !
la source
Perl 5
-p
,4339 octetsEssayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 71 octets
Essayez-le en ligne!
la source
Rubis
-n
, 47 octetsEssayez-le en ligne!
la source
Wolfram Language (Mathematica) , 65 octets
Essayez-le en ligne!
la source
Fusain , 30 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Abuse le format d'entrée par défaut de Charcoal qui se divise en espaces s'il n'y a qu'une seule ligne, donc l'entrée de nombre aléatoire ressemble en fait à trois entrées. Explication:
Répétez pendant que la première entrée contient un
*
.Si la première entrée est une
*
seule ...... puis remplacez-le par
Hello World
, provoquant ainsi la fin de la boucle.*+*
n'est pas remplacé, ce qui entraîne une boucle infinie.Si la première entrée n'est pas vide, sortez-la.
Mais s'il est vide, sortez un entier aléatoire dans la plage souhaitée.
la source
Ajouter ++ , 78 octets
Essayez-le en ligne!
Explication
la source
Brachylog ,
2623 octetsEssayez-le en ligne!
Prend le programme sous forme de chaîne dans la variable d'entrée et ignore la variable de sortie. Exploite fortement la garantie que l'entrée n'est que l'un des trois programmes valides: toute entrée de longueur trois se comportera comme
" * "
ou"*+*"
selon que le premier caractère est ou non un espace, et toute autre entrée se comportera comme"*"
.la source
PHP , 51 octets
Essayez-le en ligne! (Bonjour le monde)
Essayez-le en ligne! (Nombre aléatoire)
Essayez-le en ligne! (Boucle infinie)
Prend le deuxième caractère d'entrée qui peut être
''
,'*'
ou'+'
. Dans le cas où'+'
le'*'<'+'
sera vrai et la boucle sera infinie, sinon, après la boucle, "Hello World" ou un nombre aléatoire est affiché. Lerand()
produit automatiquement un nombre entre 0 etgetrandmax()
qui utilise définiRAND_MAX
dans la bibliothèque C standard et par défaut est2147483647
sur la plupart des plates-formes / environnements, y compris TIO.la source
05AB1E , 21 octets
Essayez-le en ligne. (REMARQUE: la construction aléatoire est assez lente avec de grandes listes, donc cela peut prendre un certain temps avant que le résultat ne soit donné.)
Explication:
Voir cette astuce de la mine de 05AB1E (section Comment utiliser le dictionnaire? ) Pour comprendre pourquoi
”Ÿ™‚ï
est"Hello World"
.la source
Pyth , 32 octets
Essayez-le en ligne!
Explication (Python-ish)
la source
hC*4\ÿ
est^2 32
, mais pour que la solution soit correcte, vous devez utiliser à la^2 31
place. En outre, utilisezz
au lieu deJw
, enregistre 1 octet de plus. Et votre explication saute la ligne avect
juste avantlJ
.+
caractère, enregistre 1 octet car vous n'avez pas besoin de le décrémenter.APL (Dyalog Unicode) , 39 octets SBCS
Préfixe anonyme lambda.
Essayez-le en ligne!
{
"dfn";⍵
est l'argument:'+'∊⍵:
si plus est membre de l'argument:∇⍵
queue recurse sur l'argument' '∊⍵
si l'espace est membre de l'argument:?0
flotteur aléatoire (0–1)2E31×
échelle à (0–2³¹)⌊
sol'Hello World'
sinon retourner la chaînela source
Commodore BASIC (VIC-20, C64, TheC64Mini etc.) - 170 tokenize BASIC octets
Je pense que pour le faire plus précisément, je vais devoir me plonger dans le monde étrange du langage d'assemblage 6502, mais ceci est un premier projet.
Premier point, le
INPUT
mot - clé dans Commodore BASIC ignore les espaces blancs, donc la sous-routine à la ligne9
est un moyen rapide et sale d'accepter les entrées du clavier, y compris les espaces.Deuxième point, les entiers Commodore BASIC ont une plage de 16 bits signés, donc -32768 à +32767 source - j'ai donc gardé le nombre aléatoire généré entre 0 et 32767 inclus
la source
Roitelet ,
143135 octetsJe ne suis pas un bon golfeur ... Le RNG génère à chaque fois la même valeur car c'est un générateur de nombres pseudo-aléatoires.
Essayez-le en ligne!
la source
JavaScript, 63 octets, pas de récursivité infinie
mauvais réseau donc pas de lien TIO
la source