Saya telah merancang font baru yang saya sebut PrettyFont. Saya telah meluangkan banyak waktu untuk menyempurnakannya, tetapi karena saya seorang pekerja, saya tidak punya waktu untuk menyelesaikannya. Karena itu hanya berisi 4 karakter sekarang. Suatu hari ketika saya menjadi kaya itu akan menjadi tujuan seumur hidup saya untuk menyelesaikannya, tetapi untuk saat ini ...
Ini PrettyFont: (0, 1, 2, 3)
#### ## #### ####
# # # # # #
# # # # ###
# # # # #
#### ### #### ####
Setiap karakter memiliki lebar 4 piksel dan tinggi 5 piksel. Sekarang! Saya ingin Anda menulis saya sebuah program yang menampilkan nomor di PrettyFont sehingga saya dapat mulai mengirim desain untuk dicetak.
Aturan:
Input adalah nomor string dalam basis 4 (hanya karakter 0-3), misalnya "01321". Program harus dapat menangani setidaknya 10 karakter dalam string. Poin BONUS diberikan kepada program yang mengambil basis 10 integer yang sebenarnya, bukan string. Klarifikasi EDIT : bonus integer berarti bahwa seseorang dapat memasukkan nomor basis 10, seperti 54321, dan program akan mengubahnya menjadi basis 4 dan menghasilkannya (dalam hal ini 31100301).
Outputnya akan menjadi angka yang dicetak dengan PrettyFont. Contoh input dan output:
> "321"
####
#
###
#
####
####
# #
#
#
####
##
#
#
#
###
Bonus besar untuk program yang dapat menampilkannya dalam mode baris tunggal seperti ini:
> "321"
#### #### ##
# # # #
### # #
# # #
#### #### ###
Karakter '#' bukan keharusan, dan dapat digantikan oleh karakter apa pun.
Dalam output vertikal, baris kosong diperlukan antara setiap karakter PrettyFont. Jika ada yang membuat output horizontal, satu karakter spasi putih '' atau karakter tab diperlukan di antara setiap karakter PrettyFont.
Ini golf kode, kode terpendek menang! (Saya membutuhkannya pendek karena komputer kantor saya memiliki penyimpanan terbatas.)
banner -c '#' 0123
Jawaban:
k (
118 117 72 71 6966 karakter)Saya belum melakukan banyak upaya untuk bermain golf initetapi itu mencapai output horizontal yang diinginkan dalam karakter yang tidak terlalu banyak:Mengambil input dari stdin, mencetak output ke stdout.
sunting: Dengan menerapkan bentuk kompresi pada output "bitmap", saya telah menguranginya menjadi 72. Bitmap sekarang dibangun dengan mengubah int 64bit ke biner dan memetakan 0s dan 1s menjadi "#" atau "".
Saya bisa melakukannya dari hex seperti beberapa solusi lain tetapi saya pikir ini akan berakhir lebih lama. Ternyata hex lebih baik.Output sampel untuk 012301:
// edit: -6 char
sumber
Python3 (124)
Maaf, vertikal tidak menarik bagi saya.
sumber
J,
848281807569 karakterMengambil input dari keyboard:
Angka ajaib FTW (atau untuk tempat kedua dalam kasus ini) :-)
sumber
#:
tampaknya tidak berhasil untuk ukuran angka itu.#:1166416635908028473935870
dan#:1166416635908028473931775
keduanya memberikan jawaban yang sama untuk saya.C -
164151 karakter horisontalDi IDEone: http://ideone.com/gljc3
Kode (164 byte):
EDIT - 151 byte
Saya menambahkan saran dari komentar dan kemudian beberapa. Itu tidak sepenuhnya aman (0-length array yang saya
gets()
masuki ...) sekalipun.Catatan,
i=puts("")
adalah perilaku yang tidak terdefinisi karena saya memperlakukanvoid
sebagaiint
! Secara konsisten kembali0
pada versi saya MinGW, tetapi kembali1
pada penggunaan IDEOne kompiler.Menerima desimal, basis output 4 (167 byte)
sumber
gets
dalamfor
(simpan 1). Pindahputs
kefor
selisih eksternal dan simpan kawat gigi. Simpan paranthesis:(n[i]-48)*5+j
->n[i]*5-240+j
, trik yang sama dengan+4*(..
.Ruby, 0123 karakter + bonus ([0123] vs '#')
Contoh:
EDIT: Ruby, 87 karakter
sumber
Rubi
Vertikal: 116 karakter
Contoh dijalankan:
Horisontal:
150148 karakterContoh dijalankan:
sumber
Mathematica
174145139118119123 karakterSekarang berfungsi dengan input pada basis 10 (bonus Integer). Versi sebelumnya dapat ditemukan dalam suntingan.
Menggunakan ArrayPlot :
Dengan
ArrayPlot
kita dapat secara langsung mengkonversi 1 dan 0 ke kotak hitam dan putih, menghemat beberapa karakter dalam proses. Misalnya, dengan n = 58021, yaitu 32022211 pada basis 4:Penjelasan
Input adalah parameter program
n
,.Nol dapat diwakili oleh
{{1,1,1,1},{1,0,0,1},{1,0,0,1},{1,0,0,1},{1,1,1,1}
atau oleh mitra hexf999f
.Ekspresi,,
f999f62227f924ff171f
menyimpan informasi untuk menampilkan semua angka {0,1,2,3}. (Catatan: dimulai denganf999f
, yang seperti yang kita catat, adalah nol dalam penyamaran.) Karena Mathematica tidak mengenali ini sebagai angka, saya menggunakan89998622278924881718
(dalam empat string bilangan bulat) sebagai gantinya, memecah angka menjadi angka integernya, dan kemudian menggunakan 15 di setiap tempat 8 muncul. (Itu memungkinkan saya menggunakan angka alih-alih string.)sumber
Mathematica ,
112107103Pandangan saya tentang metode David.
105 dengan BONUS:
(untuk
n = 54321
)sumber
APL (
5857)Keluaran:
sumber
Python 2.7
Vertikal 160
Horisontal
234216Keduanya mengambil input sebagai string yang dikutip pada stdin
contoh:
$. / cantik
"0123"
sumber