Tantangan
Ini yang sederhana.
Tulis fungsi atau program ketika diberi nomor dalam basis 10 sebagai input, itu akan mengembalikan atau mencetak nilai nomor itu dalam Heksadesimal .
Contohnya
15 -> F
1000 -> 3E8
256 -> 100
Aturan
- Tidak ada fungsi heksadesimal bawaan
- Huruf mungkin huruf kecil atau huruf besar
- Anda hanya perlu khawatir tentang bilangan bulat non-negatif, tidak ada negatif atau desimal sial
- Ini harus bekerja dengan angka besar sembarang hingga batas jenis bahasa default.
- Baris baru tidak wajib
- Seperti biasa, ini adalah kode-golf , jadi kode terpendek yang diukur dalam byte menang!
code-golf
math
base-conversion
hexadecimal
Cowok acak
sumber
sumber
000003E8
?Jawaban:
APL (Dyalog APL) , 17 byte
Harus dijalankan
⎕IO←0
, yang merupakan standar pada banyak sistem APL.Cobalah online!
(⎕D,⎕A)[
...]
D igits digabung menjadi A lphabet, lalu diindeks oleh ...16⊥⍣¯1
kebalikan dari 16-Base-to-Number, yaitu Number-to-Base-16⊢
diaplikasikan ke⎕
input numeriksumber
Kode Mesin Turing, 412 byte
Seperti biasa, saya menggunakan sintaks tabel aturan yang didefinisikan di sini. Anda dapat mengujinya di situs itu atau, sebagai alternatif, menggunakan implementasi java ini.
Menghitung mundur dari input pada basis 10 sambil menghitung dari 0 pada basis 16. Pada pengurangan nol, itu menghapus blok input dan berakhir.
sumber
10*n + 33
instruksi untuk menyelesaikan untuk sembarang arbitrern
. Saya tidak mengerti kodenya.Java,
9289 bytesumber
Javascript,
4943 byte.6 byte disimpan oleh user81655 .
Uji di sini .
Ini memiliki dua nol terkemuka, yang diizinkan oleh aturan.
Berikut ini adalah versi tanpa nol nol: (47 byte).
Uji di sini .
Keduanya menggunakan pendekatan yang persis sama dengan jawaban Python saya .
sumber
i&15
akan secara otomatis dikonversi ke integer, menjatuhkan desimal. Tidak perlu~~
h=i=>i&&h(i>>4)+"0123456789abcdef"[i&15]
CJam,
2221 byteTerima kasih kepada @ MartinBüttner untuk bermain golf 1 byte!
Cobalah online!
Bagaimana itu bekerja
sumber
ri{Gmd_9>7*sc+\}h;]W%
Pyth,
33262120 byteIni menyenangkan.
Cobalah online.
Dijelaskan:
sumber
C (fungsi), 51
Fungsi rekursif mengambil integer input sebagai parameter:
Tes driver:
sumber
Haskell,
5958434139 byteContoh penggunaan:
sequence(s<$s)!!) $ 1000
->"00000000000003E8"
.Ini membuat daftar semua angka heksadesimal hingga 16 digit hex-digit. Untungnya ini terjadi secara berurutan, jadi kita bisa memilih yang terbaik
n
.Sunting: @Mauris diperas 2 byte. Terima kasih!
sumber
s="0123456789ABCDEF";(sequence(s<$s)!!)
dc, 37
Divodod secara rekursif sebesar 16, mendorong sisanya ke tumpukan hingga tidak ada lagi yang tersisa untuk dibagi. Kemudian cetak setiap elemen tumpukan, menggunakan divmod sebesar 10 untuk mencapai angka AF. Mungkin besok lebih detail ... (dan semoga lebih sedikit byte).
sumber
Python,
5958 byte1 byte disimpan oleh CarpetPython
Jalankan sebagai:
print h(15)
Uji di sini (Ideone.com).
Penjelasan:
sumber
h=lambda i:(i>15 and h(i/16)or'')+"0123456789abcdef"[i%16]
.h=lambda i:(i>15 and h(i/16)or'')+chr(48+i%16+i%16/10*7)
C (gcc) ,
4544 byteCobalah online!
sumber
Bash (fungsi), 62
Terima kasih kepada @manatwork karena menyarankan menggunakan rekursi.
sumber
h(){ x=({0..9} {A..F});echo `(($1>15))&&h $[$1/16]`${x[$1%16]}; }
()
alih-alih di{ ;}
sekitar fungsi tubuh menyimpan lebih banyak :)Perl 6 ,
5348 byteIni menciptakan urutan nilai yang dibagi Integer (
div
), hingga hasilnya0
tidak termasuk0
dari urutanKemudian melintasi (
X
) urutan yang menggunakan operator modulus (%
) dengan16
Ini menggunakan nilai-nilai tersebut sebagai indeks ke daftar rata yang terdiri dari dua Ranges
0..9
dan'A'..'Z'
Akhirnya ia menggabungkan (
~
) mereka menggunakanR
operator meta terbalik ( )Jika itu menghasilkan nilai False (string kosong), kembali
0
Pemakaian:
sumber
MATL , 27 byte
Ini menggunakan rilis 5.1.0 dari bahasa / kompiler, yang lebih awal dari tantangan ini.
Contoh
Penjelasan
sumber
𝔼𝕊𝕄𝕚𝕟, 31 karakter / 62 byte
Try it here (Firefox only).
Oke, saya menemukan beberapa hal lagi yang bisa menurunkannya.
Penjelasan
Ini pada dasarnya solusi yang sama dengan solusi ES6 @ SuperJedi224 - tetapi dengan sesuatu yang berbeda.
Lihat
⩥ḊĀⒸª⩥⁽ṁṇ⸩⨝
? Itu cara menulis yang sangat mewah"0123456789ABCDEF"
.⩥Ḋ
membuat rentang dari 0 hingga 10,Ⓒª⩥⁽ṁṇ⸩
membuat kisaran 65 hingga 71 dan mengubahnya menjadi string ASCII, danĀ...⨝
menggabungkan dua rentang dan menggabungkannya menjadi satu string. Ini mungkin bagian paling keren dari solusi saya.Versi bonus non-kompetitif, 24 karakter / 45 byte
Saya memutuskan untuk menambahkan string alfabet, seperti di Pyth.
sumber
sed, 341 byte
Ini bukan bahasa yang jelas untuk tantangan ini, tetapi memang memiliki keuntungan mendukung nomor input hingga (tergantung pada implementasi Anda) antara 4000 digit dan batas memori (virtual) sistem Anda yang tersedia. Saya mengonversi RSA-1024 menjadi hex dalam waktu sekitar 0,6 detik, jadi itu cukup baik.
Ia bekerja menggunakan pembagian berurutan oleh dua, mengumpulkan setiap 4 bit carry menjadi hex digit. Kami menggunakan karakter non-huruf untuk mewakili output kami, sehingga kami selalu mengumpulkan carry antara input desimal dan output hex, dan mengkonversi ke hexadecimal konvensional di akhir.
sumber
PHP,
65 66 64 + 1 6259 bytefungsi pencetakan rekursif, mencetak nol di depan (masukkan
>16
sebelum&&
untuk menghapusnya)program, 64 byte +1 untuk
-R
(dijalankan sebagai pipa dengan-nR
)membutuhkan PHP 5.6 atau lebih baru (5.5 tidak dapat mengindeks string literal)
atau
membutuhkan PHP 5.6 atau 7.0 (7.1 memahami indeks string negatif)
Jalankan sebagai pipa dengan
-nR
atau coba online .sumber
echo+$s
untuk input 0+
tanda memotong output pada huruf pertama ... jadi ..?:0
Julia, 55 byte
Ini adalah implementasi fungsi rekursif dasar. Ia menerima integer dan mengembalikan sebuah string.
Jika input kurang dari 15, pisahkan dengan 16 dan ulang, jika tidak ambil string kosong. Tack ini ke bagian depan karakter heksadesimal yang dipilih dengan tepat.
sumber
Onggokan kayu api , 98 byte
Melakukan ini dalam bahasa tanpa operator aritmatika mungkin merupakan kesalahan.
Gunakan seperti ini:
Tidak Disatukan:
sumber
Ruby, 48 karakter
(Copy dari Loovjo 's Python jawaban .)
Contoh dijalankan:
sumber
Serius, 35 byte
Hex Dump:
Cobalah secara Online
Penjelasan:
Perhatikan bahwa
;7ªD+@9<7*+c
setara dengan4ª▀E
, yang akan menghemat 8 byte, tapi saya pikir mungkin fungsi yang mendorong basis b digit sebagai string mungkin dianggap terlalu banyak "built-in heaxadecimal".sumber
Javascript ES6,
6458 byteDisimpan 6 byte berkat ן nɟuɐɯɹɐ ן oɯ dan user81655.
sumber
v=>eval('for(z="";v;v=v/16|0)z="0123456789ABCDEF"[v%16]+z')
v=>{for(z="";v>0;v=v/16|0)z=btoa``Ó]·ã»óÐ1``[v%16]+z;return z}
( Tild ganda adalah tild tunggal) ==> 64 karakter, 71 byte. Tidak layak.v=v/16|0
hanyalah cara penulisan yang kompleksv>>=4
.Befunge-93, 58
Pertama kali melakukan tantangan bermain golf nyata di Befunge, saya bertaruh ada satu garis untuk ini yang lebih pendek karena semua ruang di tengah garis kedua tampak boros.
Anda dapat melangkah melaluinya di sini . Penjelasan sebagian:
&
: Ambil input.:88+%
: Ambil modulo 16 sisanya."0"+
: Tambahkan ke nilai ASCII 0.:"9"`
: Jika hasilnya lebih besar dari nilai ASCII 9 ...7*+
: Tambahkan 7 untuk mengubahnya menjadi surat.\
: Simpan karakter yang dihasilkan di tumpukan.8/2/
: Membagi dengan 16 pembulatan ke bawah.:!#|_
: Keluar dari loop jika hasilnya 0.#
: Kalau tidak kembali ke langkah modulus.>:#,_@
(membungkus): Setelah selesai, output tumpukan dalam urutan LIFO.sumber
> <> , 46 + 3 = 49 byte
Ini akan menjadi lebih pendek jika> <> memiliki divisi integer, yang sekarang harus kita tiru dengan mengurangi modulo 1. Namun, saya pikir ini menggunakan beberapa trik yang cukup rapi!
Cobalah online!
Penjelasan
Loop pertama
Loop pertama melakukan konversi klasik ke algoritma hex. Itu modulo 16 (
:f1+%
) dan memeriksa apakah hasilnya <10 (:a(?
). Jika tidak, kita perlu menambahkan 7 (7+
) untuk beralih dari desimal ke alfabet kapital dalam tabel ASCII. Selain itu, kita dapat melanjutkan dengan menambahkan nilai ASCII untuk 0 ("0"+
) dan menggeser karakter menjadi output ke bagian bawah tumpukan karena kita harus menampilkannya dalam urutan terbalik. Nilai teratas kemudian digantikan oleh hasil pembagian bilangannya dengan 16. Ini ditiru dengan menghitung a / b - (a / b)% 1 (f1+,:1%-
). Ketika loop selesai, stack berisi karakter heksadesimal dalam urutan output terbalik dan 0.Lingkaran kedua
Loop kedua membalik daftar dan memeriksa apakah elemen atas adalah 0. Jika ya, kita tahu semua bukan nol dicetak dan kita harus mengakhiri. Selain itu, kami menampilkan karakter dan membalik daftar lagi untuk mempersiapkan iterasi berikutnya. The
:
ketika memasuki loop kedua akan menduplikasi 0 yang tidak memiliki efek.sumber
SpecBAS - 110 byte
Ini menggunakan algoritma yang saya temukan di WikiHow (metode kedua).
String di SpecBAS berbasis 1, maka
+1
untuk memilih elemen yang benar.sumber
C (dentang) , 83 byte
Cobalah online!
Solusi alternatif dalam C
sumber
Ruby, 40 byte
Dicuri dariTerinspirasi oleh jawaban manatwork, tetapi menggunakan celah yang menarik untuk membuatnya lebih pendek.sumber
REXX,
8078 bytesumber
C, 48 byte
Ini tidak sepenuhnya asli, saya mencukur 5 byte dari versi Digital Trauma disiapkan.
sumber
APL (NARS), karakter 34, byte 68
uji:
sumber