氏名って、ユニークじゃないじゃないですか。
田中実さんは全国で5300人くらいいるらしいです。
ユニークじゃないと、誰を呼んでるのか分からない。困ってしまうこともあるのでは。
というわけで、全世界の人間にユニークな名前をつけてあげるのはどうだろう、と考えたのです。はい。
たとえば、五十音。音の組み合わせで名前を作る。
len([
'ア','イ','ウ','エ','オ','カ','キ','ク','ケ','コ',
'サ','シ','ス','セ','ソ','タ','チ','ツ','テ','ト',
'ナ','ニ','ヌ','ネ','ノ','ハ','ヒ','フ','ヘ','ホ',
'マ','ミ','ム','メ','モ','ヤ','ユ','ヨ',
'ラ','リ','ル','レ','ロ','ワ','ヲ','ン',
'ガ','ギ','グ','ゲ','ゴ','ザ','ジ','ズ','ゼ','ゾ',
'ダ','ヂ','ヅ','デ','ド','バ','ビ','ブ','ベ','ボ',
'パ','ピ','プ','ペ','ポ','キャ','キュ','キョ',
'シャ','シュ','ショ','チャ','チュ','チョ',
'ニャ','ニュ','ニョ','ヒャ','ヒュ','ヒョ',
'ミャ','ミュ','ミョ','リャ','リュ','リョ',
'ギャ','ギュ','ギョ','ジャ','ジュ','ジョ',
'ビャ','ビュ','ビョ','ピャ','ピュ','ピョ',
'ファ','フィ','フェ','フォ','フュ',
'ウィ','ウェ','ウォ','ヴァ','ヴィ','ヴェ','ヴォ',
'ツァ','ツィ','ツェ','ツォ',
'チェ','シェ','ジェ','ティ','ディ','デュ','トゥ',
'ー','ッ'
])
129個あります。これらの文字を組み合わせて全世界の人間をカバーする名前を作り出すのです。
発音の都合上、以下のルールを設けます。
- ‘ン’は先頭の文字には使えない
- ‘ン’は連続して使えない
- ‘ー’は先頭の文字には使えない
- ‘ー’は連続して使えない
- ‘ッ’は先頭に使えない
- ‘ッ’は連続して使えない
- ‘ッ’は’ー’の後には使えない
- ‘ッ’は’ン’の後には使えない
- ‘ッ’は最後の文字には使えない
名前を2文字以上、6文字未満とすると、ざっくり
126^2 + 126^3 + 126^4 + 126^5 + 126^6 = 4,033,516,174,380 通り(※ ‘ン’, ‘ー’, ‘ッ’ を除いた組み合わせ)
の名前があることになりますね。4兆。うん、十分そう。
import random
from copy import copy
BASE = [
'ア','イ','ウ','エ','オ','カ','キ','ク','ケ','コ',
'サ','シ','ス','セ','ソ','タ','チ','ツ','テ','ト',
'ナ','ニ','ヌ','ネ','ノ','ハ','ヒ','フ','ヘ','ホ',
'マ','ミ','ム','メ','モ','ヤ','ユ','ヨ',
'ラ','リ','ル','レ','ロ','ワ','ヲ','ン',
'ガ','ギ','グ','ゲ','ゴ','ザ','ジ','ズ','ゼ','ゾ',
'ダ','ヂ','ヅ','デ','ド','バ','ビ','ブ','ベ','ボ',
'パ','ピ','プ','ペ','ポ','キャ','キュ','キョ',
'シャ','シュ','ショ','チャ','チュ','チョ',
'ニャ','ニュ','ニョ','ヒャ','ヒュ','ヒョ',
'ミャ','ミュ','ミョ','リャ','リュ','リョ',
'ギャ','ギュ','ギョ','ジャ','ジュ','ジョ',
'ビャ','ビュ','ビョ','ピャ','ピュ','ピョ',
'ファ','フィ','フェ','フォ','フュ',
'ウィ','ウェ','ウォ','ヴァ','ヴィ','ヴェ','ヴォ',
'ツァ','ツィ','ツェ','ツォ',
'チェ','シェ','ジェ','ティ','ディ','デュ','トゥ',
'ー','ッ'
]
def naming():
l = random.choice([i + 1 for i in range(5)])
name = ''
n = ''
notes = copy(BASE)
# 'ン','ー','ッ'は先頭の文字には使えない
for n in ['ン','ー','ッ']:
notes.remove(n)
n = random.choice(notes)
name = n
notes = copy(BASE)
for i in range(l):
if n in ['ン','ー','ッ']:
# 'ン','ー','ッ'は連続して使えない
notes.remove(n)
if n in ['ン','ー']:
# 'ン','ー'の後には'ッ'は使えない
notes.remove('ッ')
else:
notes = copy(BASE)
# 'ッ'は最後の文字には使えない
if i == l - 1 and 'ッ' in notes:
notes.remove('ッ')
n = random.choice(notes)
name += n
return name
for i in range(10):
print(naming())
$ python name.py
ヒュノゾ
ツァシュイケソヒ
ハゾイス
ティニャマブベ
キチョチェズ
ビョヤ
ネニパネビャヴェ
ビビソ
ムジビャ
ヅゲジェド
ユニークな名前ができました!
実際には(?)重複チェックとかもしないとダメですね。