Harian WTF hari ini mengutip baris kode berikut ...
FailSafe==0?'No technical alarms':((FailSafe&1)!=0&&(FailSafe&2)!=0&&(FailSafe&4)!=0&&(FailSafe&8)!=0?'Detection zones staying in a given state; Bad visibility;
Initialization; Bad configuration':((FailSafe&1)!=0&&(FailSafe&2)!=0&&(FailSafe&4)!=0?'Detection zones staying in a given state; Bad visibility; Initialization':
((FailSafe&1)!=0&&(FailSafe&2)!=0&&(FailSafe&8)!=0?'Detection zones staying in a given state; Bad visibility; Bad configuration':((FailSafe&1)!=0&&(FailSafe&4)!=0&&
(FailSafe&8)!=0?'Detection zones staying in a given state; Initialization; Bad configuration':((FailSafe&2)!=0&&(FailSafe&4)!=0&&(FailSafe&8)!=0?'Bad visibility;
Initialization; Bad configuration':((FailSafe&1)!=0&&(FailSafe&2)!=0?'Detection zones staying in a given state; Bad visibility':((FailSafe&1)!=0&&(FailSafe&4)!=0?'Detection
zones staying in a given state; Initialization':((FailSafe&1)!=0&&(FailSafe&8)!=0?'Detection zones staying in a given state; Bad configuration':((FailSafe&2)!=0&&
(FailSafe&4)!=0?'Bad visibility; Initialization':((FailSafe&2)!=0&&(FailSafe&8)!=0?'Bad visibility; Bad configuration':((FailSafe&4)!=0&&(FailSafe&8)!=0?'Initialization; Bad
configuration':((FailSafe&1)!=0?'Detection zones staying in a given state':((FailSafe&2)!=0?'Bad visibility':((FailSafe&4)!=0?'Initialization':((FailSafe&8)!=0?'Bad
configuration':'Unknown')))))))))))))))
Tulis beberapa kode yang mengambil nilai integer bernama FailSafe dan mengembalikan string yang sama yang akan dihasilkan oleh kode di atas dari nilai integer yang sama.
- Tantangannya adalah menulis ulang baris itu, jadi kode "boilerplate" gratis, termasuk kode apa pun yang memuat nilai integer dan menghasilkan string. Hanya kode yang melakukan transformasi di atas dari integer ke string yang diperhitungkan.
- Anda dapat menggunakan nama lain untuk "FailSafe" jika Anda mau, asalkan pengidentifikasi yang Anda pilih memiliki skor golf yang sama.
- Tidak memanggil sumber daya eksternal untuk melakukan pencarian.
- Aturan kode-golf normal berlaku.
f=FailSafe
atau sesuatu seperti itu)?Jawaban:
Ruby, 210 karakter
Mirip dengan solusi @Jan Dvorak tetapi sedikit lebih fungsional dan sedikit lebih pendek.
sumber
GolfScript, 167 karakter
Kode mengasumsikan nilai dalam variabel
FailSafe
dan mendorong hasilnya pada stack (yaitu output string jika dijalankan sebagai program mandiri). Anda dapat menguji kode secara online .Kode ini pada dasarnya menghasilkan array dari semua 16 hasil yang mungkin, memilih pesan kesalahan tergantung pada empat bit terendah
FailSafe
. Yang terluarif
kemudian menangani kotak nol.sumber
or
bukannyaif
akan menyelamatkan Anda.
. Tetapi saya akui bahwa saya belum mencoba menguraikan kode asli.Rebol / Merah: 208 karakter
Saya tidak tertarik bermain golf ini seperti dalam menyetujui bahwa operator ternary bersarang menjengkelkan ... dan menyebutkan ini sebenarnya adalah sebuah contoh yang bagus untuk Rebol / Red KASUS . Ini terkait dengan SWITCH dan sangat membantu meratakan hal-hal seperti ini:
Ada varian yang disebut KASUS / SEMUA yang benar-benar akan menjalankan semua kondisi, tetapi default hanya berhenti setelah yang benar pertama.
Saya akan "bermain golf" sedikit ke 208:
sumber
APL (172)
Penjelasan:
{
...}FailSafe
: menghasilkan string⍵=0:⊂'No technical alarms'
:0
kasusnya0=16|⍵:⊂'Unknown'
:Unknown
case (FailSafe bukan 0 tetapi empat bit pertama adalah)'Detection zones staying in a given state' 'Bad visibility' 'Initialization' 'Bad configuration'/⍨⌽⍵⊤⍨4/2
: dapatkan 4 bit terendah dalam argumen (⍵⊤⍨4/2
), mundur (⌽
), dan pilih string untuk bit yang ada di (/⍨
).'; '∘,¨
: tambahkan'; '
ke depan setiap string yang dikembalikan,⊃,/
: gabungkan semua string,2↓
: dan hapus dua karakter pertama (karena ada tambahan'; '
di bagian depan.)sumber
⊃,/
ke∊
.Ruby, 183 karakter
Namun solusi Ruby lain, tetapi sedikit lebih pendek dari yang lain. Ini adalah ekspresi tunggal yang menggunakan konstanta
FailSafe
(dalam Ruby, semua pengidentifikasi huruf besar adalah konstanta) untuk membuat string keluaran.sumber
FailSafe
) sebelum menggunakan. Dan Anda meningkatkan kodeuninitialized constant FailSafe
FailSafe
sudah didefinisikan. Saat Anda ingin menjalankan kode, Anda harus menentukan sendiri konstanta terlebih dahulu.JavaScript,
197195 karakterdiformat:
Lebih lanjut dapat dikurangi dengan menggunakan ekspresi fungsi ES6 atau Coffeescript.
sumber
"Bad visibility"
karena 2-bit diatur dan tidak ada yang lebih rendah dari 4 bit lainnya. TheUnknown
kasus yang terjadi ketika tidak ada satu pun yang lebih rendah 4 bit diatur, tetapiFailSafe
adalah!= 0
- seperti dalam kode asli (coba dengan16
). Apakah kita harus "memperbaiki" ini, Anda harus bertanya kepada OP (dalam komentar pada pertanyaan), bukan saya ...Ruby, 213 karakter
Ini akan bekerja dengan baik dibungkus dengan fungsi body (
def transform failSafe; ...; end
). Itu juga dapat digunakan sebagai ekspresi tunggal (membungkus tanda kurung karena tanda titik koma / baris baru memiliki prioritas terendah) atau sebagai urutan pernyataan dengan ekspresi terakhir (e.join"; "
) yang digunakan dalam ekspresi.sumber
e+=["Initialization"]if f&4>3
Saya ingin ini dengan Python.[]||=
?since FailSafe must be a constant in Ruby
Hah. Sikap Python lebih seperti "Ya, Anda dapat memecahkan barang-barang, tetapi jangan berharap saya untuk membersihkan kekacauan"||=
seperti+=
tetapi dengan||
-a ||= b
sama dengana = a || b
. Ini biasanya digunakan untuk default variabel ketika itu palsu.VBScript,
204 234232 karakter(sunting: peningkatan skor 2 dengan menggunakan array () alih-alih split (). 232 sekarang.)
(edit: lupa bagian "tidak dikenal". 234 karakter sekarang.)
f = failafe: for b = 0to 3: s = s & split (",; Zona deteksi tetap dalam keadaan tertentu,; Visibilitas buruk ,,; Inisialisasi ,,,,; Konfigurasi buruk", ",") (f dan 2 ^ b): selanjutnya: split ("Tidak ada alarm teknis, Tidak Dikenal," & pertengahan (s, 3), ",") (2+ (f = 0) + (len (s) = 0))(asli, 230)
untuk b = 0 hingga 3: s = s & split (",; Zona deteksi tetap dalam keadaan tertentu,; Visibilitas buruk ,,; Inisialisasi ,,,,; Konfigurasi buruk", ",") (FailSafe dan 2 ^ b): berikutnya : array (mid (s, 3), "Tidak ada alarm teknis") (- (len (s) = 0))Tentu saja, ini hanya bagian dari naskah. untuk mengujinya, coba sesuatu seperti ini:
sumber
Smalltalk, 243 karakter
diformat untuk dibaca:
Terima kasih kepada Bergi, karena menunjuk bug di versi pertama.
Ini memunculkan ide: jika saya memetakan nilai FailSafe ke dalam topeng 6-bit, (pemetaan 0 -> 16 dan lebih besar dari 15 -> 32), saya dapat menyingkirkan tes akhir. Pemetaan ke topeng 6bit m dapat dilakukan dengan:
m := {16},(1 to: 15) at:FailSafe+1 ifAbsent:32.
yaitu, m akan menjadi 16 untuk FailSafe nol, dan 32 untuk nilai di luar batas. Kemudian pilih dan kumpulkan string seperti di atas. Ini memberikan kode baru:
(Saya juga mengganti asStringWith: by joinWithAll :, yang merupakan alias).
Meskipun ini tampaknya ide yang bagus, ini memiliki jumlah karakter yang sama - desah. Mungkin beberapa bahasa pemrograman lain dengan skor nama operator yang lebih baik di sini!
Saya bisa menyimpan beberapa karakter dengan tidak menggunakan variabel sementara untuk m, tetapi menghitung ulang dalam loop dan dengan tidak menggunakan array literal untuk vektor string, untuk mendapatkan hitungan sedikit di bawah 240 karakter.
Akhirnya, mask m juga bisa dihitung dengan
m:={32},(1 to: 16) at:(FailSafe+1 min:17)
, yang mungkin lebih pendek di APL. Kemudian tukar dua string terakhir dalam vektor.PS: Versi pertama menganggap FailSafe adalah non-negatif, seperti beberapa solusi lain di sini. Yang kedua dapat menangani apa saja, bahkan nil atau non-angka lainnya.
sumber
Unknown
konfigurasi?CoffeeScript,
161 160221 karaktersumber
Unknown
danNo technical alarms
?VB.net
Edit: Entri Lebih Baik
sumber
Perl,
208197 KarakterDengan kode boilerplate untuk membuatnya berfungsi:
sumber
Java 275 karakter (tidak termasuk spasi putih yang tidak perlu )
sumber