Java / .NET / C / JavaScript /など。ternary-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";
ternary-ifで短縮できます:
s=i<0?"Neg":i>0?"Pos":"Neut";
チャレンジ:
入力:単一の変数を設定する通常のif-else(ネスト可能)。
出力:変換されたternary-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への出力などです。
- ほとんどの言語の標準であるように、すべての3項には正しい結合性があります(ただし、たとえばPHPにはありません)。
一般的なルール:
- これはcode-golfであるため、バイト単位の最短回答が優先されます。
コードゴルフ言語では、非コードゴルフ言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。 - 回答には標準の規則が適用されるため、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;
if ... then ... else
では三項演算子です。したがって、あなたが書くlet result = if 10 > 100 then 99 else -99
場合の値はにresult
なります-99
。