0x Nama pengguna
Ada begitu banyak orang yang menggunakan layanan olahpesan sehingga mereka kehabisan ruang untuk menyimpan semua nama pengguna! Untuk memperbaikinya, mereka akan mulai menyimpan nama pengguna sebagai heksadesimal, jika memungkinkan.
Jika nama pengguna hanya terdiri dari karakter 0123456789ABCDEF
(tidak peka huruf besar-kecil), itu dapat dikonversi menjadi heksadesimal dan disimpan sebagai integer. Misalnya, nama pengguna ba5eba11
dapat diartikan sebagai 0xBA5EBA11
, integer heksadesimal.
Tapi bagaimana dengan itu 05AB1E
? Itu mendapat nol di depan, yang akan hilang. Jadi, setiap kali kami mengonversi nama pengguna, kami pastikan untuk menambahkan 1
sebelumnya sebelum membacanya sebagai bilangan bulat.
Tantangan
Tugas Anda adalah menulis sebuah program atau fungsi yang, diberi nama pengguna yang tidak kosong sebagai string, 'heksa-kompres' nama pengguna:
- Jika itu dapat ditafsirkan sebagai bilangan bulat heksadesimal, tambahkan 1, diartikan sebagai heksadesimal, dan kemudian cetak hasilnya sebagai basis 10.
- Jika tidak, kembalikan string yang tidak dimodifikasi.
Ini adalah kode-golf , jadi solusi terpendek (dalam byte) menang! Fungsi konversi basis bawaan diizinkan.
Uji Kasus
Anda dapat mengasumsikan bahwa setiap bilangan bulat yang dihasilkan berada dalam rentang bilangan bulat standar bahasa Anda.
Seperti halnya nama pengguna pada sebagian besar sistem pengiriman pesan, string input hanya akan berisi alfanumerik dan garis bawah.
Ingat, Anda selalu perlu menambahkan arahan 1
sebelum konversi!
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
Untuk referensi, berikut ini adalah implementasi Python 3 yang saya gunakan untuk kasus uji (ungolfed):
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name