En Java / .NET / C / JavaScript / etc. puedes usar ternary-ifs para acortar sentencias if.
Por ejemplo (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";
Se puede acortar con un ternario si:
s=i<0?"Neg":i>0?"Pos":"Neut";
Desafío:
Entrada: Un if-else regular (posible con anidamiento) que establece una sola variable.
Salida: El ternario convertido si.
Reglas de desafío:
- Puede suponer que todos los casos if-else son posibles sin corchetes (por lo que cada bloque if / else-if / else tiene un solo cuerpo).
- Puede suponer que no habrá espacios, pestañas o nuevas líneas, excepto un solo espacio después de cada uno
else(incluido enelse if). - Puede suponer que los nombres de variables utilizados son siempre una letra minúscula (
[a-z]). - Los valores dados a las variables pueden ser uno de:
- Cuerdas (sin espacios / tabs / nuevos líneas), que estará rodeado por comillas dobles (es decir
"Test","SomeString","Example_string", etc.). Puede suponer que las cadenas nunca contendrán las subcadenasifo queelsetampoco contendrán espacios, tabulaciones, líneas nuevas, comillas dobles (escapadas) o el carácter=. Puede contener los caracteres><(){}[];?:!&|, pero solo estará en el rango ASCII imprimible (['!' (33), '~' (126)]). - Los enteros (es decir
0,123,-55, etc.) - Decimales (es decir
0.0,0.123,-55.55, etc.)
- Cuerdas (sin espacios / tabs / nuevos líneas), que estará rodeado por comillas dobles (es decir
- Los valores nunca se mezclarán. Entonces, todas las variables asignadas son enteros, y no algunas son enteras y algunas son cadenas.
- Las condiciones dentro de paréntesis pueden contener los siguientes caracteres
=<>!+-/*%&|[],a-z,0-9. Puede suponer que no habrá paréntesis internos, y también puede suponer que no habrá campos (confusos) de más de un carácter utilizado (comoif(if<0)). - Puede suponer que no habrá atajos como en
i*=10lugar dei=i*10. - No tendrá que manejar
elsecasos colgantes , por lo que todosifse pueden combinar con unelse. Es decir,if(a)if(b)r=0;else r=1;no es un posible caso de entrada.if(a)if(b)r=0;else r=1;else r=2;oif(a&&b)r=0;else if(a&&!b)r=1;else r=-1;son sin embargo. - I / O es flexible. La entrada y salida puede ser una cadena, una lista de caracteres, leer desde STDIN, salir a STDOUT, etc. Su llamada.
- Todos los ternaries tendrán una asociatividad correcta, como es el estándar en la mayoría de los lenguajes ( pero no en PHP, por ejemplo ).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de código. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede utilizar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es posible.
Casos de prueba:
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 ... elsees el operador ternario. Entonces, si escribes,let result = if 10 > 100 then 99 else -99entonces el valor deresultsería-99.