Beberapa latar belakang
Batang penghitung adalah batang kecil (panjang 3-14 cm) yang digunakan oleh matematikawan dari banyak budaya Asia selama lebih dari 2000 tahun untuk mewakili bilangan atau fraksi utuh. (Dalam chqllenge ini kita akan fokus pada bilangan bulat yang tidak ditandai) Ada juga versi tertulis, yang disebut angka batang.
Begini cara kerjanya:
(Jika suatu saat Anda bingung, periksalah representasi ascii dari setiap digit dan beberapa contoh yang saya sertakan di bagian bawah)
Angka batang adalah sistem angka posisi yang benar dengan digit untuk 1-9 dan kosong untuk 0. Digit terdiri dari garis horizontal dan vertikal; semakin banyak garis, semakin tinggi angkanya. Setelah Anda melewati lima, Anda meletakkan garis horizontal di atas untuk menambahkan 5 ke jumlah baris di bawah ini. Satu garis vertikal adalah 1, dua garis vertikal 2, lima garis vertikal 5, satu garis vertikal dengan garis horizontal di atas adalah 6, empat garis vertikal dengan garis horizontal di atas adalah 9 (angka tertinggi).
3 digit vertikal:
|||
|||
|||
|||
|||
Untuk membuat angka batang baca lebih mudah, mereka menggunakan notasi yang berbeda untuk setiap digit bolak-balik. Notasi kedua menukar peran garis horizontal dan vertikal. sehingga 3 diwakili oleh tiga garis horizontal dan 8 oleh tiga garis horizontal dengan garis vertikal di atas.
8 digit horizontal:
|
|
__|__
_____
_____
Mengetahui notasi mana yang digunakan adalah mudah, seperti yang dikatakan sebelumnya, tehy digunakan secara bergantian dan Sun Tzu menulis bahwa "satu adalah vertikal, sepuluh adalah horisontal". Jadi digit paling kanan adalah vertikal dan kami berganti dari sana.
Tantangan
Batang ini digunakan untuk mewakili bilangan dan fraksi negatif (seperti yang dijelaskan dalam artikel wikipedia tentang mereka . Untuk tujuan tantangan ini kita hanya akan fokus pada bilangan bulat positif. Tujuannya sederhana:
Tulis fungsi atau program lengkap yang mengambil nilai integer sebagai input dengan cara apa pun dan mencetak representasi bilangan batang dari integer ini ke STDOUT (Anda juga dapat menulis ke file jika itu berfungsi lebih baik). Kode terpendek dalam byte menang.
Setiap digit akan diwakili oleh karakter ascii 5x5 dan dipisahkan oleh dua kolom 5 ruang. Representasi persis yang akan Anda gunakan untuk setiap digit adalah sebagai berikut:
space between two digits (two colums):
0 digit, both vertical and horizontal (five columns):
1 digit, vertical:
|
|
|
|
|
2 digit, vertical:
| |
| |
| |
| |
| |
3 digit, vertical:
|||
|||
|||
|||
|||
4 digit, vertical:
|| ||
|| ||
|| ||
|| ||
|| ||
5 digit, vertical:
|||||
|||||
|||||
|||||
|||||
6 digit, vertical:
_____
|
|
|
|
7 digit, vertical:
_____
| |
| |
| |
| |
8 digit, vertical:
_____
|||
|||
|||
|||
9 digit, vertical:
_____
|| ||
|| ||
|| ||
|| ||
1 digit, horizontal:
_____
2 digit, horizontal:
_____
_____
3 digit, horizontal:
_____
_____
_____
4 digit, horizontal:
_____
_____
_____
_____
5 digit, horizontal:
_____
_____
_____
_____
_____
6 digit, horizontal:
|
|
|
|
__|__
7 digit, horizontal:
|
|
|
__|__
_____
8 digit, horizontal:
|
|
__|__
_____
_____
9 digit, horizontal:
|
__|__
_____
_____
_____
Angka-angka harus dicetak bersebelahan. Spasi di luar kotak pembatas dari digit terakhir tidak diperbolehkan. Dibutuhkan spasi tambahan untuk melengkapi kotak pembatas dari digit terakhir. Anda harus mengakhiri output dengan satu baris baru. Ruang terkemuka yang bukan milik kotak pembatas dari digit pertama juga dilarang.
Contoh output
Baris yang dimulai dengan >
harus ditafsirkan sebagai input.
>12
| |
| |
| |
| |
_____ | |
>8037
| _____
| | |
__|__ _____ | |
_____ _____ | |
_____ _____ | |
>950
_____ _____
|| || _____
|| || _____
|| || _____
|| || _____