Lakukan Saat Salah
Di tempat kerja hari ini salah seorang rekan saya menggambarkan use case untuk do while (false). Orang yang diajaknya bicara berpikir bahwa ini konyol dan sesederhana itu jika pernyataan akan jauh lebih baik. Kami kemudian menghabiskan setengah hari kami untuk membahas cara terbaik untuk menulis sesuatu yang setara dengan:
do
{
//some code that should always execute...
if ( condition )
{
//do some stuff
break;
}
//some code that should execute if condition is not true
if ( condition2 )
{
//do some more stuff
break;
}
//further code that should not execute if condition or condition2 are true
}
while(false);
Ini adalah ungkapan yang sering ditemukan di c. Program Anda harus menghasilkan output yang sama dengan pseudo-code di bawah ini tergantung pada kondisinya.
do
{
result += "A";
if ( C1)
{
result += "B";
break;
}
result += "C"
if ( C2 )
{
result += "D";
break;
}
result += "E";
}
while(false);
print(result);
Karena itu inputnya bisa:
1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false
dan hasilnya harus:
1. "AB"
2. "AB"
3. "ACD"
4. "ACE"
Ini adalah kode-golf sehingga jawaban akan dinilai berdasarkan byte. Celah standar dilarang.
Ya ini sederhana, tapi semoga kita akan melihat beberapa jawaban kreatif, saya berharap kesederhanaan akan mendorong orang untuk menggunakan bahasa yang kurang mereka percayai.
return result
menggantikanbreak
. Kemudian Anda mendapatkan bonus kegunaan ulang dan menyederhanakan kode panggilan juga. Tapi mungkin aku kehilangan sesuatu.goto
karena menggunakangoto
bentuk yang buruk :)do{}while(false)
adalah di dalam makro. Sederhanaif
tidak cukup, karena berinteraksi buruk denganelse
sekitar yang mungkin ada. Tanpa makro Anda juga dapat menghapusdo
danwhile
.Jawaban:
Python 3, 31
Disimpan 1 byte berkat xnor.
Hanya satu byte dari ES6. : / Python Bodoh dan sintaks fungsi anonimnya yang panjang.
Hore untuk satu liners!
Kasus uji:
sumber
x*"AB"
, Anda dapat menghemat ruang setelahnya.λ
sinonimlambda
akan menjadi luar biasa :)JavaScript ES6,
302625 byteFungsi anonim sederhana mengambil dua input. Tetapkan ke variabel untuk dipanggil. Pembaruan : Mari melompat pada kereta musik indeks. Menghemat 4 byte. Saya telah mengamankan kepemimpinan saya di atas Python . Menyimpan byte dengan menjelajah fungsi; panggilan seperti
(...)(a)(b)
. Patrick Roberts terima kasih!Versi lama, asli, 30 byte (termasuk untuk tidak melebur ke dalam jawaban python
(;
):sumber
:b?
C preprocessor macro, 34
Cobalah online .
sumber
Haskell, 28 byte
Contoh penggunaan:
False # True
->"ACD"
.Menggunakan nilai input langsung sebagai penjaga.
sumber
MATL , 15
17byteMasukan
0
atau1
pada jalur yang terpisah. Atau,0
dapat diganti denganF
(MATLfalse
) dan1
olehT
(MATLtrue
).Cobalah online!
sumber
Brainfuck, 65 byte
Ini mengasumsikan bahwa C1 dan C2 adalah input sebagai mentah 0 atau 1 byte. misalnya
Golf:
Tidak Disatukan:
Saya percaya perlu dicatat bahwa solusi ini sebenarnya didasarkan pada break out of while loop.
sumber
GNU Sed, 21
Ideone .
sumber
NTFJ , 110 byte
Lebih mudah dibaca:
Itu tentu menghibur. Cobalah di sini , menggunakan dua karakter (
0
atau1
) sebagai input.Menggunakan metode ETHProduction untuk mengkonversi ke 0, 1 (karakter) menjadi bit, ini menjadi lebih sederhana.
Ini adalah metode tersebut. Mendorong 193 (
##~~~~~#@
), NANDing it (|
) dengan nilai input teratas (dalam hal ini, kode karakter pertama, 48 atau 49). Ini menghasilkan 254 untuk 1 dan 255 untuk 0. NANDing dengan 255 (########@
) menghasilkan bit 0 atau 1 sesuai dengan input.Ini mencetak
A
, karena semua input dimulai denganA
.*
munculA
saat mencetak, sehingga tumpukan tidak berubah dari keadaan sebelumnya.Kasus 1: bit pertama adalah
1
, dan(
mengaktifkan kode di dalamnya.~#~~~~#~@*
mencetakB
, dan########@^
mendorong 255 dan melompat ke posisi itu dalam kode. Ini menjadi akhir dari program, itu berakhir.Kasus 2: bit pertama adalah
0
.(
melompat ke)
dan kode berlanjut.Ini mencetak a
C
, karena itulah karakter selanjutnya.Ini mengubah input kedua kami menjadi sedikit.
Jika bit kedua kami adalah 1, kami melanjutkan untuk mencetak
E
.Ini adalah representasi NAND dari negasi Boolean dari sedikit kami:
A NAND (0 NAND A) = NOT A
.Ini sekarang mengaktifkan jika bit itu adalah
0
, dan mencetakE
.sumber
Pyth, 16 byte
Suite uji
Orang-orang ternama!
Penjelasan:
Input pada dua baris berturut-turut.
sumber
CJam, 15
1617byteCobalah online!
Satu byte off berkat @randomra, dan satu byte off berkat @Dennis
Penjelasan:
Versi lama (16 byte):
Penjelasan:
sumber
Pyth, 13 karakter, 19 byte
Mengambil input dalam bentuk [a, b]
Penjelasan
Coba di sini
Atau gunakan test suite
sumber
«
masing-masing 1 byte (2 byte di UTF-8). Keduanyawc
dan ini sepakat bahwa itu 19 byte.C, 76 byte
Saya berganti nama
c1
menjadic
,c2
keC
danresult
ker
. Pemrogram C pergi ke ekstrem untuk menghindarigoto
. Jika Anda pernah memiliki masalah dengan sintaks yang tidak masuk akal dalam C, kemungkinan besar karena Anda tidak menggunakannyagoto
.Tidak disatukan
sumber
char r[4]="A";
? C saya berkarat."AC"
dan mengganti semuanya darir[1]=67
menjadir[2]=69;
denganr[2]=c2?68:69;
C, 41 byte
Saya tidak yakin apakah pertanyaannya memerlukan program, fungsi, atau cuplikan kode.
Inilah fungsinya:
Ia mendapat input dalam dua parameter, yang harus 0 atau 1 (well,
b
harus), dan dicetak ke stdout.Set
a
ke salah satu0x4241
,0x454341
atau0x444341
. Ketika dicetak sebagai string, pada sistem ASCII little-endian, memberikan output yang diperlukan.sumber
R ,
413937 byteCobalah online!
Di R,
TRUE
danFALSE
dipaksa untuk1
dan0
masing - masing ketika Anda mencoba menggunakannya sebagai angka. Kita dapat mengkonversi angka ini untuk indeks1
,2
dan3
melalui formula1+a+a^b
.Nilai-nilai ini kemudian digunakan untuk indeks daftar
ACD
,ACE
,AB
untuk menghasilkan output yang benar.Disimpan dua byte berkat JayCe.
Jika Anda lebih suka versi dengan
if
pernyataan, berikut ini ada 41 byte:Cobalah online!
sumber
^
Mathematica,
3530 byteSangat sederhana. Fungsi anonim.
sumber
Retina, 22 byte
Cobalah secara Online
sumber
^
denganm`
, agar berfungsi untuk input multi-jalur, yang tidak perlu untuk pertanyaan, namun buat pengujian lebih mudah.JavaScript, 38 byte
Gunakan no-delimiter
0
atau1
bukannyafalse
/true
sumber
split` `
sebagai gantisplit(" ")
+('0b'+prompt())
sebagai gantiparseInt(prompt(),2)
Caché ObjectScript , 27 byte
sumber
ArnoldC , 423 byte
Karena ArnoldC tampaknya tidak memiliki input formal, ubah saja 2
YOU SET US UP
nilai pertama menjadi 0 atau 1.Penjelasan
Ini hanya sejumlah pernyataan bersyarat yang menjelaskan semua kemungkinan hasil. Kenapa, Anda mungkin bertanya? Nah, ArnoldC tidak benar-benar memiliki pemahaman string. Itu bahkan tidak bisa menyatukan string! Akibatnya, kita harus menggunakan metode yang lebih ... tidak efisien ....
sumber
Java, 28 byte
Ketel yang sama dengan banyak jawaban. jenisnya
BiFunction<Boolean,Boolean, String>
.sumber
(c,d)->
bisa di-golf dengan 1 bytec->d->
ketika Anda menggunakan ajava.util.function.Function<Boolean, java.util.function.Function<Boolean, String>>
.Pyth, 21 byte
Coba di sini!
Input diambil sebagai 0 atau 1 bukannya benar / salah sementara C1 yang lebih dulu.
Penjelasan
Hanya menggunakan fakta bahwa hanya ada 4 hasil yang mungkin. Bekerja dengan menginterpretasikan input sebagai biner, mengubahnya menjadi basis 10 dan menggunakan ini untuk memilih hasil yang tepat dari string pencarian.
sumber
Y , 20 byte
Dalam hal input pertama adalah satu, hanya satu input yang diambil. Saya berasumsi bahwa perilaku ini diperbolehkan. Coba di sini!
Tidak Disatukan:
Dijelaskan:
Ini mendorong karakter
B
kemudianA
ke tumpukan.Ini mengambil satu input, menambahkannya, mengeluarkannya, dan bergerak melewati jumlah bagian itu.
Kasus 1:
j1 = 0
. Ini yang lebih menarik.r$
membalikkan tumpukan dan muncul nilai,'C'E
mendorong karakterC
danE
.@
dikonversiE
ke numeric counterpart, kurangi input kedua dari itu, dan ubah menjadi karakter.r
un-membalikkan tumpukan. Kemudian, program melihat C-link dan pindah ke tautan berikutnyap
, dan mencetak tumpukan.Kasus 2: program pindah ke tautan terakhir
p
, yang hanya mencetak seluruh tumpukan.sumber
PowerShell, 40 byte
Array bersarang diindeks oleh input. Di PowerShell,
$true
/1
dan$false
/0
secara praktis sama (berkat typecasting yang sangat longgar), sehingga indeks dengan baik menjadi array dua elemen. Ini benar-benar sedekat dengan ternary seperti PowerShell dapatkan, dan saya telah menggunakannya berkali-kali dalam bermain golf.Contohnya
sumber
K, 37 byte
sumber
Vitsy , 26 byte
Diharapkan input sebagai 1s atau 0s melalui STDIN dengan pemisahan baris baru.
Saya benar-benar menemukan masalah serius dengan pernyataan if selama tantangan ini. D: Ini diposting dengan versi yang rusak, tetapi berfungsi dengan baik. (Saya akan memperbarui ini setelah saya memperbaiki masalah)Harap dicatat bahwa saya telah memperbarui Vitsy dengan perbaikan jika / jika tidak. Perubahan ini tidak memberi saya keuntungan apa pun, hanya klarifikasi.Penjelasan:
Cobalah secara Online!
sumber
lilin lebah , 26 byte
Menafsirkan
0
sebagai salah,1
sebagai benar.Keluaran:
Kloning juru lilin lebah saya dari repositori Github saya .
sumber
C,
4745 byteKarena hanya ada 3 hasil yang berbeda, kita dapat memilih satu dari tiga string seperti ini:
Terima kasih kepada Herman L untuk 2 byte
Demo
sumber
char*f(c,d){return"AB\0 ACE\0ACD"+(!c<<d+2);}
Perl, 23 byte
Membutuhkan
-E
|-M5.010
tandai dan ambil input sebagai 1 dan 0:Solusi alternatif yang membutuhkan
-p
dan 22 + 1 = 23 byte:sumber
say-<>?AB:-<>?ACD:ACE
lebih pendek dua byte.05AB1E ,
2320 byteKode:
Cobalah online!
sumber
i„ABë„AC69I-çJ
Coba online atau verifikasi semua test case .I
. ; pJapt, 19 byte
Uji secara online!
Fakta menyenangkan: Ini akan menjadi 16 byte jika bukan karena bug:
sumber