Seseorang membuat jam yang benar-benar mewah menggunakan angka Fibonacci, yang terlihat sangat bagus tetapi tidak bisa digunakan. Seperti kita menyukainya! Mari kita buat ulang ini.
Jam terdiri dari 5 bagian yang sesuai dengan lima angka Fibonacci pertama, mulai dari 1 (yaitu 1, 1, 2, 3, 5):
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
Jam ini mampu menampilkan waktu 12 jam dengan peningkatan 5 menit. Inilah cara kerjanya. Pertimbangkan waktu 7:20. Jam 7 dapat didekomposisi menjadi angka-angka Fibonacci yang diberikan sebagai
7 = 2 + 5
Ada juga 4 unit lima menit. 4 dapat didekomposisi sebagai
4 = 2 + 1 + 1
Sekarang jam ditampilkan dalam warna merah, menit memotong hijau, dan jika angka digunakan untuk jam dan menit, itu ditunjukkan dengan warna biru. Jika angka tidak digunakan sama sekali, itu tetap putih. Jadi di atas akan ditampilkan sebagai:
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
Tapi tunggu, masih ada lagi. Dekomposisi di atas bukan satu-satunya kemungkinan. Satu juga dapat menulis 7 = 3 + 2 + 1 + 1
dan 4 = 3 + 1
, yang akan memberikan satu
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
tergantung yang mana 1
dipilih. Tentu saja ada kombinasi lain juga. Jam memilih dari semua penguraian yang valid secara acak.
Seperti yang saya katakan ... ini mungkin tidak memenangkan penghargaan kegunaan, tapi itu bagus untuk dilihat.
Tantangan
Tugas Anda adalah mengimplementasikan jam seperti itu. Program Anda (atau fungsi) harus mencetak representasi ASCII dari waktu saat ini (dibulatkan ke kelipatan 5 menit terakhir) seperti yang dijelaskan di atas untuk STDOUT atau alternatif terdekat. Anda dapat memilih untuk membaca waktu dalam format umum apa pun sebagai input atau mendapatkannya dengan fungsi perpustakaan standar. Anda tidak boleh berasumsi bahwa waktu saat ini / waktu yang diberikan dapat dibagi 5 menit.
Solusi Anda harus memilih secara acak dari semua kemungkinan representasi waktu saat ini. Yaitu setiap representasi harus dicetak dengan probabilitas bukan nol.
Tengah malam dan siang hari harus diperlakukan 0:00
(berbeda dengan 12:00
).
Anda dapat mencetak satu karakter trailing baris baru.
Anda dapat menggunakan empat karakter ASCII yang dapat dicetak yang berbeda (kode karakter 0x20 hingga 0xFE) sebagai pengganti RGBW
. Silakan sebutkan pilihan Anda dalam jawaban Anda dan gunakan secara konsisten.
Ini kode golf, jadi jawaban tersingkat (dalam byte) menang.
Jawaban:
CJam, 61 byte
Mengambil dua bilangan bulat yang dipisahkan ruang melalui STDIN, dan menggunakan masing
3.14
-WRGB
masing. Cobalah online .Ini adalah versi "waras"
RGBW
untuk beberapa byte tambahan:Penjelasan
Algoritma ini sama dengan jawaban Python saya - sampel penolakan dengan menghasilkan jam sampai kami mendapatkan yang benar.
sumber
Python 2,
194182 byteAlgoritma ini hanya pengambilan sampel penolakan, sehingga terus menghasilkan jam sampai mendapatkan yang benar. Jam ini dibangun dengan memulai dari nol, lalu melakukan "tambahkan kotak di atas dan putar searah jarum jam" 5 kali.
Membawa dua bilangan bulat yang dipisahkan koma melalui STDIN.
sumber
Python 2, 421 byte
Ugh, saya yakin ini bisa bermain golf lebih banyak.
Kasus cobaan:
sumber
Ruby, 286 byte
Mungkin golf, tetapi akan mencoba waktu lain.
Penjelasan:
sumber
(0..5).to_a
dengan[*0..5]