Saat menulis program kode-golf , saya biasanya menggunakan konstanta numerik. Saya selalu meletakkannya dalam desimal karena itulah yang saya pikirkan, tetapi saya baru menyadari bahwa bahasa saya mendukung format angka lain yang mungkin mempersingkat kode saya.
Tantangan
Dengan bilangan bulat non-negatif kurang dari 2 ^ 53-1, putuskan apakah bilangan bulat itu memiliki representasi terpendek di:
- Desimal
- Heksadesimal
- Notasi ilmiah
Desimal
Karena ini adalah format default bahasa saya, tidak ada notasi tambahan yang diperlukan untuk format ini. Setiap angka direpresentasikan seperti biasa untuk desimal.
Heksadesimal
Bahasa saya menggunakan 0x
awalan untuk konstanta heksadesimal. Ini berarti bahwa jika suatu angka memiliki 4 digit heksadesimal, dibutuhkan 6 byte untuk merepresentasikan angka tersebut.
Notasi ilmiah
Bahasa saya menggunakan format berikut untuk notasi ilmiah:
[Basis nyata] e [Eksponen integer 10]
Sebagai contoh, 700
akan direpresentasikan sebagai 7e3
, dan 699
akan direpresentasikan sebagai 6.99e3
, karena basis harus antara -10 dan 10 (tidak inklusif). Untuk keperluan tantangan ini, pangkalan akan selalu setidaknya 0, karena angka yang dimasukkan adalah non-negatif.
Keluaran
Anda harus mengembalikan cara mengidentifikasi format mana yang terpendek (yaitu 0 untuk desimal, 1 untuk hex, 2 untuk ilmiah). Atau, Anda dapat menampilkan representasi terkecil dari nomor itu sendiri.
Uji kasus
Decimal | Hexadecimal | Scientific | Winner
--------------|--------------|-------------------|-------------
0 | 0x0 | 0e0 | Decimal
15 | 0xF | 1.5e1 | Decimal
6999 | 0x1B57 | 6.999e3 | Decimal
7000 | 0x1B58 | 7e3 | Scientific
1000000000000 | 0xE8D4A51000 | 1e12 | Scientific
1000000000001 | 0xE8D4A51001 | 1.000000000001e12 | Hexadecimal
1000000001000 | 0xE8D4A513E8 | 1.000000001e12 | Hexadecimal
1000001000000 | 0xE8D4B45240 | 1.000001e12 | Scientific
Mencetak gol
Ini adalah kode-golf , jadi jawabannya dalam byte terpendek untuk setiap bahasa menang.
sumber
2^63-1
mungkin sulit untuk beberapa bahasa. Pertimbangkan untuk mengendurkannya ke nilai yang lebih rendah seperti2^32-1
(sehingga nilainya sesuai dengan tipe data floating point ganda)double
. Hanya sebuah saran; lakukan sesuai keinginan Anda1000001000000
bisa juga ditulis seolah-1000001e6
olah.Jawaban:
05AB1E , 23 byte
Cobalah online!
-1 terima kasih kepada Emigna .
0
untuk heksadesimal,1
untuk desimal,2
untuk ilmiah.sumber
'.ìÁ0
.05AB1E , 27 byte
Cobalah online!
Penjelasan
sumber
len(hex(input)) + 2
, jika itu membantu.¹
alih-alihDs
:g¹hgÌ
Jelly , 28 byte
Sebuah link monadik kembali
1
,2
atau3
untuk heksadesimal, ilmiah, atau desimal masing-masing.Cobalah online! atau lihat test suite .
Saya pikir ini akan lebih pendek, tetapi saya tidak bisa melihatnya begitu juga posting.
Bagaimana monstrositas ini bekerja ...
sumber
JavaScript (ES6), 90 byte
Mengembalikan 0 untuk desimal, 1 untuk heksadesimal, -1 untuk ilmiah.
Tampilkan cuplikan kode
Penjelasan
log(n) / log(10)
: basis-10 logaritman
; kira-kira panjangnyan
sebagai desimal.log(n) / log(16) + 2
: basis-16 logaritman
plus 2; kira-kira panjangn
sebagai heksadesimal ditambah yang diawali0x
.n.toExponential().length - 1
:n.toExponential()
mengembalikan string dengann
dalam format ilmiah (mis.7e+3
) tetapi kami mengurangi 1 dari panjangnya untuk memperhitungkan yang asing+
.Sekarang bahwa kita memiliki panjang semua 3 representasi
D
,H
danS
, kita membandingkan:S<H?-(S<D):+(H<D)
JavaScript (ES6), 97 byte
Ini menghasilkan angka dalam format dengan panjang terpendek. Terinspirasi oleh upaya yang dihapus @ Shaggy .
Tampilkan cuplikan kode
sumber
C #,
1069796143132 byteMengganggu di C #
ulong.ToString
specifier formate
kehilangan presisi pada angka yang lebih tinggi sehingga saya harus melakukannya secara manual. Mungkin ada cara yang lebih pendek untuk melakukannya tetapi ini berhasil untuk saat ini. Ini juga memformatnya secara tidak benar untuk tantangan ini jadi saya harus menghapus outputnya secara manual.Jika saya menetapkan string ke nilai
n
karenavar s=n+"";
berhasil lebih lama karena pengembalian eksplisit dan kurung kurawal ekstra.Ini mengembalikan nilai terpendek dari array dari setiap nilai yang berbeda di mana
[0] = decimal, [1] = hexadecimal, [2] = scientific
.Versi Lengkap / Terformat:
Cara yang benar untuk menghitung output ilmiah adalah:
Namun, mengingat
0
lebih pendek dari0e0
saya dapat menghapus kasus khusus itu.sumber
Python 2,
8377 byteMenghasilkan representasi terkecil dari angka tersebut.
Cobalah online
Tidak Disatukan:
Regex menghapus nol yang tertinggal dan titik desimal jika perlu, serta tanda plus dan memimpin nol dari eksponen jika ada.
sumber
L
besar dalam rentang input.str
akan menghindarinya.int
representasi Python . Lama mulai kira-kira2**63
.+
karakter sajastr.replace
?+
sementara saya melakukannya.Ohm , 35 byte
Cobalah online!
Output 0 untuk desimal, 1 untuk hex dan 2 untuk ilmiah.
Penjelasan:
sumber
PHP , 90 byte
mencetak 0 untuk desimal, 1 untuk heksadesimal dan 2 untuk ilmiah
dalam kasus seri, angka tertinggi akan dicetak
Cobalah online!
PHP , 91 byte
mencetak 0 untuk desimal, 1 untuk heksadesimal dan 2 untuk ilmiah
dalam kasus seri, angka terendah akan dicetak
Cobalah online!
PHP , 103 byte
mencetak 0 untuk desimal, 1 untuk heksadesimal dan 2 untuk ilmiah
dalam kasus seri semua angka akan dicetak
Cobalah online!
PHP , 109 byte
Output array dengan solusi terpendek
Cobalah online!
sumber
C,
187185 byteDekompresi:
Mencetak 0 untuk desimal, 1 untuk hex, 2 untuk notasi ilmiah.
sumber
TI-Basic, 130 byte
Atau, sebagai alternatif:
Atau, dalam hex:
Mencetak 0 untuk desimal, 1 untuk hex, 2 untuk notasi ilmiah
sumber