ランダムな単語を生成するには多くの方法があります。セットからランダムな音節を取り出すことができます。nタプル、おそらくニューラルネットワークを使用できます(何ができないのですか?)、子音と母音を交互に使用します。この課題の基本となる方法は、最悪です。マルコフ連鎖を使用してランダムな単語を生成します。あなたがマルコフ連鎖に精通しているなら、おそらくこの方法がそれほどひどい理由を知っているでしょう。
マルコフ連鎖について読みたい場合は、ここをクリックしてください。
プログラムは、重み付けされたマルコフ連鎖の方法によって、1つ以上の単語を入力として受け取り、ランダムな単語を1つ生成します。それはおそらく私以外には理解できないので、以下の入力を伴うマルコフ連鎖の画像を使用して説明しますabba
。
(すべてのエッジの重みはすべての画像で同じです)プログラムは、入力テキストに基づいてマルコフ連鎖を介してパスを出力します。ご覧のとおり、出力される確率は1/2 a
、確率は1/8、確率はaba
1/16、確率はabba
32 分の1 ababa
などです。
マルコフ連鎖の他の例をいくつか示します。
yabba dabba doo
wolfram
supercalifragilisticexpialidocious
さらに例が必要な場合は、これを使用してください。(私はそれにあまりにも努力しすぎました)
チャレンジの詳細:
- 入力は、文字列のリスト、またはスペース、コンマ、または改行で区切られた文字列として受け取ることができます
- あなたはすべての単語が句読点なしで完全に小文字であると仮定するかもしれません(ASCII 97-122)
- プログラムまたは関数のいずれかを記述できます
- テストするには、例を入力して、すべての入力がマルコフ連鎖と一致するかどうかを確認できます
これはcode-golfなので、プログラムはバイト単位でスコアリングされます。
これについて不明な点がある場合はお知らせください。わかりやすくするよう努めます。
b
ことができないように見える場合があります(たとえば、「yabba dabba doo」。自己ループがないため、doubleを生成できませんb
。さらに、一度到達するb
と、に戻りstart
、他の単語を生成します)。要件を明確にする必要があると思います...
yabba dabba doo
は事故です。できるだけ早く修正します。最初からやり直すことができないことに関しては、与えられた単語のセットから1つの単語のみを生成します。それはそれを明確にしますか?