Do While False
Bei der heutigen Arbeit beschrieb einer meiner Kollegen den Use-Case für do while (false). Die Person, mit der er sprach, fand das albern und so einfach, wenn Aussagen viel besser wären. Wir verbrachten dann die Hälfte unseres Tages damit, darüber zu diskutieren, wie wir etwas Äquivalentes schreiben können zu:
do
{
//some code that should always execute...
if ( condition )
{
//do some stuff
break;
}
//some code that should execute if condition is not true
if ( condition2 )
{
//do some more stuff
break;
}
//further code that should not execute if condition or condition2 are true
}
while(false);
Dies ist eine Redewendung, die häufig in c vorkommt. Ihr Programm sollte abhängig von den Bedingungen die gleiche Ausgabe wie der folgende Pseudocode erzeugen.
do
{
result += "A";
if ( C1)
{
result += "B";
break;
}
result += "C"
if ( C2 )
{
result += "D";
break;
}
result += "E";
}
while(false);
print(result);
Daher könnte die Eingabe sein:
1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false
und die Ausgabe sollte sein:
1. "AB"
2. "AB"
3. "ACD"
4. "ACE"
Dies ist Code-Golf, daher werden die Antworten nach Bytes beurteilt. Standardlücken sind verboten.
Ja, dies ist eine einfache, aber wir werden hoffentlich einige kreative Antworten finden. Ich hoffe, dass die Einfachheit die Menschen dazu ermutigt, Sprachen zu verwenden, mit denen sie weniger vertraut sind.
return result
anstelle vonbreak
. Dann erhalten Sie auch die Vorteile der Wiederverwendbarkeit und der Vereinfachung des Anrufcodes. Aber vielleicht fehlt mir etwas.goto
verwenden,goto
ist schlechte Form :)do{}while(false)
sind Makros. Ein einfachesif
genügt nicht, weil es schlecht mit derelse
Umgebung interagiert , die vorhanden sein kann. Ohne Makro können Sie auch dasdo
und entfernenwhile
.Antworten:
Python 3, 31
Dank xnor 1 Byte gespeichert.
Nur ein Byte von ES6 entfernt. : / Dummes Python und seine lange anonyme Funktionssyntax.
Hurra für einen Liner!
Testfälle:
quelle
x*"AB"
, können Sie den Platz danach sparen.λ
als Synonymlambda
wäre großartig :)JavaScript ES6,
302625 BytesEine einfache anonyme Funktion mit zwei Eingaben. Zuweisen einer aufzurufenden Variablen. Update : Lass uns auf den Index-Zug springen. Das spart 4 Bytes. Ich habe meinen Vorsprung vor Python gesichert . Durch Aufrufen der Funktion wurde ein Byte gespeichert. nennen wie
(...)(a)(b)
. Vielen Dank Patrick Roberts!Alte Originalversion, 30 Bytes (enthalten, um nicht in die Python-Antwort einzuschmelzen
(;
):quelle
:b?
C Präprozessor-Makro, 34
Probieren Sie es online aus .
quelle
Haskell, 28 Bytes
Anwendungsbeispiel:
False # True
->"ACD"
.Verwenden Sie die Eingabewerte direkt als Wächter.
quelle
MATL , 15 -
17BytesEingänge sind
0
oder1
in separaten Zeilen. Alternativ0
kann durchF
(MATLsfalse
) und1
durchT
(MATLstrue
) ersetzt werden.Probieren Sie es online!
quelle
Brainfuck, 65 Bytes
Dies setzt voraus, dass C1 und C2 als unformatierte 0 oder 1 Bytes eingegeben werden. z.B
Golf gespielt:
Ungolfed:
Ich glaube , es erwähnenswert, dass diese Lösung ist in der Tat basiert auf Ausbrechen der While - Schleifen.
quelle
GNU Sed, 21
Ideone .
quelle
NTFJ , 110 Bytes
Besser lesbar:
Das war auf jeden Fall unterhaltsam. Probieren Sie es hier aus und geben Sie zwei Zeichen (
0
oder1
) ein.Mit der Methode von ETHProduction zur Umwandlung von 0, 1 (Zeichen) in Bits wird dies einfacher.
Dies ist die genannte Methode.
##~~~~~#@
Drücken Sie 193 ( ) und NANDING (|
) mit dem oberen Eingabewert (in diesem Fall dem ersten Zeichencode, a 48 oder 49). Dies ergibt 254 für 1 und 255 für 0. Eine NAND-Verknüpfung mit 255 (########@
) ergibt je nach Eingabe ein 0- oder 1-Bit.Dies gibt ein aus
A
, da alle Eingaben mit beginnenA
.*
PopupA
beim Drucken, so dass der Stapel unverändert zum vorherigen Status ist.Fall 1: Das erste Bit ist
1
und(
aktiviert den Code im Inneren.~#~~~~#~@*
drucktB
und########@^
drückt 255 und springt zu dieser Position im Code. Da dies das Ende des Programms ist, wird es beendet.Fall 2: Das erste Bit ist
0
.(
springt zu)
und der Code wird fortgesetzt.Dies gibt ein aus
C
, da dies das nächste Zeichen ist.Dies wandelt unsere zweite Eingabe in ein bisschen um.
Wenn unser zweites Bit eine 1 ist, drucken wir eine
E
.Dies ist die NAND - Darstellung der Booleschen Negation unserer Bit:
A NAND (0 NAND A) = NOT A
.Dies wird jetzt aktiviert, wenn das Bit a war
0
, und wird gedrucktE
.quelle
Pyth, 16 Bytes
Testsuite
Ternaries!
Erläuterung:
Eingabe auf zwei aufeinander folgenden Zeilen.
quelle
CJam, 15
1617BytesProbieren Sie es online!
Ein Byte weniger dank @randomra und ein Byte weniger dank @Dennis
Erläuterung:
Alte Version (16 Bytes):
Erläuterung:
quelle
Pyth, 13 Zeichen, 19 Bytes
Übernimmt Eingaben in Form [a, b]
Erläuterung
Probieren Sie es hier aus
Oder verwenden Sie eine Testsuite
quelle
«
als jeweils 1 Byte (2 Byte in UTF-8) gezählt. Beideswc
und das sind sich einig, dass es 19 Bytes sind.C 76 Bytes
Ich habe umbenannt
c1
inc
,c2
nachC
undresult
nachr
. C-Programmierer gehen zum Äußersten, um dies zu vermeidengoto
. Wenn Sie jemals ein Problem mit absurder Syntax in C haben, liegt dies höchstwahrscheinlich daran, dass Sie es nicht verwendet habengoto
.Ungolfed
quelle
char r[4]="A";
? Mein C ist rostig."AC"
und alles vonr[1]=67
bisr[2]=69;
durchr[2]=c2?68:69;
C 41 Bytes
Ich bin mir nicht sicher, ob die Frage ein Programm, eine Funktion oder einen Codeausschnitt erfordert.
Hier ist eine Funktion:
Es erhält die Eingabe in zwei Parametern, die 0 oder 1 sein müssen (naja,
b
muss), und druckt auf stdout.Stellt
a
auf0x4241
,0x454341
oder ein0x444341
. Wenn es als Zeichenfolge gedruckt wird, liefert es auf einem Little-Endian-ASCII-System die erforderliche Ausgabe.quelle
R ,
413937 BytesProbieren Sie es online!
In R,
TRUE
undFALSE
sind gezwungen zu1
und0
jeweils , wenn Sie versuchen , sie als Zahlen zu verwenden. Wir können diese Zahlen auf Indizes umwandeln1
,2
und3
durch die Formel1+a+a^b
.Diese Werte werden dann zum Indizieren der Liste verwendet
ACD
,ACE
,AB
die korrekte Ausgabe zu erhalten.Zwei Bytes dank JayCe gespart.
Wenn Sie stattdessen eine Version mit einer
if
Anweisung bevorzugen , gilt für 41 Bytes Folgendes:Probieren Sie es online!
quelle
^
Mathematica,
35-30BytesSehr einfach. Anonyme Funktion.
quelle
Netzhaut, 22 Bytes
Probieren Sie es online
quelle
^
mitm`
, damit es für mehrzeilige Eingaben funktioniert. Dies ist für die Frage nicht erforderlich, erleichtert jedoch das Testen.JavaScript, 38 Bytes
Verwenden Sie kein Trennzeichen
0
oder1
anstelle vonfalse
/true
quelle
split` `
anstelle vonsplit(" ")
+('0b'+prompt())
anstelle vonparseInt(prompt(),2)
Caché ObjectScript , 27 Byte
quelle
ArnoldC , 423 Bytes
Da ArnoldC keine formale Eingabe zu haben scheint, ändern Sie
YOU SET US UP
stattdessen einfach die ersten 2 Werte in entweder 0 oder 1.Erläuterung
Dies ist nur eine ganze Reihe von bedingten Anweisungen, die alle möglichen Ausgaben berücksichtigen. Warum, fragst du dich vielleicht? Nun, ArnoldC hat kein wirkliches String-Verständnis. Es kann nicht einmal Strings verketten! Infolgedessen müssen wir auf die ineffizientere Methode zurückgreifen.
quelle
Java, 28 Bytes
Gleiche Kesselplatte wie viele Antworten. Typ ist
BiFunction<Boolean,Boolean, String>
.quelle
(c,d)->
kann von 1 Byte bis Golf gespielt werden,c->d->
wenn Sie eine verwendenjava.util.function.Function<Boolean, java.util.function.Function<Boolean, String>>
.Pyth, 21 Bytes
Probieren Sie es hier aus!
Die Eingabe wird als 0 oder 1 anstelle von wahr / falsch genommen, während C1 an erster Stelle steht.
Erläuterung
Nur mit der Tatsache, dass es nur 4 mögliche Ergebnisse gibt. Wird verwendet, indem die Eingabe als binär interpretiert, in Basis 10 konvertiert und damit das richtige Ergebnis aus der Suchzeichenfolge ausgewählt wird.
quelle
Y , 20 Bytes
Für den Fall, dass die erste Eingabe eine ist, wird nur eine Eingabe verwendet. Ich gehe davon aus, dass dieses Verhalten erlaubt ist. Probieren Sie es hier aus!
Ungolfed:
Erklärt:
Dies schiebt die Zeichen
B
dannA
auf den Stapel.Dies nimmt eine Eingabe, inkrementiert sie, fügt sie ein und bewegt sich über diese Anzahl von Abschnitten.
Fall 1:
j1 = 0
. Dies ist das interessantere.r$
Kehrt den Stapel um und fügt einen Wert ein,'C'E
drückt die ZeichenC
undE
.@
KonvertiertE
in sein numerisches Gegenstück, subtrahiert die zweite Eingabe von ihr und konvertiert sie wieder in ein Zeichen.r
Kehrt den Stapel um. Anschließend erkennt das Programm die C-Verknüpfung, wechselt zur nächsten Verknüpfungp
und druckt den Stapel.Fall 2: Das Programm springt zum letzten Link
p
, der lediglich den gesamten Stapel druckt.quelle
PowerShell, 40 Byte
Durch Eingabe indizierte verschachtelte Arrays. In PowerShell sind
$true
/1
und$false
/0
praktisch gleichwertig (dank sehr loser Typumwandlung), sodass die Indizes in ein Array mit zwei Elementen umgewandelt werden können. Dies kommt einem Ternär wirklich so nahe wie PowerShell und ich habe es oft beim Golfen verwendet.Beispiele
quelle
K, 37 Bytes
quelle
Vitsy , 26 Bytes
Erwartet Eingaben als 1s oder 0s durch STDIN mit einer Zeilenumbruchtrennung.
Ich habe tatsächlich ein ernstes Problem mit if-Anweisungen während dieser Herausforderung entdeckt. D: Dies ist mit der kaputten Version gepostet, aber es funktioniert gut. (Ich werde dies aktualisieren, nachdem ich das Problembehoben habe.)Bitte beachten Sie, dass ich Vitsy mit einem Update von if / ifnot aktualisiert habe. Diese Änderung verschafft mir keinen Vorteil, nur Klarstellung.Erläuterung:
Probieren Sie es online!
quelle
Bienenwachs , 26 Bytes
Interpretieren
0
als falsch,1
als wahr.Ausgabe:
Klonen Sie meinen Bienenwachs-Interpreter aus meinem Github-Repository .
quelle
C
4745 BytesDa es nur drei verschiedene Ergebnisse gibt, können wir eine der drei folgenden Zeichenfolgen auswählen:
Danke an Herman L für 2 Bytes
Demo
quelle
char*f(c,d){return"AB\0 ACE\0ACD"+(!c<<d+2);}
Perl, 23 Bytes
Benötigt das
-E
|-M5.010
flag und nimmt die Eingabe als 1 und 0:Alternative Lösung, die
-p
22 + 1 = 23 Bytes benötigt und ist:quelle
say-<>?AB:-<>?ACD:ACE
ist zwei Bytes kürzer.05AB1E ,
2320 BytesCode:
Probieren Sie es online!
quelle
i„ABë„AC69I-çJ
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .I
. ; pJapt, 19 Bytes
Online testen!
Unterhaltsame Tatsache: Das wären 16 Bytes, wenn es keinen Fehler gäbe:
quelle