0xUsernames
Mesajlaşma servisini kullanan o kadar çok insan var ki, tüm kullanıcı adlarını saklamak için yer doluyor! Bunu düzeltmek için, mümkünse kullanıcı adlarını onaltılık olarak depolamaya başlayacaklar.
Bir kullanıcı adı sadece karakterlerden oluşuyorsa 0123456789ABCDEF
(büyük / küçük harfe duyarlı), onaltılık bir sayıya dönüştürülebilir ve bir tamsayı olarak saklanabilir. Örneğin, kullanıcı adı onaltılık bir tamsayı ba5eba11
olarak yorumlanabilir 0xBA5EBA11
.
Peki ya 05AB1E
? Bu, kaybedilecek olan önde gelen bir sıfıra sahip. Dolayısıyla, bir kullanıcı adını ne zaman değiştirirsek 1
, bir tamsayı olarak okumadan önce bir tane hazırladığınızdan emin oluruz .
Meydan okuma
Göreviniz, boş olmayan bir kullanıcı adı bir dize olarak verilen, kullanıcı adını 'hexa-sıkıştırma' yapan bir program veya işlev yazmaktır:
- Onaltılık bir tam sayı olarak yorumlanabilirse, bir 1 hazırlayın, onaltılık olarak yorumlayın ve sonucu taban 10 olarak yazdırın .
- Aksi takdirde, sadece değiştirilmemiş dizgeyi döndürün.
Bu kod golf , yani en kısa çözüm (bayt cinsinden) kazanır! Yerleşik taban dönüştürme işlevlerine izin verilir.
Test Kılıfları
Ortaya çıkan herhangi bir tamsayının, dilinizin standart tamsayı aralığında olduğunu varsayabilirsiniz.
Çoğu mesajlaşma sistemindeki kullanıcı adlarında olduğu gibi, giriş dizeleri yalnızca alfanümerik ve alt çizgi içerecektir.
Unutmayın, 1
dönüşümden önce daima bir öncü eklemelisiniz !
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
Başvuru için, burada test durumlarda (ungolfed) kullandığım bir Python 3 uygulaması:
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name