Tantangan
Tugas Anda adalah menampilkan waktu (dalam waktu 12 jam) dalam ascii art.
Semua karakter yang akan digunakan adalah sebagai berikut:
___ __ ___ ____ _ _ _____ __ ______
/ _ \ /_ | |__ \ |___ \ | || | | ____| / / |____ |
| | | | | | ) | __) | | || |_ | |__ / /_ / /
| | | | | | / / |__ < |__ _| |___ \ | '_ \ / /
| |_| | | | / /_ ___) | | | ___) | | (_) | / /
\___/ |_| |____| |____/ |_| |____/ \___/ /_/
___ ___
/ _ \ / _ \ _
| (_) | | (_) | __ _ _ __ _ __ _ __ (_)
> _ < \__, | / _` | ' \ | '_ \ ' \ _
| (_) | / / \__,_|_|_|_| | .__/_|_|_| (_)
\___/ /_/ |_|
(Untuk setiap angka / simbol secara individual, lihat intisari ini ).
Anda akan menerima input dalam larik formulir:
[hours, minutes, 'am/pm']
. Sebagai contoh,,[4, 57, 'am']
dengan tanda kutip tunggal hanya digunakan untuk am / pm- atau
"hours-minutes-am/pm"
. Sebagai contoh,"4-56-am"
- atau
[hours, 'minutes', 'am/pm']
untuk bahasa yang tidak bisa menangani angka nol di depan dalam angka. Sebagai contoh,[4, '07', 'am']
Anda dapat menggunakan salah satu metode input.
Output akan dalam bentuk 1 2 : 5 9 am
, di mana ada satu ruang awal, dua ruang antara setiap angka (dalam inti, setiap angka sudah memiliki satu ruang di setiap sisi), satu ruang antara: (titik dua) dan angka tetangga, dan satu ruang antara nomor terakhir dan am/pm
, dengan baris opsional awal dan / atau tambahan. Semua spasi berada di antara titik paling kanan dari simbol di sebelah kiri dan titik paling kiri dari simbol di sebelah kanan.
Output tersirat diizinkan.
Ukuran byte terendah menang.
The am/pm
harus selaras sehingga bagian bawah p
di pm
sejajar dengan bagian bawah sisa output, yaitu, undercore yang menunjukkan bagian atas am/pm
dimulai pada baris bawah ketiga (tidak termasuk baris baru terkemuka).
Tanda titik dua harus disejajarkan sehingga karakter pertamanya (garis bawah) dimulai pada baris kedua ke bawah (tidak termasuk baris baru yang memimpin).
Sebab minutes < 10
, output menit dengan yang memimpin 0
(Anda harus menerima ini di input). Misalnya, [8, 04, 'pm']
-> 8 : 0 4 pm
.
Anda tidak boleh mengambil data untuk angka-angka dari perpustakaan atau sumber daya eksternal. Semua data harus dimuat dalam program.
Misalnya, untuk input [12, 47, 'am']
, outputnya adalah sebagai berikut:
__ ___ _ _ ______
/_ | |__ \ _ | || | |____ |
| | ) | (_) | || |_ / / __ _ _ __
| | / / _ |__ _| / / / _` | ' \
| | / /_ (_) | | / / \__,_|_|_|_|
|_| |____| |_| /_/
(Jika Anda melihat ada tepi kasus yang Anda tidak dapat memutuskan apa yang harus dilakukan, silakan kirim komentar dan saya akan menambahkannya ke contoh).
Jawaban:
Perl,
592579540522510 byteDi bawah sektor!
Program ini mengharapkan waktu dalam format ke-2 ( "12-34-am" ) sebagai argumen commandline.
Berkomentar:
Perhatikan bahwa karena masalah pengkodean karakter, ketika Anda menempelkan kode di atas dalam file, hasilnya mungkin agak cacat. Jadi, inilah versi golfnya, base-64 yang disandikan. Salin, dan tempel ke
base64 -d > 510.pl
:Inilah font yang saya gunakan. Saya telah memisahkan mesin terbang 12 karakter (ukuran am / pm) untuk pengindeksan mudah.
Font ini adalah 592 byte.
Pendekatan sebelumnya menggunakan beberapa variasi pada kompresi RLE untuk mengurangi ini menjadi 353 byte, dengan biaya kode dekompresi 78 byte.
Pengodean Huffman memampatkan font menjadi 221 byte dengan biaya 154 byte untuk algoritma dekompresi.
sumber
Utilitas Bash + GNU + figlet , 134
Tidak yakin apakah figlet diizinkan atau tidak, tetapi tampaknya memberikan font yang tepat -
big
untuk digit dansmall
untuk:
dan{a,p}m
:Sisanya hanya mendapatkan info yang benar dari
date
dan mengocok formating sekitar sehingga terlihat benar:Figlet dapat diinstal di Ubuntu dengan
sudo apt-get install figlet
.sumber
C ++, 938 Bytes
Versi revisi dengan beberapa kompresi dasar data input: Uji di sini
sumber
Haskell,
932699 byteYay, di bawah 700 byte !!
Agak tidak terserang
Bagaimana itu bekerja
(Ini sebagian besar cara kerja program ungolfed)
clock
mengambil tuple waktu dan mengembalikan string.m
adalah menit saat ini dengan pemimpin0
ditambahkan jika ya<10
.hm
adalah jam dan menit bergabung dengan a:
. Hal terakhir yang dilakukannya adalah mentransposisikan output.Cukup sederhana di sini.
digit
adalah fungsi yang memetakan karakter ke lokasi dalam string yang disimpan.Ini adalah string tersimpan ajaib.
Satu-satunya perubahan nyata antara program golf dan ungolfed adalah bahwa program golf menambahkan beberapa kompresi string dengan mengganti beberapa pola char umum dengan
!@$
. String data asli adalah667
byte, setelah ganti kompresi itu menjadi390
bytesumber
JavaScript (ES6),
994985 byteUpaya mengerikan dengan data mentah tidak dikompresi sama sekali, dan metode yang sangat norak untuk menghasilkan.
Tapi hei ... itu hanya jawaban codegolf kedua saya!
Pengajuan lama (994 bytes) :
Pisahkan menjadi beberapa baris agar lebih mudah dibaca.
Pada dasarnya:
sumber
Python 3,
10851072 byteGolf
Tidak disatukan
sumber