大きくて「一意の」整数(実際にはSHA1ハッシュ)があります。
注:ここでSHA1ハッシュについて話している間、これは暗号化/セキュリティの質問ではありません!私はSHA1を壊そうとはしていません。それが役立つ場合は、SHA1の代わりにランダムな160ビット整数を想像してみてください。
私は(楽しむ以外の理由はありませんが)そのSHA1ハッシュをコンピューターで生成された(疑似)英語のフレーズにマップするアルゴリズムを見つけたいと思っています。マッピングは双方向である必要があります(つまり、アルゴリズムを知っていると、そのフレーズから元のSHA1ハッシュを計算できる必要があります)。
フレーズは意味をなす必要はありません。私はナンセンスの段落全体でさえ解決するでしょう。(ただし、段落の品質(英語性)は、単なるフレーズよりも優れているはずです。)
より良いアルゴリズムは、より短く、より自然に見える、よりユニークなフレーズを生成します。
バリエーション:ハッシュの一部しか扱えなくても大丈夫です。たとえば、最初の6桁の16進数で問題ありません。
生成されたフレーズの可能な使用法:GitコミットIDの人間が読めるバージョン。そのコミットから構築された、特定のプログラムバージョンのモットーとして使用します。(私が言ったように、これは「楽しみのため」です。これが非常に実用的であるとは言いません。または、SHA1自体よりもはるかに読みやすくなっています。)
考えられるアプローチ:過去に、SHAから読み取ったビットに従って、(単語の)確率テーブルを作成し、マルコフ連鎖としてフレーズを生成し、ジェネレーターをシード(確率ツリーからブランチを選択)しようとしました。これはあまり成功しませんでした、結果として生じるフレーズは長すぎて醜いものでした。これがバグなのか、アルゴリズムの一般的な欠陥なのかはわかりません。十分に早く放棄しなければならなかったからです。
今、もう一度問題を解決しようと考えています。これにアプローチする方法について何かアドバイスはありますか?マルコフ連鎖アプローチがここで機能すると思いますか?他に何かありますか?