In Java / .NET / C / JavaScript / etc. Sie können ternary-ifs verwenden, um if-Anweisungen zu verkürzen.
Zum Beispiel (in Java):
// there is a String `s` and an int `i`
if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
Kann mit einem ternären gekürzt werden, wenn:
s=i<0?"Neg":i>0?"Pos":"Neut";
Herausforderung:
Eingabe: Ein reguläres if-else (mit Verschachtelung möglich), das eine einzelne Variable festlegt.
Ausgabe: Das konvertierte ternäre If.
Herausforderungsregeln:
- Sie können davon ausgehen, dass alle if-else-Fälle ohne eckige Klammern möglich sind (daher hat jeder if / else-if / else-Block einen einzigen Körper).
- Sie können davon ausgehen, dass es keine Leerzeichen, Tabulatoren oder Zeilenumbrüche gibt, mit Ausnahme eines einzelnen Leerzeichens nach jedem
else(einschließlich atelse if). - Sie können davon ausgehen, dass die verwendeten Variablennamen immer nur Kleinbuchstaben sind (
[a-z]). - Die Werte für die Variablen können folgende sein:
- Strings (ohne Leerzeichen / Tabs / new-Linien), die durch doppelte Anführungszeichen gesetzt wird (dh
"Test","SomeString","Example_string", etc.). Sie können davon ausgehen, dass die Zeichenfolgen niemals die TeilzeichenfolgenifoderelseLeerzeichen, Tabulatoren, Zeilenumbrüche, Anführungszeichen oder das Zeichen enthalten=. Es kann die Zeichen enthalten><(){}[];?:!&|, liegt jedoch nur im druckbaren ASCII-Bereich (['!' (33), '~' (126)]). - Integers (dh
0,123,-55, etc.) - Dezimalzahlen (dh
0.0,0.123,-55.55, etc.)
- Strings (ohne Leerzeichen / Tabs / new-Linien), die durch doppelte Anführungszeichen gesetzt wird (dh
- Die Werte werden niemals gemischt. Alle zugewiesenen Variablen sind also Ganzzahlen, und nicht einige sind Ganzzahlen und einige sind Zeichenfolgen.
- Die Bedingungen in Klammern können die folgenden Zeichen enthalten
=<>!+-/*%&|[],a-z,0-9. Sie können davon ausgehen, dass es keine inneren Klammern gibt, und Sie können auch davon ausgehen, dass keine (verwirrenden) Felder mit mehr als einem Zeichen verwendet werden (wieif(if<0)). - Sie können davon ausgehen, dass es keine Abkürzungen wie
i*=10statt gibti=i*10. - Sie müssen keine baumelnden
elseFälle bearbeiten , sodass alleifmit einem gepaart werden könnenelse. Dhif(a)if(b)r=0;else r=1;kein möglicher Eingabefall.if(a)if(b)r=0;else r=1;else r=2;oderif(a&&b)r=0;else if(a&&!b)r=1;else r=-1;sind es aber. - I / O ist flexibel. Eingabe und Ausgabe können eine Zeichenfolge, eine Liste von Zeichen sein, die von STDIN gelesen, an STDOUT ausgegeben werden usw. Ihr Anruf.
- Alle Ternaries werden eine richtige Assoziativität haben, wie es der Standard in den meisten Sprachen ist ( aber nicht zum Beispiel in PHP ).
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie nach Möglichkeit auch eine Erklärung hinzu.
Testfälle:
Input: if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
Output: s=i<0?"Neg":i>0?"Pos":"Neut";
Input: if(i%2<1)r=10;else r=20;
Output: r=i%2<1?10:20;
Input: if(n<10)if(m<0)i=0;else i=10;else if(m<0)i=-1;else i=1;
Output: i=n<10?m<0?0:10:m<0?-1:1;
Input: if(i==1)i=0.0;else i=0.25;
Output: i=i==1?0.0:0.25;
Input: if(!a)if(b)r=0;else r=1;else r=2;
Output: r=!a?b?0:1:2;
Input: if(a)if(b)r=0;else r=1;else if(c)r=2;else r=3;
Output: r=a?b?0:1:c?2:3;
Input: if(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
Output: r=a&&b?0:a&&!b?1:-1;
Input: if(i[0]>0)if(j>0)if(q>0)r="q";else r="j";else r="i";else r="other";
Output: r=i[0]>0?j>0?q>0?"q":"j":"i":"other";
Input: if(i>0)r="i";else if(j>0)r="j";else if(q>0)r="q";else r="other";
Output: r=i>0?"i":j>0?"j":q>0?"q":"other";
Input: if(a>0)if(a<2)x="one";else if(a<3)x="two";else if(a<4)x="three";else x="other";else x="other";
Output: x=a>0?a<2?"one":a<3?"two":a<4?"three":"other":"other";
Input: if(b[0]<=b[1])q=5;else if(b[0]==null)q=0;else q=-10;
Output: q=b[0]<=b[1]?5:b[0]==null?0:-10;

if ... then ... elseder ternäre Operator. Wenn Sie also schreiben, wärelet result = if 10 > 100 then 99 else -99der Wert von .result-99