在Java / .NET / C / JavaScript / etc中。您可以使用三元if来缩短if语句。
例如(在Java中):
// there is a String `s` and an int `i`
if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
可以通过三元数缩短为:
s=i<0?"Neg":i>0?"Pos":"Neut";
挑战:
输入:设置单个变量的常规if-else(可以嵌套)。
输出:转换后的三进制-if。
挑战规则:
- 您可以假设所有if-else情况都可能没有括号(因此,每个if / else-if / else块都有一个主体)。
- 您可以假设将没有任何空格,制表符或换行符,除了每个空格,制表符或换行符
else
(包括处的else if
)之外。 - 您可以假设使用的变量名始终是一个小写字母(
[a-z]
)。 - 赋予变量的值可以是以下之一:
- 字符串(不带空格/选项卡/新线),这将通过双引号包围(即
"Test"
,"SomeString"
,"Example_string"
等等)。您可以假定字符串将永远不包含子字符串if
或else
,也不包含空格,制表符,换行符(转义的双引号)或字符=
。它可以包含字符><(){}[];?:!&|
,但只能在可打印的ASCII范围内(['!' (33), '~' (126)]
)。 - 整数(即
0
,123
,-55
等等) - 小数(即
0.0
,0.123
,-55.55
等等)
- 字符串(不带空格/选项卡/新线),这将通过双引号包围(即
- 这些值永远不会混淆。因此,分配的所有变量都是整数,并非某些是整数,有些不是字符串。
- 括号内的条件可以包含以下字符
=<>!+-/*%&|[]
,a-z
,0-9
。您可以假设将没有任何内部括号,也可以假设将不使用任何使用多个字符(如if(if<0)
)的(令人困惑)字段。 - 您可以假设不会有
i*=10
代替的快捷方式i=i*10
。 - 您无需处理悬而未决的
else
案件,因此if
可以将所有案件与配对else
。即if(a)if(b)r=0;else r=1;
不是一个可能的输入案例。if(a)if(b)r=0;else r=1;else r=2;
或者if(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
是。 - I / O是灵活的。输入和输出可以是字符串,字符列表,从STDIN读取,输出到STDOUT等。您的呼叫。
- 所有三元都将具有正确的关联性,这在大多数语言中都是标准的(但在PHP中则不是)。
通用规则:
- 这是代码高尔夫球,因此最短答案以字节为单位。
不要让代码高尔夫球语言阻止您发布使用非代码高尔夫球语言的答案。尝试针对“任何”编程语言提出尽可能简短的答案。 - 标准规则适用于您的答案,因此您可以使用STDIN / STDOUT,具有正确参数的函数/方法和返回类型的完整程序。你的来电。
- 默认漏洞是禁止的。
- 如果可能的话,请添加一个带有测试代码的链接。
- 另外,请尽可能添加说明。
测试用例:
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;
@Ciaran_McCarthy我希望大多数情况都是这样,即使不是所有将条件表达式作为默认值的函数学习语言也是如此。Clojure,Scala和Haskell相同。
—
Carcigenicate '18
@tsh糟糕,。我不应该在工作一天后的深夜添加测试用例。
—
凯文·克鲁伊森
JavaScript Compressor Closure Compiler在所有这些测试用例上都可以很好地工作。当采用给定的输入时,它将仅产生预期的输出。但似乎我不能要求它作为答案。所以我想在这里发表评论。
—
tsh
if ... then ... else
是三元运算符。因此,如果您编写,let result = if 10 > 100 then 99 else -99
则值result
将为-99
。