Die Aufgabe ist einfach. Schreiben Sie einen Dolmetscher für die Sprache * .
Hier ist ein größerer Link zum Wiki.
Es gibt nur drei gültige * Programme:
*
Druckt "Hallo Welt"*
Druckt eine Zufallszahl zwischen 0 und 2.147.483.647*+*
Läuft für immer.
Der dritte Fall muss eine Endlosschleife gemäß den Angaben in dieser Frage sein
Eingang:
- Die Eingabe kann nach unseren Standard-E / A-Regeln über jede akzeptable Eingabemethode erfolgen
- Es wird immer eines der oben genannten Programme sein
Ausgabe:
- Der erste Fall sollte exakt
Hello World
mit oder ohne Zeilenumbruch gedruckt werden . - Wenn im zweiten Fall das ganzzahlige Maximum Ihrer Sprache kleiner als 2.147.483.647 ist, verwenden Sie das ganzzahlige Maximum Ihrer Sprache
- Der erste und der zweite Fall können nach unseren Standard-E / A-Regeln mit jeder akzeptablen Ausgabe gedruckt werden.
- Der dritte Fall sollte keine Ausgabe geben.
Wertung:
Da es sich um Code-Golf , die kürzeste Antwort, in Bytes, gewinnt.
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
quelle
quelle
0
und sagen2,147,483,647
, ist das inklusive oder exklusiv? (ZB ist0
eine gültige Ausgabe?)-1
durch mich.Antworten:
* , 0 Bytes
Da * keine Möglichkeit zum Lesen von Eingaben bietet, können Sie nach den Standardregeln festlegen, dass die Eingabe durch Verketten mit dem Programm erfolgen muss .
(... denke ich. Es gibt eine Bedingung, dass ich nicht den Repräsentanten habe, um zu überprüfen, dass mindestens doppelt so viele Upvotes wie Downvotes vorliegen.)
quelle
R , 69 Bytes
Probieren Sie es online!
switch
versucht, mit den benannten Argumenten übereinzustimmen, und wählt, wenn keine Übereinstimmung vorliegt, das erste unbenannte Argument nach dem ersten aus, in diesem Fall die Endlosschleiferepeat{}
.quelle
Jelly ,
21 bis20 BytesEin monadischer Link, der eine Liste von Zeichen akzeptiert.
Probieren Sie es online!
vL’...
funktioniert auch (siehe unten).Wie?
Alternative
quelle
C (gcc) ,
6663 BytesDanke an attinat für die -3 Bytes.
Ich muss nur das zweite Zeichen überprüfen: Wenn das LSB gesetzt ist, ist es ein
+
(daher ist das Programm "*+*
") und das Programm wiederholt sich. Wenn es danach ein istNUL
, war das Programm "*
" und wir zeigen anHello World
; Andernfalls wird ein zufälliger Wert angezeigt ("*
", die einzige andere verbleibende Option).Probieren Sie es online!
quelle
f(char*s){*++s&1?f(s-1):printf(*s?"%d":"Hello World",rand());}
rand
wird nicht garantiert, dass ein ausreichend großer Wert zurückgegeben wird.RAND_MAX
undINT_MAX
sind nicht auf die gleiche sein garantiert (und nicht auf realen Welt Compiler, zB Visual StudioRAND_MAX
ist32767
, währendINT_MAX
ist [auf modernen x86 - basierten Systemen] der2147483647
Wert in der OP Frage angegeben).Python 2 ,
103938987 BytesIch kombinierte meine frühere Antwort mit Chas Browns die Antwort und bekam etwas ein paar Bytes kürzer.
Die Zufallszahl liegt zwischen 0 und 2 ** 31-1 einschließlich.
Probieren Sie es online!
Vorherige Versionen:
103 Bytes
93 Bytes
quelle
randint(0,2**31-1)
mitrandrange(2**31)
.while'*'<i
speichert 2randrange(2**31)
aufgetrandbits(31)
(letztere zurückkehrtlong
, nichtint
, sondernprint
wird diestr
Druckform, nicht dierepr
Form, so dass die hinterenL
nicht da sein wird).i=input()
Funktioniert nur, wenn die Eingaben in Anführungszeichen gesetzt sind. Wenn Sie nur plain eingeben*/ * /*+*
, würde dies mit einem sterbenSyntaxError
(weilinput
implizit eingeschlosseneval
). Sie müssten eingeben'*'/' * '/'*+*'
(oder mit doppelten Anführungszeichen). Ich habe in den Standard-E / A-Regeln nichts Offensichtliches gesehen , was dies ermöglichen würde, was bedeuten könnte, dass Sieraw_input()
vier Bytes kosten müssten .input()
nimmt einen String als Eingabe und wertet ihn aus. Ich füge der Eingabe nicht wirklich etwas hinzu, ich nehme lediglich eine Zeichenfolge als Eingabe, und Zeichenfolgen haben Anführungszeichen. Dies ist ziemlich normal, genauso wie ich ein Array wie[1,2,3]
anstelle eines durch Trennzeichen getrennten Strings nehmen kann, den ich dann teilen und analysieren muss. Ziel der Site ist es nicht, Eingaben streng zu machen, sondern die Ein- / Ausgabe zu vereinfachen, damit wir den Code auf die jeweilige Herausforderung konzentrieren können.Keg ,
-lp
,-ir
302625242019 Bytes-1 Byte mit Flags
Probieren Sie es online!
Antwortverlauf
Probieren Sie es online!
Verkürzt
Hello World
auf WörterbuchzeichenfolgeProbieren Sie es online!
Ich war immer wieder erstaunt über die Kraft von Keg. Credits an Benutzer EdgyNerd für ein weiteres Byte gespeichert.
Frühere Versionen
Probieren Sie es online!
Gutschrift an Benutzer A__ für das zusätzlich gespeicherte Byte.
Alte Version
Im Wesentlichen nimmt das Eingabeprogramm und:
Dann drucken Sie implizit den Stapel.
4 Bytes gespart aufgrund der Tatsache, dass Hallo Welt keine Interpunktion benötigt.
Probieren Sie es online! Alte Version
Probieren Sie es online! Neue Version
quelle
Befunge-93 , 54 Bytes
Probieren Sie es online!
Kommentiert:
Die Zufälligkeit ist nicht einheitlich. Bei jedem Inkrement gibt es eine 50% ige Chance, das Inkrementieren zu beenden.
quelle
Japt , 22/25 Bytes
Die erste Lösung ist für die ursprüngliche Spezifikation, die
*<space>
als zweites Programm verwendet wurde, und die andere für die aktualisierte Spezifikation, in die sie willkürlich geändert wurde<space>*</space>
, mit Dank an EoI für die vorgeschlagene "Korrektur".Beide werfen einen Überlauffehler auf, wenn sie in die Endlosschleife des dritten Programms eintreten, aber theoretisch mit genügend Speicher (den wir für die Zwecke des Code-Golfs annehmen können ) würde dies für immer funktionieren.
Versuchen Sie Programm 1
Versuchen Sie Programm 2
Versuchen Sie Programm 3
Versuchen Sie Programm 1
Versuchen Sie Programm 2
Versuchen Sie Programm 3
quelle
*<space>
. Keine Zeit zum Aktualisieren.UÌ>S
anstatt¢
auf dem zweiten TernärJavaScript (ES7), 66 Byte
Probieren Sie es online! (Hallo Welt)
Probieren Sie es online! (Zufallszahl)
Probieren Sie es online! (Endlosschleife)
quelle
x=(z=>x())&&x()
-1 Byte im Endlosschleifencode nicht, wenn ein Browser ohne maximale Aufrufstapelgröße verwendet wird?Jelly ,
2321 BytesProbieren Sie es online!
Ein monadischer Link, der ein einzelnes Argument aufnimmt und zurückkehrt
Hello World
, eine zufällige 31-Bit-Ganzzahl oder eine Endlosschleife gemäß der Spezifikation.Alle Optionen:
*
*
*+*
Erläuterung
quelle
Java (JDK) , 83 Byte
Probieren Sie es online!
quelle
Python 2 ,
918988 BytesProbieren Sie es online!
2 Bytes dank Jonathan Allan ; 1 Byte Danke an ShadowRanger .
quelle
while'*'<p
spart 2getrandbits(31)
Speichert ein Byte überrandrange(2**31)
.PowerShell,
60, 56 ByteZiemlich dumm Version, die einzige Golf - Technik wird hier ausgelassen
Get-
inGet-Random
.UPD. Durch Entfernen von Anführungszeichen auf 56 Byte reduziert , dank veskah !
quelle
Perl 5
-p
,4339 BytesProbieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 71 Byte
Probieren Sie es online!
quelle
Ruby
-n
, 47 BytesProbieren Sie es online!
quelle
Wolfram Language (Mathematica) , 65 Byte
Probieren Sie es online!
quelle
Kohle , 30 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Missbrauch des Standardeingabeformats von Charcoal, das bei nur einer Zeile in Leerzeichen aufgeteilt wird, sodass die Zufallszahleneingabe tatsächlich wie drei Eingaben aussieht. Erläuterung:
Wiederholen, während die erste Eingabe a enthält
*
.Wenn die erste Eingabe nur eine
*
...... dann ersetzen Sie es durch
Hello World
, wodurch die Schleife beendet wird.*+*
wird nicht ersetzt, was zu einer Endlosschleife führt.Wenn der erste Eingang nicht leer ist, geben Sie ihn aus.
Ist es jedoch leer, wird eine zufällige Ganzzahl im gewünschten Bereich ausgegeben.
quelle
Add ++ , 78 Bytes
Probieren Sie es online!
Erläuterung
quelle
Brachylog ,
2623 BytesProbieren Sie es online!
Nimmt das Programm als Zeichenfolge durch die Eingabevariable und ignoriert die Ausgabevariable. Die Garantie, dass die Eingabe immer nur eines der drei gültigen Programme ist, wird in hohem Maße ausgenutzt: Jede Eingabe der Länge drei verhält sich wie entweder
" * "
oder"*+*"
abhängig davon, ob das erste Zeichen ein Leerzeichen ist oder nicht, und jede andere Eingabe verhält sich wie"*"
.quelle
PHP , 51 Bytes
Probieren Sie es online! (Hallo Welt)
Probieren Sie es online! (Zufallszahl)
Probieren Sie es online! (Endlosschleife)
Nimmt zweites Zeichen von Eingabe die sein kann
''
,'*'
oder'+'
. Im Fall eines'+'
der'*'<'+'
wahr ist, und die Schleife wird unendlich sein, sonst, nach der Schleife, „Hallo Welt“ oder eine Zufallszahl gezeigt. Derrand()
gibt automatisch eine Zahl zwischen 0 undgetrandmax()
denRAND_MAX
in der Standard-C-Bibliothek definierten Verwendungszwecken aus und ist standardmäßig2147483647
auf den meisten Plattformen / Umgebungen, einschließlich TIO, verfügbar.quelle
05AB1E , 21 Bytes
Probieren Sie es online aus.(HINWEIS: Die Zufallsgenerierung ist bei großen Listen ziemlich langsam, daher kann es eine Weile dauern, bis das Ergebnis angezeigt wird.)
Erläuterung:
Sehen Sie diese 05AB1E Spitze von mir (Abschnitt Wie das Wörterbuch benutzen? ) Zu verstehen , warum
”Ÿ™‚ï
ist"Hello World"
.quelle
Pyth , 32 Bytes
Probieren Sie es online!
Erklärung (Python-ish)
quelle
hC*4\ÿ
ist^2 32
, aber damit die Lösung korrekt ist, sollten Sie^2 31
stattdessen verwenden. Verwenden Siez
stattdessen auchJw
, um 1 Byte mehr zu sparen. Und Ihre Erklärung überspringt die Zeile mitt
direkt vorlJ
.+
Zeichen enthält . Dadurch wird 1 Byte gespart, da Sie es nicht dekrementieren müssen.APL (Dyalog Unicode) , 39 Byte SBCS
Anonymes Präfix Lambda.
Probieren Sie es online!
{
"dfn";⍵
ist das Argument:'+'∊⍵:
if plus ist Mitglied des Arguments:∇⍵
Schwanz rekursiv auf Argument' '∊⍵
Wenn Space ein Mitglied des Arguments ist:?0
zufälliger float (0–1)2E31×
skaliere auf (0–2³¹)⌊
Fußboden'Hello World'
Andernfalls wird die Zeichenfolge zurückgegebenquelle
Commodore BASIC (VIC-20, C64, TheC64Mini usw.) - 170 tokenize BASIC-Bytes
Ich denke, um das genauer zu machen, muss ich in die seltsame Welt der 6502-Assemblersprache eintauchen, aber dies ist ein erster Entwurf.
Erster Punkt, das
INPUT
Schlüsselwort in Commodore BASIC ignoriert Leerzeichen, also die Unterroutine in Zeile9
eine schnelle und fehlerhafte Möglichkeit darstellt, Tastatureingaben einschließlich Leerzeichen zu akzeptieren.Der zweite Punkt, Commodore BASIC-Ganzzahlen, haben einen Bereich von 16-Bit-Vorzeichen, also -32768 bis +32767 Quelle - also habe ich die generierte Zufallszahl auf 0 - 32767 einschließlich belassen
quelle
Zaunkönig ,
143135 BytesIch bin kein guter Golfer ... Das RNG generiert jedes Mal den gleichen Wert, weil es ein Pseudozufallszahlengenerator ist.
Probieren Sie es online!
quelle
JavaScript, 63 Bytes, nicht unendlich rekursiv
schlechtes Netzwerk, also keine TIO-Verbindung
quelle