The cheela (dari buku Dragon Egg oleh Robert L. Forward) adalah makhluk yang hidup di permukaan bintang neutron. Tubuh mereka datar dan bundar dengan dua belas mata di sekeliling, sehingga mereka secara alami menggunakan sistem penomoran basis-12.
Di antara orang-orang Cheela, merawat anak-anak dan pendidikan anak-anak muda adalah tugas-tugas yang dilakukan oleh Yang Lama. Karena Cheela muda perlu diajarkan cara melipatgandakan, Orang Tua bisa menggunakan tabel perkalian.
Tugas Anda adalah untuk menghasilkan tabel perkalian 12
x 12
di basis 12
, seperti berikut ini. Huruf besar A
dan B
digunakan untuk digit yang sesuai dengan desimal 10
dan 11
masing - masing.
1 2 3 4 5 6 7 8 9 A B 10
2 4 6 8 A 10 12 14 16 18 1A 20
3 6 9 10 13 16 19 20 23 26 29 30
4 8 10 14 18 20 24 28 30 34 38 40
5 A 13 18 21 26 2B 34 39 42 47 50
6 10 16 20 26 30 36 40 46 50 56 60
7 12 19 24 2B 36 41 48 53 5A 65 70
8 14 20 28 34 40 48 54 60 68 74 80
9 16 23 30 39 46 53 60 69 76 83 90
A 18 26 34 42 50 5A 68 76 84 92 A0
B 1A 29 38 47 56 65 74 83 92 A1 B0
10 20 30 40 50 60 70 80 90 A0 B0 100
Output harus dicetak di layar. Formatnya harus sebagai berikut:
- Angka harus disejajarkan ke kanan dalam setiap kolom.
- Memimpin spasi sebelum kolom pertama, membuntuti spasi setelah kolom terakhir, atau membuntuti baris baru setelah baris terakhir diizinkan.
Pemisahan antar kolom bisa satu ruang (seperti yang ditunjukkan di atas) atau lebih dari satu ruang, tetapi jumlah ruang harus konsisten antara kolom. Untuk mengukur pemisahan kolom, pertimbangkan bahwa angka-angka yang ditampilkan mencakup setiap spasi utama yang mungkin diperlukan untuk memenuhi persyaratan 1 (sehingga setiap nomor menempati tiga karakter, yang pertama mungkin spasi). Misalnya, tabel dengan pemisahan dua ruang adalah sebagai berikut:
1 2 3 4 5 6 7 8 9 A B 10 2 4 6 8 A 10 12 14 16 18 1A 20 3 6 9 10 13 16 19 20 23 26 29 30 4 8 10 14 18 20 24 28 30 34 38 40 5 A 13 18 21 26 2B 34 39 42 47 50 6 10 16 20 26 30 36 40 46 50 56 60 7 12 19 24 2B 36 41 48 53 5A 65 70 8 14 20 28 34 40 48 54 60 68 74 80 9 16 23 30 39 46 53 60 69 76 83 90 A 18 26 34 42 50 5A 68 76 84 92 A0 B 1A 29 38 47 56 65 74 83 92 A1 B0 10 20 30 40 50 60 70 80 90 A0 B0 100
Penyimpanan komputer pada bintang neutron benar-benar mahal, jadi kode Anda harus menggunakan sesedikit mungkin byte.
Tantangan dan bonus diperpanjang
Idealnya kode Anda harus digunakan kembali di bagian lain dari alam semesta, tempat sistem penomoran lain mungkin digunakan. Untuk itu, tantangan diperluas secara opsional sebagai berikut: Kode Anda menerima angka N
sebagai input dan menghasilkan tabel N
x N
perkalian di pangkalan N
, dengan format di atas.
Masukan mungkin dari keyboard atau sebagai argumen fungsi. Program atau fungsi harus bekerja untuk 2
≤ N
≤ 36
, menggunakan sebagai digit pertama N
karakter dari urutan 0
, 1
, ..., 9
, A
, B
, ..., Z
(huruf besar huruf)
Tantangan yang diperluas ini bersifat opsional. Jika Anda mengikuti rute ini, ambil 20% dari jumlah byte Anda (tidak perlu membulatkan ke angka integer).
sumber
Because they have twelve eyes, they naturally use a base-12 numbering system.
Ya tentu saja. Itu sebabnya kami menggunakan biner, setelah semua ... ;-)Jawaban:
Pyth, 27 * 0.8 = 21.6
Cobalah online: Demonstrasi
Penjelasan:
sumber
CJam, 33 * 0,8 = 26,4 byte
Uji di sini.
Ini menggunakan pemisahan minimum yang diperlukan.
Penjelasan
Tabel untuk input
22
(yang terbesar yang pas di pos tanpa bilah gulir horizontal):sumber
MATL , 42 * .8 = 33.6
Penolakan
Karena pencipta bahasa dan penulis tantangannya sama, jawaban ini tidak memenuhi syarat untuk menang .
Untuk diskusi tentang apakah pembatasan ini perlu atau tidak, lihat pertanyaan meta ini .
Kode
Ini menggunakan pemisahan minimum.
Contoh
Tabel perkalian oktal
Penjelasan
Sunting: Coba online!
Untuk dijalankan di kompiler online (per 19 Februari 2016), ubah
Y)
menjadiX:
, dan hapus[]
. Ini untuk beradaptasi dengan perubahan yang telah dibuat ke bahasa sejak tantangan ini diposting.sumber
Utilitas Bash + BSD, 36
Bekerja di luar kotak pada OS X.
rs
mungkin perlu diinstal pada sistem Linux.Co{1..12}d{1..12}*p
menjadiCo1d1*p Co1d2*p Co1d3*p ... Co1d12*p ... Co12d12*p
.dc
ungkapan yang menghasilkan istilah yang diperlukan.Co
menetapkan basis output ke 12.d
digunakan sebagai pemisah antara angka, bukan spasi, jadi tidak ada jalan keluar yang diperlukan dalam ekspansi brace.d
sebenarnya menggandakan bagian atas tumpukan, tetapi ini secara efektif diabaikan dan dibuang.dc
adalah garis yang dipisahkan ruang tunggal.rs
membentuk kembali ini ke array 12x12.-j
membenarkan setiap istilah.sumber
Pyth, 36 byte
Coba di sini.
sumber
Km+1dUJ12
denganKSJ12
.S
menciptakan jangkauan[1, 2, ..., 12]
. Anda dapat mengganti keduanyaj""
danjk
dengans
, karena Anda bergabung dengan string. Dan byte lain: Ubahrjbm...K1
kejmr...1K
. Dengan perubahan ini Anda mendapatkan 28 byte:KSJ12jmrsm.[\ 4sm.Hbj*dkJK1K
Python,
153147132 byte * 0.8 = 105.6Turun ke 132 byte berkat saran dari Tim Pederick! :)
sumber
rjust
('%4s'%f(...)
). Lihat apakah mencetak setiap nilai denganprint ...,
(dan kemudian satuprint
untuk baris baru) lebih pendek darijoin
. Jika demikian, coba pisahkan loop .and
Aor
B) di dalam fungsif
, menggunakann>=b
. Saya melakukan itu sampai saya menyadari bahwa itu tidak lebih pendek dari apa yang saya miliki sebelumnya,n//b
... tetapi Anda menggunakan Python 2! Anda dapat menyimpan byte dengann/b
.CJam,
38333238 * (.8) = 30,4 byteCoba di sini.
(Terlihat sangat mirip dengan Martin sekarang.)
sumber
Perl 6 , 60 byte -20% = 48 byte
(Ini hampir persis bagaimana saya akan menulisnya bahkan jika saya tidak berusaha membuatnya sesingkat mungkin)
Pemakaian:
sumber
for(
sebagai awal memanggil subrutin bernamafor
bukan pengubahfor
konstruksi pengubah . Yang akan menyebabkan kesalahan kompilasi.JavaScript (ES6) 84 (105-20%)
Cara yang jelas, untuk memulai.
Catatan
alert
bukan cara terbaik untuk menampilkan tabel, tetapi ini lebih pendek, karena ada permintaan eksplisit untuk "ditampilkan di layar"Kurang golf
sumber
Python 3, 126 - 20% = 100,8 byte
Fungsi luar
t
,, adalah yang benar-benar mencetak tabel perkalian. Fungsi bagian dalami
,, melakukan konversi angka ke basis dari 2 menjadi 36.Kiat tip untuk Boomerang untuk solusi mereka , dan untuk tip golf. Saya menghindari menyalin sesuatu dari solusi Boomerang, tetapi saya membiarkan diri saya meliriknya untuk melihat di mana saya bisa memangkas lebih banyak. Dan bahkan sebelum itu, saya menemukan bahwa semakin saya bermain golf, semakin milik saya mulai terlihat seperti milik Boomerang!
sumber
print(i(15,12),i(120,12),i(144,12),i(150,12))
pengembalian kode,13 A0 00 06
bukan13 A0 100 106
. Sayangnya tugas tersebut mengharuskan untuk mencetak satu basis 3 angka n nomor (100). Seharusnya tidak terlalu sulit untuk memperbaikinya tetapi mungkin menambahkan beberapa byte ...n>=b
tidakn>b
.def t(b): i=lambda n:(n>=b and i(n//b)or'')+chr(n%b+[48,55][n%b>9]) R=range(b) for r in R:print(*('%3s'%i(~r*~c)for c in R))
Saya ingin melakukan itu dalam solusi saya, tetapi sekarang kedua solusi kami cukup dekat, mungkin juga meningkatkan yang lebih baik ^^Javascript (ES6)
96.893.6 Bytes (20% dari 117)Penjelasan
- Disimpan 4 byte berkat @ edc65
sumber
alert(b)
tanpaeval
lebih pendek. Dan setidaknya, hindari variabela
, tidak ada gunanyab+=' '.repeat(4-a.length)+(i*j).toString(n).toUpperCase()
a
bagaimana Anda kemudian menghitung...repeat(4-a.length)...
?MATLAB,
111 * 0.8 = 88.8110 * 0.8 = 88 byteDebut saya di sini:
Penjelasan:
[1:N]'*[1:N]
buat tabel perkalian pada basis 10dec2base([1:N]'*[1:N],N)
convert to base 12. Outputnya adalah char array dengan 0-s yang terkemukastrjoin(cellstr(dec2base(___)))
konversikan ke sel dan kembali ke string penggabung char dengan spasi menghasilkan string 1x575[' ',strjoin(___)]
tambahkan ruang untuk memiliki 576 elemenstrrep(___,' 0',' ')
hapus satu nol di depannya. Kami melakukannya dua kali karena kami memiliki string dengan dua nol di depanreshape(___,4*N,N)'
mengkonversi array char 1x576 menjadi array char 48x12disp(___)
tampilkan hasilnya tanpaans =
Keluaran:
Jika kita tidak menghitung pernyataan
N=12;
,5*.8=4
byte disimpan. Juga, jikaans =
output ditoleransi, maka kita dapat menghapusdisp()
penghematan6*0.8=4.8
byte lain . Tentu saja, mungkin ada cara lain untuk menghemat byte :)sumber
ans
output ditoleransi jika output adalah argumen fungsi. Tetapi dalam kasus ini tantangannya mengatakan "output harus dicetak di layar", jadians
tidak diperbolehkan. Juga,N
harus diambil sebagai masukan dalam tantangan yang diperluas. Anda dapat menyelesaikannya dengan menggunakan fungsi anonim:,@(n)disp(reshape(strrep(strrep([' ',strjoin(cellstr(dec2base([1:N]'*[1:N],N)))],' 0',' '),' 0',' '),4*N,N)')
yang akan Anda panggil menggunakanans(12)
Python 3:
166161152 - 20% = 121,6 byteSaya tahu ini lebih rendah daripada jawaban Python yang ada tapi saya pikir untuk mencobanya. Ini pertama kali saya memposting di situs ini ...
sumber
APL,
3231 × 0,8 = 24,8 byteAsal 0. Dalam bahasa Inggris:
∘.×⍨1+⍳⍵
: tabel perkalian⍵⊥⍣¯1¨
: ungkapkan dalam basis ⍵ setiap elemen dari tabel perkalian⊃∘(⎕D,⎕A)¨¨
: mengubah tabel vektor angka menjadi tabel vektor karakter¯4↑¨
: sejajarkan kanan ke panjang 4 setiap elemen dari hasilRutin cetak APL default melakukan hal yang benar.
sumber
{¯4↑¨⊃∘(⎕D,⎕A)¨¨⍵⊥⍣¯1¨∘.×⍨1+⍳⍵}
Ruby,
6966 karakter - 20% = 52,8Contoh dijalankan:
sumber
ksh93, 51 * 0.8 == 40.8 byte
Ini harus bekerja hingga basis 64 (radix terbesar didukung oleh ksh). Contoh:
sumber
Pyke, 14 byte * 0.8 = 11.2 byte, tidak kompetitif
Coba di sini!
Penjelasan:
Atau 12 byte tanpa bonus
sumber