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
.Jawaban:
Retina 0.8.2 , 32 byte
Cobalah online! Penjelasan:
Tangani
if
segera sebelum penugasan dengan memindahkan penugasan sebelum kondisi dan menambahkan a?
. Panggung dicocokkan dari kanan ke kiri untuk memastikan kami mendapatkan jika terdekat dengan tugas, sementara panggung\)
memastikan bahwa kami tidak cocokelse
dengan kesalahan.Ulangi tahap ini untuk merawat sarang
if
.Tugas yang tersisa adalah
else
jadi ganti;else ?=
dengan a:
.sumber
Python 2 ,
126121120114100 byteCobalah online!
Diselamatkan:
sumber
Perl 5 -p,
504948 byteCobalah online!
Versi 48 byte terinspirasi oleh jawaban Neil's Retina.
Penjelasan
Solusi 49 byte lama
sumber
Ruby ,
7271 byteCobalah online!
sumber
;else
atauelse
bisa.{5}
untuk menyimpan byte.Java (JDK) ,
119116 byteSolusi regex hampir seluruhnya murni, dicincang dan diubah sedikit dari beberapa jawaban lainnya.
-3 Bytes berkat beberapa tipu daya regex dari Kevin
Cobalah online!
Penjelasan
sumber
".*(.=).*","$1$0"
Anda gunakan, 1 byte lebih pendek dari yang"^(.*)(.=)","$2$1"
saya pikirkan. :) Bagaimanapun, Anda dapat menyimpan 2 byte yang berubahif\\(
menjadiif.
dan byte tambahan yang diubah(\\?| )
menjadi([? ])
. Cobalah secara online 116 byte .Kakoune v2018.09.04 ,
433837 bytePenjelasan:
Kakoune adalah editor modal berbasis banyak pilihan, terinspirasi oleh Vim.
x
pilih seluruh bariss
...<ret>
filter pilihan dengan ekspresi reguler\w=(?!=)
, yang cocok dengan semua tugas variabel, dan tidak cocok dengan==
perbandingand
hapus setiap pilihan dan masukkan isinya ke register default<a-h>
rentangkan semua pilihan ke awal baris merekaP
rekatkan isi register default sebelum setiap pilihans
...<ret>
filter pilihan dengan ekspresi regulerif.
d
hapus setiap pilihanf
memperpanjang setiap pilihan maju ke depan)
;
kurangi setiap pilihan ke kursornyar
ganti setiap karakter dari setiap pilihan dengan?
x
pilih seluruh bariss
...<ret>
saring pilihan dengan;else<space>
c
...<esc>
hapus setiap pilihan dan ganti dengan:
animasi kode pada test case:
sumber
Bersih ,
386375216196189 byteLihat bu, jangan regex!
Cobalah online!
sumber
JavaScript (Node.js) , 80 byte
Cobalah online!
Berkat Kevin Cruijssen, 2 byte disimpan.
sumber
if\(
dapatif.
dan;else
dapat;.{5}
menghemat 2 byte