Komputer hidup dengan biner. Semua programmer tahu biner.
Tetapi 2**x
pangkalan sering diabaikan sebagai tidak praktis, sementara mereka memiliki hubungan yang indah dengan biner.
Untuk menunjukkan kepada Anda satu contoh hubungan yang begitu indah, 19 akan menjadi kesaksian saya.
19 10011 103 23 13 j
19 adalah desimal, termasuk untuk kejelasan.
10011 adalah 19 dalam biner.
103, dalam basis 4 dibuat mulai dari biner dengan cara ini:
- log2 (4) == 2, mari kita ingat dua.
- Pad 10011 sehingga memiliki kelipatan 2 panjang -> 010011
Ambil digit 2 dengan 2 dari kiri ke kanan dan perlakukan mereka sebagai 2 digit angka biner:
- 01 -> 1
- 00 -> 0
- 11 -> 3
Selesai , 10011 di basis-4 adalah 103.
Untuk basis 8, lakukan hal yang sama tetapi 3-oleh-3 seperti log2 (8) = 3.
- Pad 010011
- 010 -> 2
011 -> 3
23, Selesai .
Untuk base 16, lakukan hal yang sama tetapi 4-oleh-4 seperti log2 (16) = 4.
- Pad 00010011
- 0001 -> 1
0011 -> 3
13, selesai .
Tugas
Diberikan angka maksimal sebagai input, Anda harus menampilkan tabel
base-ten-i base-two-i base-four-i base-eight-i base-sixteen-i base-thirtytwo-i
untuk saya yang masuk dari 0 hingga n inklusif. Angka biner adalah contoh minimum absolut yang diperlukan untuk bekerja, jadi kode Anda harus sesingkat mungkin.
Batasan dan bonus
Basis-sepuluh -> biner dan biner -> Basis-sepuluh built-in dianggap sebagai Basis-a -> Basis-b.
Jika Anda menghasilkan semua basis
2**i
(untuk i> 2) dengan menggunakan relasi yang disebutkan di atas Anda mendapatkan*0.6
bonus, tetapi konversi basis umum (ditulis sendiri) diizinkan.
Tabel contoh
> 32
0 0 0 0 0 0
1 1 1 1 1 1
2 10 2 2 2 2
3 11 3 3 3 3
4 100 10 4 4 4
5 101 11 5 5 5
6 110 12 6 6 6
7 111 13 7 7 7
8 1000 20 10 8 8
9 1001 21 11 9 9
10 1010 22 12 a a
11 1011 23 13 b b
12 1100 30 14 c c
13 1101 31 15 d d
14 1110 32 16 e e
15 1111 33 17 f f
16 10000 100 20 10 g
17 10001 101 21 11 h
18 10010 102 22 12 i
19 10011 103 23 13 j
20 10100 110 24 14 k
21 10101 111 25 15 l
22 10110 112 26 16 m
23 10111 113 27 17 n
24 11000 120 30 18 o
25 11001 121 31 19 p
26 11010 122 32 1a q
27 11011 123 33 1b r
28 11100 130 34 1c s
29 11101 131 35 1d t
30 11110 132 36 1e u
31 11111 133 37 1f v
32 100000 200 40 20 10
sumber
Jawaban:
CJam, 54 * 0,6 = 32,4 byte
Uji di sini.
Untuk referensi, berikut adalah solusi yang lebih pendek yang tidak memenuhi syarat untuk bonus (sebesar 39 byte):
sumber
Pyth, 52 * 0,6 = 31,2 byte
Uji secara online
Jawaban non-bonus saya adalah 39 byte
sumber
PHP,
232230233217 * 0.6 = 130.2tidak ada kesempatan mengalahkan bahasa golf, tapi saya suka tantangannya.
$n=32;
atau diganti$n
dengan32
(atau bilangan bulat non-negatif lainnya); hubungi via cli$n
dengan$_GET[n]
(+ 6 / + 3.6) dan panggil di browseratau di cli dengan
php-cgi -f bases.php -n=32
<br>
atau sebelumnya<pre>
untuk menguji di browserHapus E_NOTICE dari error_reporting (prepend
error_reporting(0);
) untuk menekannya.kerusakan:
hasil edit utama:
74 byte untuk memperbaiki hasil desimal 0 setelah revampversi non-bonus, 142 byte
PHP mengalahkan Python?
Bahkan jika saya menambahkan 6 (3,6) byte untuk membuat potongan program, saya masih mengalahkan Python (223 * 0,6 = 133,8 atau 148 non-bonus vs 158). Luar biasa.
sumber
for
kata kunci di loop terluar."\n"
-> garis fisik putus.Ruby, 80 byte (versi non-bonus)
sumber
Python3 -
189, 167, 166150 byteDisimpan 16 byte dengan bantuan @ LeakyNun !
Versi bonus -
296 * 0,6 = 177,6279 * 0,6 = 167,4 byteVersi bonus versi yang lebih mudah dibaca.
sumber
"0123456789abcdefghijklmnopqrstuv"
lebih pendek darifrom string import* digits+ascii_lowercase
digits+ascii_lowercase
: D. Terima kasih!for i in range(int(input())+1):f=lambda n=i,b,c="0123456789abcdefghijklmnopqrstuv":n<b and c[n]or f(n//b,b)+c[n%b];print(i,f(2),f(4),f(8),f(16),f(32))
(satu baris)