In Java / .NET / C / JavaScript / ecc. puoi usare ternary-ifs per abbreviare if-statement.
Ad esempio (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";
Può essere abbreviato con un ternario, se a:
s=i<0?"Neg":i>0?"Pos":"Neut";
Sfida:
Input: un if-else regolare (possibile con annidamento) che imposta una singola variabile.
Output: il ternary-if convertito.
Regole della sfida:
- Puoi presumere che tutti i casi if-else siano possibili senza parentesi (quindi ogni blocco if / else-if / else ha un solo corpo).
- Puoi presumere che non ci saranno spazi, tabulazioni o nuove righe, ad eccezione di uno spazio singolo dopo ciascuno
else(incluso atelse if). - Puoi presumere che i nomi delle variabili utilizzati siano sempre una singola lettera minuscola (
[a-z]). - I valori dati alle variabili possono essere uno di:
- Stringhe (spazi / schede / nuovo-linee), che sarà circondato da virgolette (cioè
"Test","SomeString","Example_string", ecc). Puoi presumere che le stringhe non conterranno mai le sottostringheifoelse, né conterranno spazi, tabulazioni, newline, virgolette doppie (con escape) o il carattere=. Può contenere i caratteri><(){}[];?:!&|, ma sarà solo nell'intervallo ASCII stampabile (['!' (33), '~' (126)]). - Interi (cioè
0,123,-55, etc.) - Decimali (cioè
0.0,0.123,-55.55, etc.)
- Stringhe (spazi / schede / nuovo-linee), che sarà circondato da virgolette (cioè
- I valori non saranno mai mescolati. Quindi tutte le variabili assegnate sono numeri interi e non alcune sono numeri interi e alcune sono stringhe.
- Le condizioni all'interno parentesi possono contenere i seguenti caratteri
=<>!+-/*%&|[],a-z,0-9. Puoi presumere che non ci sarà alcuna parentesi interna e puoi anche supporre che non ci saranno campi (confusi) con più di un personaggio usato (comeif(if<0)). - Puoi presumere che non ci saranno scorciatoie come
i*=10invece dii=i*10. - Non dovrai gestire i
elsecasi penzoloni , quindi tuttoifpuò essere abbinato a unelse. Cioèif(a)if(b)r=0;else r=1;non è un possibile caso di input.if(a)if(b)r=0;else r=1;else r=2;o loif(a&&b)r=0;else if(a&&!b)r=1;else r=-1;sono comunque. - L'I / O è flessibile. Input e Output possono essere una stringa, un elenco di caratteri, letti da STDIN, output su STDOUT, ecc. La chiamata.
- Tutti i ternari avranno una giusta associatività, come lo standard nella maggior parte delle lingue ( ma non in PHP ad esempio ).
Regole generali:
- Questo è code-golf , quindi vince la risposta più breve in byte.
Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione. - Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
- Sono vietate le scappatoie predefinite .
- Se possibile, aggiungi un link con un test per il tuo codice.
- Inoltre, si prega di aggiungere una spiegazione, se possibile.
Casi test:
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 ... elseè l'operatore ternario. Quindi se scrivilet result = if 10 > 100 then 99 else -99allora il valore diresultsarebbe-99.