0xユーザー名
メッセージングサービスを使用しているユーザーが非常に多いため、すべてのユーザー名を保存するためのスペースが不足しています。これを修正するために、可能であれば16進数としてユーザー名の保存を開始します。
ユーザー名が文字のみで構成されている0123456789ABCDEF
場合(大文字と小文字は区別されません)、16進数に変換して整数として保存できます。たとえば、ユーザー名ba5eba11
は0xBA5EBA11
、16進整数として解釈できます。
しかし、どう05AB1E
ですか?先行ゼロがあり、これは失われます。そのため、ユーザー名を変換するときは常に1
、整数として読み取る前に必ずaを追加します。
チャレンジ
あなたの仕事は、空でないユーザー名を文字列として与えられたユーザー名を 'hexa-compresss'するプログラムまたは関数を書くことです:
- 16進整数として解釈できる場合は、1を先頭に追加し、16進数として解釈し、結果を10進数として出力します。
- それ以外の場合は、変更されていない文字列を返します。
これはcode-golfなので、最短のソリューション(バイト単位)が勝ちです!組み込みのベース変換関数が許可されています。
テストケース
結果の整数は、言語の標準整数範囲内にあると想定できます。
ほとんどのメッセージングシステムのユーザー名と同様に、入力文字列には英数字とアンダースコアのみが含まれます。
1
変換する前に必ず先頭を追加する必要があることを忘れないでください!
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
参考のために、テストケースに使用したPython 3の実装を以下に示します(変更なし)。
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name