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。