Di Java / .NET / C / JavaScript / dll. Anda dapat menggunakan ternary-ifs untuk mempersingkat jika-pernyataan.
Misalnya (di Jawa):
// there is a String `s` and an int `i`
if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
Dapat disingkat dengan ternary-if ke:
s=i<0?"Neg":i>0?"Pos":"Neut";
Tantangan:
Input: Suatu if-else reguler (mungkin dengan nesting) yang menetapkan variabel tunggal.
Keluaran: The ternary-if yang dikonversi.
Aturan tantangan:
- Anda dapat mengasumsikan semua case if-else dimungkinkan tanpa tanda kurung (jadi setiap blok if / else-if / else memiliki satu tubuh)
- Anda dapat mengasumsikan tidak akan ada spasi, tab, atau baris baru, kecuali satu spasi setelah masing-masing
else
(termasuk padaelse if
). - Anda dapat mengasumsikan nama variabel yang digunakan selalu berupa huruf kecil tunggal (
[a-z]
). - Nilai yang diberikan ke variabel dapat berupa:
- String (tanpa spasi / tab / new-garis), yang akan dikelilingi oleh tanda kutip ganda (yaitu
"Test"
,"SomeString"
,"Example_string"
, dll). Anda dapat mengasumsikan bahwa string tidak akan pernah mengandung substringif
atauelse
, juga tidak akan mengandung spasi, tab, baris baru, tanda kutip ganda (lolos), atau karakter=
. Ini dapat berisi karakter><(){}[];?:!&|
, tetapi hanya akan berada dalam kisaran ASCII yang dapat dicetak (['!' (33), '~' (126)]
). - Bilangan bulat (yaitu
0
,123
,-55
, dll) - Desimal (yaitu
0.0
,0.123
,-55.55
, dll)
- String (tanpa spasi / tab / new-garis), yang akan dikelilingi oleh tanda kutip ganda (yaitu
- Nilai tidak akan pernah dicampur. Jadi semua variabel yang ditugaskan adalah bilangan bulat, dan tidak ada yang bilangan bulat dan beberapa adalah string.
- Kondisi di dalam kurung dapat berisi karakter berikut
=<>!+-/*%&|[]
,a-z
,0-9
. Anda dapat mengasumsikan tidak akan ada kurung dalam, dan Anda juga dapat mengasumsikan tidak akan ada bidang (membingungkan) lebih dari satu karakter yang digunakan (sepertiif(if<0)
). - Anda bisa berasumsi tidak akan ada jalan pintas seperti
i*=10
sebaliknyai=i*10
. - Anda tidak harus menangani kasing
else
, jadi semuanyaif
bisa dipasangkan denganelse
. Yaituif(a)if(b)r=0;else r=1;
bukan kasus input yang mungkin.if(a)if(b)r=0;else r=1;else r=2;
atauif(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
bagaimanapun. - I / O fleksibel. Input dan Output dapat berupa string, daftar karakter, baca dari STDIN, output ke STDOUT, dll. Panggilan Anda.
- Semua terner akan memiliki asosiativitas yang tepat, seperti standar dalam kebanyakan bahasa ( tetapi tidak dalam PHP misalnya ).
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika memungkinkan.
Kasus uji:
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
adalah operator ternary. Jadi jika Anda menulislet result = if 10 > 100 then 99 else -99
maka nilainyaresult
akan menjadi-99
.