Ihre ganz eigene "für" Anweisung
Angenommen, Sie haben die folgenden Eingaben: a, b, c, d
Die Eingabe kann einzeilig erfolgen, wobei jedes Format ("a / b / c / d" oder "a, b, c, d" usw.) verwendet wird.
Sie können auch 4 Eingänge haben.
Sie müssen das folgende Verhalten codieren (hier Pseudocode):
var i = <a>
while (i <b> <c>)
print i
i = i + <d>
print "\n"
Hier sind einige Testfälle:
input : 1,<,10,1
output :
1
2
3
4
5
6
7
8
9
Einer noch :
input : 20,>,10,1
output :
20
21
22
23
24
25
26
27
...
infinite loop / program crashes
a
ist eine ganze Zahl , der Anfangswert voni
.b
Ist ein String oder ein Zeichen , kann es nicht etwas anderes sein, der Komparator, der in der Endbedingung derfor
Schleife verwendet wird.b
kann und muss eine der folgenden Zeichenketten sein:- ">" - "<"
c
ist eine Ganzzahl , die Zahl, die in der Endbedingung derfor
Schleife verwendet wird.d
ist eine Ganzzahl , die bei jeder Schleife zu i hinzugefügt wird.
Das ist Code-Golf, die kürzeste Antwort gewinnt!
print "\n"
, aber ich verwende die Javascript-Warnung für jede Zeile. Wäre das akzeptabel oder müsste ich console.log verwenden, um meine Antwort zu verlängern?alert("23\n24\n25");
würde funktionieren, währendalert("23"); alert("24"); alert(25);
nichtAntworten:
JavaScript (ES6),
444356 BytesDank ETHproductions 1 Byte gespart Edit: Korrigiert
, um die Ausgabeanforderungen zu erfüllen
Prüfung
Code-Snippet anzeigen
quelle
eval
, um ein Byte zu sparen:(a,b,c,d)=>{for(;eval(a+b+c);a+=d)alert(a)}
Javascript (ES6),
474248 BytesWollte die for-Version machen, aber jemand war schneller, also hier ist die rekursive Version.
Du musst
f=
vorher hinzufügen und es so nennenf(b,c,d)(a)
.Vielen Dank an Arnauld für das tolle Golfen.
alert
geändert zuconsole.log
aufgrund der Ausgabespezifikationquelle
Pure Bash, 35
Ich gehe davon aus, dass es in Ordnung ist, nur die Parameter in die Standard-for-Schleife einzufügen:
Probieren Sie es online aus .
quelle
Gelee , 12 Bytes
Probieren Sie es online!
Jelly hat viele Möglichkeiten, Iterationen zu wiederholen, Bereiche zu erstellen usw. Das genaue Spiegeln des C ++ - Verhaltens ist jedoch ziemlich schwierig, da Sonderfälle wie das Inkrement 0 sind und die Schleife vor dem Start endet (da die Ungleichung umgekehrt ist) ) und das Inkrement in die falsche Richtung (was bedeutet, dass die Ausgangsbedingung der Schleife nicht auf natürliche Weise erfüllt werden kann). Als solche ist diese Lösung im Grunde genommen eine direkte Übersetzung von C ++, auch wenn sie dadurch weniger umfangreich ist als ein Jelly-Programm normalerweise. Glücklicherweise hat C ++ ein undefiniertes Verhalten beim Überlauf von Ganzzahlen mit Vorzeichen (wird von der Frage verwendet
int
), was bedeutet, dass ein Programm in diesem Fall alles tun kann und daher nicht versucht werden muss, das Überlaufverhalten nachzuahmen.Erläuterung
Das Programm zum Absturz zu bringen, ist die schnellste Möglichkeit, Jellys implizite Ausgabe zu deaktivieren (andernfalls würde der Endwert des Zählers ausgegeben). es erzeugt eine Reihe von Fehlermeldungen auf stderr, aber wir betrachten dies normalerweise als zulässig.
Im Übrigen wird der Schleifenzähler vor dem Start der Schleife mit dem aktuellen Wert initialisiert. Da die Schleife beim Start des Programms erscheint, ist dies die erste Eingabe.
quelle
t
,Ḋ
um keinen Absturz zu haben. Die Löschung führt zu einer leeren Liste, für die Jellys impliziter Ausdruck nichts ergibt.Python 2 , 50 Bytes
Probieren Sie es online!
quelle
R, 63 Bytes
quelle
Java, 58 Bytes
quelle
i
? Könnten Sie den Initialisierungsteil überspringen und nur verwendena
? Durch die Verwendung des ASCII-Werts '>' (62) wird auch ein Byte gespeichert.b>61
05AB1E ,
2220 BytesProbieren Sie es online!
Erläuterung
quelle
SmileBASIC, 53 Bytes
Erläuterung:
Dies nutzt die Tatsache, dass
X<Y
das gleiche ist wie-X>-Y
quelle
READ
Anweisung verwenden, die 1 Byte spart.Gestapelt , 34 Bytes
Probieren Sie es online! (Testen eingeschlossen.) Dies ist eine Funktion, die erwartet, dass der Stapel wie folgt aussieht:
Beispielsweise:
Erläuterung
quelle
C ++, 80
Hoppla, das ist
C++
nicht soC
. War ein bisschen verwirrt von der Frage.quelle
using namespace std
kostenlos bekommst ).i
bei anfangena
, nicht0
? Sie können einfacha
allesi
zusammen verwenden und überspringen und den ASCII-Wert von '>' verwenden.for(;b==62?a>c:a<c;a+=d)
f(1,'<'3,1);
for(b-=61;b*a>b*c;a+=d)
arbeitet für ein einzelnes Byte; aber das tut es auchfor(;b-62?a<c:a>c;a+=d)
.C
5251 Bytes-1 Byte dank H Walters
Probieren Sie es online!
quelle
b&2
stattb^60
für ein anderes Byte.Python 3, 52 Bytes
repl.it
quelle
Pip , 14 Bytes
Übernimmt vier Befehlszeilenargumente. Unterstützt negative und Gleitkommazahlen sowie Vergleichsoperatoren
< > = <= >= !=
. Probieren Sie es online!quelle
Gelee , 8 Bytes
Dies ist eine dyadische Verknüpfung, die a, b, c als linkes und d als rechtes Argument verwendet . Die Ausgabe kann unendlich sein und geht zu STDOUT.
Probieren Sie es online!
Wie es funktioniert
quelle
F
, um das Array zu reduzieren .Python 2 , 45 Bytes
Probieren Sie es online!
Eine sehr wörtliche Umsetzung der Spezifikation. Übernimmt die Codevorlage, ersetzt die Eingaben durch Zeichenfolgenformatierung und führt sie aus.
quelle
Normaler TeX, 88 Bytes
Der Befehl
\for
stellt die angeforderte Funktion bereit. Speichern Sie dies alsfor.tex
und führen Sie es dann aus und geben Sie die Variablenwerte in der Befehlszeile ein:pdftex '\input for \for 1 < 5 1 \bye'
Die Variablenwerte müssen durch Leerzeichen getrennt werden.quelle
Python 3, 61 Bytes
Einzeiler:
quelle
\t
durch ein Leerzeichen ersetzen .Haskell ,
6664 BytesProbieren Sie es online! Verwendung:
quelle
Bash (+ Unix Tools), 29 Bytes
Golf gespielt
Prüfung
quelle
Ruby,
4341 BytesWenn anstelle eines Strings
b
ein Ruby-Symbol verwendet werden kann, erhalten Sie 38 Bytes :Probieren Sie eine der beiden Lösungen online aus!
quelle
Gemeines Lisp,
8280797364 BytesPrüfung
-9 Bytes dank PrzemysławP.
quelle
(defmacro f(a b c d)<insert backqoute here>(do((i,a(+ i,d)))((not(,b i,c)))(print i)))
Verbrauch:(f 1 < 10 1)
PHP,
6965 BytesFühren Sie mit '-r' aus; Geben Sie Befehlszeilenargumente als Eingabe ein.
Für
nur ein Byte mehr4 weitere Bytes kann ich jeden Operator nehmen:Ja, böse Eval. Wussten Sie, dass es etwas zurückgeben kann?
Durch die Destrukturierung in Kurzform
[,$i,$b,$c,$d]=$argv;
würden 4 weitere Bytes eingespart.aber PHP 7.1 datiert die Herausforderung nach.
quelle
list
spart die Verwendung von 4 Bytes plus 4 Bytes mit kurzer Syntaxlist()
.Perl 6 , 44 Bytes
Wie es funktioniert
Wenn es in Ordnung ist, eine (möglicherweise unendliche) Folge von Zahlen als Wert vom Typ zurückzugeben
Seq
, anstatt die Zahlen auf stdout zu drucken, kann der.say for
Teil entfernt und auf 35 Byte reduziert werden.quelle
Clojure,
6663 Bytes-3 Bytes durch Ausklammern der
loop
. Ich "missbrauche" den init-Parameter, um als laufender Akku zu fungieren.Rekursive Lösung (mit TCO). Siehe Kommentare in vorprogrammiertem Code. Ich habe eine nicht-TCO-rekursive Lösung ausprobiert, die 67 Byte umfasste.
Ich würde diesen Beat gerne in Clojure sehen! Ich denke das ist das kleinste was ich bekommen kann.
quelle
#(when(({">">"<"<}%2)% %3)(println %)(recur(+ % %4)%2 %3 %4))
würde 61 Bytes sein und deinwhen
mit meinem kombinieren({">">"<"<}%2)
.Groovy, 51 Bytes
Dies ist eine namenlose Schließung. Probieren Sie es online!
Achtung - Wenn Sie dies mit testen möchten
groovy console
, stellen Sie sicher, dass Sie den gesamten Prozess abbrechen, wenn die Eingabe eine Endlosschleife verursacht. Ich bemerkte dies, nachdem es ~ 5 GB RAM verbraucht hatte.quelle
QBIC ,
51 bis40 BytesUnd drei Minuten nach dem Posten wurde mir klar, dass ich die Terminatorlogik vereinfachen könnte ...
quelle
Batch, 94 Bytes
Wenn das Verhalten des zweiten Parameters nicht gegeben wäre, könnte dies in 53 Bytes erfolgen:
Das macht einfach nichts, wenn der Schritt das falsche Vorzeichen hat. Der zusätzliche Test besteht darin, dass die
for
Schleife von Batch ermöglicht, dass die Schleifenvariable dem Endwert entspricht.quelle
Clojure, 66 Bytes
Dies könnten 55 Bytes gewesen sein
<
und>
sind Funktionen in Clojure:quelle
<
anstatt"<"
Clojure zuzulassen .TI-Basic,
4134 Bytesquelle
Prompt
,Str2
,Str3
,While
,expr(
,Disp
,->
, UndEnd
sind alle Single-Byte - Zeichen. Ich zähle 29 Bytes.Str2
,Str3
undexpr(
sind alle Zwei-Byte - Token. Eine Liste der Ein-Byte-Token finden Sie unter tibasicdev.wikidot.com/one-byte-tokens