Memasukkan
Array integer positif yang tidak kosong.
Tugas
Konversi setiap bilangan bulat menjadi biner, oktal, desimal, atau heksadesimal sedemikian rupa sehingga setiap digit ( 0 ke F ) digunakan paling banyak satu kali.
Keluaran
Daftar pangkalan yang digunakan untuk memecahkan teka-teki.
Contoh terperinci
Output yang diharapkan untuk [16, 17] adalah [oktal, desimal] .
Inilah alasannya:
- Kami tidak dapat menggunakan desimal untuk kedua angka, karena keduanya mengandung angka 1 .
- 16 tidak dapat dikonversi ke biner, karena perwakilannya di basis ini ( 10000 ) berisi beberapa 0 's.
- 17 juga tidak dapat dikonversi ke biner, karena perwakilannya dalam basis ini ( 10001 ) mengandung beberapa 0 dan beberapa 1 .
- 17 tidak dapat dikonversi menjadi heksadesimal, karena perwakilannya dalam basis ini ( 11 ) terdiri dari dua 1 .
Mari kita pertimbangkan semua kemungkinan yang tersisa:
+---------+---------+--------+ | oct(16) | dec(16) | hex(16)| | = 20 | = 16 | = 10 | +--------------+---------+---------+--------+ | oct(17) = 21 | 20,21 | 16,21 | 10,21 | | dec(17) = 17 | 20,17 | 16,17 | 10,17 | +--------------+---------+---------+--------+
Satu-satunya solusi yang mungkin adalah mengkonversi 16 dalam oktal ( 20 ) dan untuk menjaga 17 dalam desimal ( 17 ). Dengan cara ini, angka 0 , 1 , 2 dan 7 digunakan tepat sekali.
Klarifikasi dan aturan
- Input dijamin untuk mengarah ke solusi yang unik. Kode Anda seharusnya tidak mendukung array yang memberikan beberapa solusi atau tidak ada solusi sama sekali.
- Anda dapat mengeluarkan basis dalam format yang masuk akal, seperti ["bin", "oct", "dec", "hex"] , ['b', 'o', 'd', 'd', 'h'] , "BODH " , [2,8,10,16] , [0,1,2,3] dll. Tetapi itu harus dijelaskan dengan jelas dalam jawaban Anda.
- Urutan basis dalam output harus sesuai dengan urutan bilangan bulat input.
- Jika itu membantu, Anda dapat mengasumsikan bahwa input diurutkan dari terendah ke tertinggi, atau dari tertinggi ke terendah.
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang!
Uji kasus
Anda tidak harus menampilkan hasil konversi yang tercantum di bawah ini. Mereka murni informasi.
Input | Output | Conversion result
---------------------------------------+-----------------+------------------------
[ 119 ] | O | 167
[ 170 ] | D | 170
[ 64222 ] | H | FADE
[ 16, 17 ] | O/D | 20/17
[ 14, 64, 96 ] | H/H/D | E/40/96
[ 34, 37, 94 ] | O/D/H | 42/37/5E
[ 2, 68, 82 ] | B/D/H | 10/68/52
[ 22, 43, 96 ] | O/O/O | 26/53/140
[ 3639, 19086, 57162 ] | H/D/H | E37/19086/DF4A
[ 190, 229, 771 ] | O/H/O | 276/E5/1403
[ 2, 44, 69, 99 ] | B/H/H/H | 10/2C/45/63
[ 75, 207, 218, 357, 385 ] | H/H/H/D/O | 4B/CF/DA/357/601
[ 12, 28, 46, 78, 154, 188, 222, 240 ] | D/O/O/D/H/H/H/H | 12/34/56/78/9A/BC/DE/F0
Daftar input mentah tersedia di sini .
code-golf
base-conversion
Arnauld
sumber
sumber
Jawaban:
JavaScript (Node.js) ,
192,155,154,152,151,145,136,113,99,9290 byteCobalah online!
Penjelasan:
[c,...a]
- Trik @Arnauld untuk mengambil satu item dalam satu waktuc?***:" "
-> jika c tidak terdefinisi, kami berhasil mencapai hasil akhir- [] - jika saya akan meletakkan "" daripada yang ditemukan tidak akan dianggap sah. ([] + 5 = "5" JS FTW)[1,4,5,8].find
setiap kali kami menemukan basis yang benar (output akan dari array ini (1,4,5,8) -> (2,8,10,16) legit. sekarang bagaimana cara kerjanya -> jika ia menemukan sesuatu ia mengembalikan elemen (1-8) dan kemudian saya menambahkan hasil dari solusi dalam.jika tidak menemukan maka ia mengembalikan undefined + T sekarang false -> NaN yang pada panggilan orang tua akan dianggap salah!/(.).*\1/.test(n=t+b)
tentukan apakah string memiliki duplikat, jika demikian:f(a,n))
langsung saja ke nomor berikutnya (a sekarang array.slice (1)) dengan string baru (n)kami menetapkan hasil ke T (temp) dari hasil karena menemukan berhenti ketika ditemukan dan jadi kami tahu bahwa hasil terakhir adalah f () yang merupakan hasil B
sumber
t="",B=""
untukt="",B=t
akan menghemat byte.trim()
lagi).Perl 5
-alp
, 55 bytePenggunaan
%x
untuk hex,%d
untuk desimal,%o
untuk oktal dan%b
untuk binerCobalah online!
sumber
Ruby,
7271 byteFormat output adalah semacam monstrositas S-ekspresi terbalik:
Memisahkan slash sebagai gantinya akan membutuhkan 3 byte lebih (menambahkan
*?/
).Format ini berasal dari struktur loop, sedikit lebih pendek daripada yang lebih idiomatis
repeated_combination(a.size)
, yang menghasilkan array array karakter dan kemudian menguranginya di atas fungsi lintas-produk.Sunting: Disimpan 1 byte berkat Lynn.
sumber
Pyth,
2120 byteMengembalikan daftar semua daftar pangkalan yang mungkin (yang selalu memiliki panjang 1).
Coba di sini
Penjelasan
sumber
Bahasa Wolfram (Mathematica) , 71 byte
Kembalikan daftar pangkalan.
Cobalah online!
sumber
Jelly ,
1716 byteCobalah online!
Kembalikan daftar pangkalan.
sumber
Python 2 , 128 byte
Cobalah online!
sumber
05AB1E , 17 byte
Cobalah online!
sumber
8
karakter'8'
, dan tiga lainnya bilangan bulat? +1, tampaknya berfungsi dengan baik, termasuk kasus uji yang lebih lama.Python 2 ,
121117113111 byteCobalah online!
Tip dari topi untuk Lynn untuk
format
, yang saya sudah lupa!sumber
Sekam , 19 byte
Cobalah online!
Mengembalikan daftar pangkalan
Penjelasan
sumber