Saya dapat memiliki if/else
kondisi besar untuk setiap 30 menit tetapi saya mencari lebih banyak solusi berbasis matematika dan Unicode.
Berikut ini adalah emoji jam: 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟🕠🕡🕢🕣🕤🕥🕦🕧. Jika Anda tidak memiliki dukungan render yang tepat, Anda dapat melihatnya di bawah (mereka tidak berada dalam urutan yang sama dan mereka mungkin terlihat berbeda dengan apa yang Anda lihat) atau pada grafik Unicode , halaman 4. Mereka berhubungan dengan Unicode codepoints U + 1F550 (CLOCK FACE ONE OCLOCK) hingga U + 1F567 (CLOCK FACE TWELVE-THIRTY).
Tantangan Anda adalah menulis sebuah program yang menghasilkan STDOUT emoji jam wajah terdekat dengan waktu sistem saat ini (AM dan PM harus diperlakukan sama). Misalnya jika waktunya t
adalah [5:15 <t <5:45), Anda akan menampilkan emoji 5:30 🕠.
Ini adalah kode-golf, jadi kode terpendek dalam byte menang. Anda mungkin ingin memasukkan cara untuk dengan mudah menentukan waktu untuk menguji kode Anda.
Kasus uji tepi
Time Output Written
----------------------
11:48 🕛 12:00
3:15 🕞 3:30
9:45 🕙 10:00
Jawaban:
Ruby -
6154 bytePython 3 - 79 77 75 74 bytesunting: Ternyata ini jauh lebih pendek di Ruby, karena
Time
tidak perlu diimpor dan pembagian integer adalah default.Hitung:
Time.now.to_i
: Detik sejak zaman./900
: Gabungkan waktu menjadi segmen 15 menit.-3
:-4
karena karakter dimulai pada jam 1,+1
sehingga pembulatan dilakukan ke setengah jam terdekat, bukan ke bawah./2
: Gabungkan menjadi segmen setengah jam.%24
: Dapatkan segmen setengah jam saat ini dari 12 jam.a/2 + a%2*12
: Akun untuk fakta bahwa karakter sepanjang jam datang dalam satu blok sebelum karakter setengah jam.Versi waktu lokal, 69 byte:
Versi Python 3 asli:
Mencetak waktu sekarang UTC. Python 2
chr
hanya menerima 0-255, danunichr
hanya 0-65535. Dalam Python 3,/
selalu divisi floating-point dan//
selalu divisi integer.sumber
12*(a%2)
jika Anda melakukannya dalam urutan lain:a%2*12
.Bash + Coreutils, 60 byte
Emoji membuat baik-baik saja di terminal OSX, tetapi untuk Linux (Ubuntu 14.04) Anda harus melakukannya
sudo apt-get install ttf-ancient-fonts
Untuk menguji waktu yang berbeda, masukkan
-d $time
ke perintah tanggal. misalnya untuk pengujian 12:59:sumber
JavaScript -
13711710710295Ini akan mudah dikalahkan, tetapi saya akan mencoba yang terbaik di sini.
EDIT 1 : Sekarang mencetak dalam UTC seperti jawaban Python untuk menyimpan 20 byte.
EDIT 2: Berubah
new Date().getTime()
untukDate.now()
menyimpan 10 byte.EDIT 3: Berubah
Math.round(x)
untuk~~(x+.5)
menyimpan 5 byte.EDIT 4: Dihapus tidak perlu
(
dan&1023)
ditinggalkan dari beberapa versi pengembangan lama di mana saya melakukan pengkodean UTF-16 yang lebih universal untuk menghemat 7 byte.JavaScript memang memungkinkan untuk emoji, tetapi dalam UTF-16 yang menyandikannya sebagai dua karakter. Untungnya, kita bisa mendefinisikannya sebagai dua karakter; karakter pertama juga konstan (
0xD83D
), sedangkan yang lainnya berubah.Alternatif, mencetak dalam waktu lokal,
137132125:Tampilkan cuplikan kode
sumber
(d%2?23+d:d)
sama dengand+d%2*23
?CJam, 50 byte
Algoritma ini sederhana, bulatkan waktu ke 30 menit terdekat, hitung berapa banyak 30 menit telah berlalu sejak jam 12 pagi / malam, jika angkanya ganjil, kemudian tambahkan 24 ke dalamnya, pisahkan dengan 2 dan pertambahan kode awal dengan jumlah sebanyak itu poin kode untuk mendapatkan tampilan jam yang tepat.
Juga, pastikan Anda mulai dengan 1 AM / PM bukannya 12 jadi ambil offset di sana.
Untuk tujuan pengujian, gunakan kode berikut:
Di mana
3:H;
bagiannya adalah jam saat ini dan45:M;
bagian adalah menit saat ini dari jam tersebut. Cukup ganti3
dan45
dengan nilai yang diinginkan.Cobalah online di sini
Tidak semua karakter unicode dapat mencetak dengan benar pada versi online tergantung pada browser Anda dan OS dan font yang diinstal. Tapi bagi saya, semua cetak bagus di Firefox dengan Windows 7.
sumber
CJam, 31 byte
Anda dapat mengubah waktu di program berikut untuk mengujinya:
sumber