Tulis program atau fungsi yang, diberi bilangan bulat positif sebagai input, menampilkan representasi bilangan bulat itu dalam angka Maya .
Angka Maya
Angka Maya adalah sistem vigesimal (basis 20) hanya menggunakan 3 simbol:
< >
for Zero (Simbol yang benar adalah semacam shell yang tidak dapat dengan mudah direpresentasikan menggunakan ASCII)..
untuk Satu----
untuk Lima
Bilangan ditulis secara vertikal dalam kekuatan 20, dan angka antara 0 dan 19 ditulis sebagai tumpukan balita dan satu . Anda harus merujuk ke artikel Wikipedia untuk lebih jelasnya.
Sebagai contoh, berikut adalah angka antara 0 dan 25, dipisahkan dengan koma:
. .. ... ....
. .. ... .... ---- ---- ---- ---- ---- . . . . . .
. .. ... .... ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
< >, . , .. ,... ,....,----,----,----,----,----,----,----,----,----,----,----,----,----,----,----,< >, . , .. ,... ,....,----
Input
- Input selalu bilangan bulat positif antara 0 dan 2147483647 (2 ^ 31 - 1).
- Anda dapat mengambil input dari STDIN, sebagai argumen baris perintah, parameter fungsi atau yang serupa.
Keluaran
- Setiap baris paling panjang 4 karakter.
< >
dan----
harus selalu dicetak seperti yang diberikan di sini (masing-masing 4 karakter). - Yang (
.
) harus dipusatkan pada garis. Jika ada 1 atau 3.
, karena penyelarasan horizontal sempurna tidak mungkin, tidak masalah apakah mereka satu kolom ke kiri atau satu kolom ke kanan atau tengah. Pasti ada satu garis kosong di antara kekuatan 20 yang berbeda, terlepas dari ketinggian tumpukan di kekuatan 20-an. Misalnya, output yang benar untuk 25 dan 30 adalah:
. . ---- ---- ----
Tidak ada garis depan atau belakang yang diizinkan.
Keluaran harus dicetak persis seperti dalam contoh yang diberikan.
Uji kasus
Setiap angka individual antara 0 dan 25 diberikan seperti contoh di atas.
Memasukkan:
42
Keluaran:
..
..
- Memasukkan:
8000
Keluaran:
.
< >
< >
< >
- Memasukkan:
8080
Keluaran:
.
< >
....
< >
- memasukkan:
123456789
Keluaran:
.
...
----
----
----
.
----
----
..
----
----
.
....
----
----
----
....
----
- Memasukkan:
31415
Keluaran:
...
...
----
----
----
----
----
----
----
----
- Memasukkan:
2147483647
Keluaran:
.
...
----
----
.
----
----
.
----
----
----
....
----
..
..
----
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
sumber
Jawaban:
Pyth, 41 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber
Perl,
125117 byteTerima kasih kepada Dom Hastings karena membantu saya menghemat 8 byte.
sumber
redo,if(int($i/=20))
yang dapat Anda gunakan~~($i/=20)&&redo
.~~
convert to int - Anda juga dapat menggunakan0|
di awal (atau|0
di akhir). Juga menggantisubstr(".... ... .. . ",20-$i%5*5,5)
dengan(' .', ' ..','...','.'x4)[$i%5-1].$/
tampaknya bekerja ok, tapi saya belum menguji semua kasus uji ... Jika mereka yang bekerja, Anda turun ke 114 ... Jika saya memikirkan hal lain untuk berbagi Aku akan memberitahu Anda!$-
yang akan selalu terpotong ke int ... mungkin menyimpan beberapa lagi!JavaScript ES6, 143 byte
Banyak byte yang ditambahkan karena perlu
console.log
, bisa menghemat 23 byte lainnya tanpa itu.sumber
Mathematica
185 182 171153Dengan 18 byte yang disimpan berkat saran Arcinde untuk menggunakan fungsi anonim,
Contoh
Memeriksa
Angka desimal, 31415, dinyatakan dalam basis 20. Mathematica menggunakan huruf kecil untuk ini.
Digit desimal sesuai dengan angka 20 basis di atas.
Contoh lain
sumber
c=Column;c[If[#>0,{q,r}=#~QuotientRemainder~5;c@{{""," ."," .."," ...","...."}[[r+1]],c@{{""},{d="----"},{d,d},{d,d,d}}[[q+1]]},"< >"]&/@#~IntegerDigits~20]&
menggunakan fungsi anonim.JavaScript (ES6), 157 byte
Baris baru signifikan dan dihitung sebagai masing-masing 1 byte. Karena pencetakan ke STDOUT diperlukan,
console.log
saya perlu beberapa byte di sana.Demo
Untuk tujuan demonstrasi, saya akan menulis versi ES5 sehingga berfungsi di semua browser:
sumber
.join
tanda kurung yang terakhir dibutuhkan?Python 2.x, 142 byte:
Contoh:
Edit: trailing line ...
sumber
[n%20==0]
ke[n%20<1]
. Kedua, ubah[[""," "*(2-n%5/2)+"."*(n%5)+"\n"][n%5!=0]
keh=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1]
dengana=n%5
, yang memindahkan semuan%5
s, dan mengubah kondisi*(a>0)
yang mengembalikan string kosong padaa==0
untuk efek yang sama.a
,h
dann
pada satu baris, seperti:a=n%5;h=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1];n/=20
. Semua ini akan membuat Anda dengan 131 byte.CJam,
8276 byteProgram CJam pertama saya, pada dasarnya hanya transliterasi dari jawaban Perl saya ke CJam.
Coba online
Banyak baris dengan komentar:
sumber
PHP, 220 byte
Pendekatan yang sama dengan jawaban JavaScript saya. PHP memiliki fungsi bawaan untuk semuanya.
Mengambil 1 input dari baris perintah (yaitu STDIN), seperti yang terlihat dengan
$argv[1]
:sumber
C - 149
Menggunakan rekursi untuk mencetak angka paling signifikan terlebih dahulu. Kemudian mencetak nol atau mencetak semua titik dengan satu pintar
printf
dan semua balita dalam satu lingkaran. Saya tidak yakin apakah saya bisa menghindari menggunakan if-else di sini.Kelemahan dari printf pintar adalah bahwa 1 dan 3 tidak selaras satu sama lain:
Hasil untuk 23 adalah:
119solusi yang salah - mengikuti baris barusumber
PHP,
202192 byteIa mendapat input dari argumen baris perintah pertama.
Kode sumber lengkap, dengan komentar dan tes, tersedia di github .
sumber
\n
adalah dua karakter - tetapi baris baru di tengah-tengah string hanya satu.Python 2, 114 byte
Jawaban ini didasarkan pada jawaban Pyth Jakube dan jawaban Python 2 Locoluis.
sumber
Jelly ,
504947 byteCobalah online!
...
sekarang dibiarkan selaras berkat poin user202729.Ketika Anda menipu diri sendiri untuk berpikir
< >
adalah palindrom ...sumber
...
....
dan..
perlu ada ruang jadi saya menempatkan satu...
juga. Apakah ada cara yang lebih pendek?...
tidak boleh sejajar dengan benar. Ubah saja<4
ke<3
?