実現したいこと
- 任意の文字列を入力として、0~4の範囲で数字を出力する
- 同一の文字列に対しては、必ず同一の数字を出力する
- 出力する数字は十分にランダム性を担保する必要がある
- hash関数を用いたときと同等ほどの高速な処理が必要
試したこと
python
1import random, string 2# 1000個のランダムな文字列を生成 3strings = [''.join(random.choice(string.printable) for _ in range(20)) for _ in range(1000)] 4 5%timeit [hash(s) % 5 for s in strings] 6>>> 143 µs ± 4.91 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each) 7# hash関数は非常に高速ですが、実行プロセスが変更されると、異なるハッシュ値を返すので、2番の要件を満たせない 8 9import hashlib 10%timeit [int(hashlib.md5(s.encode()).hexdigest(), 16) % 5 for s in strings] 11>>> 938 µs ± 29 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) 12# hashlibを使用することで、2番の要件は満たせますが、実行速度が低下します
当方の実行環境(参考)
- Python 3.7
- OS: Windows10 64bit
- RAM: 16.0GB
- CPU: Intel Core i7-7700K
※ 実行時間の計測には、IPython の timeit を使用しました
回答1件
あなたの回答
tips
プレビュー