En Java / .NET / C / JavaScript / etc. vous pouvez utiliser les ifs ternaires pour raccourcir les instructions if.
Par exemple (en Java):
// there is a String `s` and an int `i`
if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
Peut être raccourci avec un ternaire si:
s=i<0?"Neg":i>0?"Pos":"Neut";
Défi:
Entrée: un if-else régulier (possible avec l'imbrication) qui définit une seule variable.
Sortie: le ternaire converti.
Règles du défi:
- Vous pouvez supposer que tous les cas if-else sont possibles sans crochets (donc chaque bloc if / else-if / else a un seul corps).
- Vous pouvez supposer qu'il n'y aura pas d'espaces, de tabulations ou de nouvelles lignes, à l'exception d'un seul espace après chacun
else
(y compris atelse if
). - Vous pouvez supposer que les noms de variables utilisés sont toujours une seule lettre minuscule (
[a-z]
). - Les valeurs données aux variables peuvent être l'une des suivantes:
- Cordes (sans espaces / onglets / nouvelles-lignes), qui seront entourés par des guillemets doubles (c. -à
"Test"
,"SomeString"
,"Example_string"
, etc.). Vous pouvez supposer que les chaînes ne contiendront jamais les sous-chaînesif
ouelse
, ni les espaces, les tabulations, les retours à la ligne, les guillemets (échappés) ou le caractère=
. Il peut contenir les caractères><(){}[];?:!&|
, mais sera uniquement dans la plage ASCII imprimable (['!' (33), '~' (126)]
). - Entiers (c. -à-
0
,123
,-55
, etc.) - (C. -à- Décimales
0.0
,0.123
,-55.55
, etc.)
- Cordes (sans espaces / onglets / nouvelles-lignes), qui seront entourés par des guillemets doubles (c. -à
- Les valeurs ne seront jamais mélangées. Ainsi, toutes les variables attribuées sont des entiers, et non certaines sont des entiers et certaines sont des chaînes.
- Les conditions à l' intérieur des parenthèses peuvent contenir les caractères suivants
=<>!+-/*%&|[]
,a-z
,0-9
. Vous pouvez supposer qu'il n'y aura pas de parenthèses internes, et vous pouvez également supposer qu'il n'y aura pas de champs (confus) de plus d'un caractère utilisés (commeif(if<0)
). - Vous pouvez supposer qu'il n'y aura pas de raccourcis comme
i*=10
au lieu dei=i*10
. - Vous n'aurez pas à gérer de
else
cas pendants , donc toutif
peut être associé à unelse
. Ceif(a)if(b)r=0;else r=1;
n'est pas un cas d'entrée possible.if(a)if(b)r=0;else r=1;else r=2;
ouif(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
sont cependant. - Les E / S sont flexibles. L'entrée et la sortie peuvent être une chaîne, une liste de caractères, lues depuis STDIN, sorties vers STDOUT, etc. Votre appel.
- Tous les ternaires auront une bonne associativité, comme c'est le standard dans la plupart des langues ( mais pas par exemple en PHP ).
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si possible.
Cas de 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
est l'opérateur ternaire. Donc, si vous écrivez,let result = if 10 > 100 then 99 else -99
la valeur deresult
serait-99
.