音節の発音可能なナンセンスワードを生成する


15

あなたの仕事は、指定された数の「音節」で合理的に発音できるナンセンスな単語を生成することです。プログラムが実行されるたびに、異なる意味のない単語が生じる可能性があります。

発音性

発音可能な単語は、2つの子音グループに挟まれている可能性のある母音グループで構成される音節で構成されます。すべての音がすべての位置で発音できるわけではなく、これは言語に依存するため、英語話者が理解できるパターンを使用します

子音グループの開始:

b c d f g h j k l m n p r s t v w y z bl br ch cl cr dr dr fr fr gh gl gn gr kn ph pl pr qu sc sh sk sl sm sn sp st th tr wh wr sc scr shm shr squ str thr

母音グループ:

a e i o u ae ai ao au ea ee ei eu eu ie ie io oa oe oe oi oo ou ue ui

子音グループの終了:

bcdfglmnprstxz bt ch ck ct ft gh gn lb ld lf lk ll lm ln lp lt mb mn mp nk ng nt ph pt rb rc rd rf rg rk rl rm rn rp rt rv rz sh sk sp ss st zz lch lsh lsh lsh ls rth sch tch

音節の結合

一般に、子音グループの開始と終了の両方はオプションですが、母音で始まる音節の直前に母音で終わる音節を置くことはできません。

免責事項

単純さのために、真空、木琴、ニーモニック、テロダクティル、美しい、何とか、彼ら、すごい、ほとんどの複数形など、特定の英語の単語は実際にはこの方法では生成できません。

概要

このキーを使用して可能な音節パターン:

(SC)=子音の開始; (V)=母音グループ; (EC)=終了子音

1音節の場合:

  • (SC)(V)(EC)
  • (V)(EC)
  • (SC)(V)
  • (V)

2音節の場合:

  • (SC)(V)(EC)(SC)(V)(EC)
  • (SC)(V)(EC)(SC)(V)
  • (SC)(V)(EC)(V)(EC)
  • (SC)(V)(EC)(V)

  • (SC)(V)(SC)(V)(EC)

  • (SC)(V)(SC)(V)

  • (V)(EC)(SC)(V)(EC)

  • (V)(EC)(SC)(V)
  • (V)(EC)(V)(EC)
  • (V)(EC)(V)

  • (V)(SC)(V)(EC)

  • (V)(SC)(V)

... 等々

1音節

  • チャースト
  • タイト
  • 悲鳴を上げる
  • ええ
  • シュー
  • ああ
  • チージー

2音節

  • ジャズスクラップ
  • なぜか
  • 食べる
  • ウンバ
  • オラ
  • 持ってる
  • ingsoc
  • グレスフォーズ
  • ブリュースプー

3音節

  • ブローキムピック
  • スクイーズ
  • 資本
  • opengtrass
  • 二重に考える
  • 兄貴
  • フェブリャプトムー
  • スコルフブラウケント

4音節

  • わらじ
  • パッチワークゾンビ
  • プレアネアジョーミー
  • slephotoschou
  • ダブルプラス

コーディング

入力:生成する音節の数の整数

出力:多くの音節が長い(おそらく)無意味な単語

ルール

  • 何らかの形式の(擬似)ランダム性が必要です。音節のすべての組み合わせは、(理論的には)生成可能でなければなりませんが、分布は均一である必要はありません。
    • ジェネレータは非周期的であると仮定することができるので、可能性のあるすべての単語を数学的に生成する必要はありません(実際には十分な期間がない場合があります)。ジェネレータは、実際には、可能なすべての単語を生成できます。
    • ジェネレーターは、少なくとも255個の異なる値を実際に生成できる必要があるため、ジェネレーターが呼び出されるたびに4を返すだけではいけません。
    • 最終的に重要なのは、コードに上記のすべての文字グループを何らかの形で含めること、各文字グループが選択されるゼロ以外の確率、および各音節パターンがゼロ以外の確率で発生することです(真のランダム性が提供されている場合)。
  • 最大16音節の単語をサポートする必要があります
  • 音節の結合に関する規則に加えて、出力ワードには以下を含めることはできません。
    • 3つの連続した母音(a e i o u;これはqu単語の場合に起こります)
    • 3つの連続する一致子音

幸運を!


これは、いくつかの理由で発音可能な単語生成することとは異なることに注意してください。

  • 厳密な10文字の要件ではなく、入力によって指定された可変数の音節。
  • このチャレンジは、(巧妙に)エンコードする必要がある非網羅的な文字グループを追加し、音節のバリエーションを増やすことができるため、他のチャレンジからコードをコピーすることはできません
  • リスリッカー。もっと言う必要がありますか?

私もチェックを欺くことを忘れていましたが、これは重要ではないテーブルに十分に新しいものをもたらすことがわかりました。結局のところ、何百もの変種の課題があります。


2
「私はチェックを欺くことも忘れていましたが、これはテーブルに十分な新しいものをもたらし、それは重要ではないことがわかりました。」誰かがこれを確認しましたか?これは必ずしも真実ではないように感じます
...-Quintec

2
子音と母音の3つの長いリストを考えると、大量の「ハードコード化」が必要であるためにダウンボット
スティーブン

1
この課題の品質に合わせて、例としてdoubleplusgoodを追加することをお勧めします。

1
なぜ「squirds c hlicker」ではないのですか?連続子音で「強さ」を打つことを得た:)
懲罰

回答:


4

JavaScriptの(ES6)、 407の  403バイト

f=n=>/[aeiou]{3}|(.)\1\1/.test(s=(h=k=>k?(g=s=>p=s.match(/.[a-z]*/g)[Math.random()*99|0]||(s>x&&p?'':g(s)))(x+'lBrClCrDrFlFrGlGrHJKKnPlPrQuScScrShmShrSlSmSnSquStrThThrTrVWWhWrY')+g('AAeAiAoAuEEaEeEiEuIIaIeIoOOaOeOiOoOuUUeUi')+g(x+'tCkCtFtLbLchLdLfLkLlLmLnLpLshLtLthMbMnMpNgNkNtPtRbRcRchRdRfRgRkRlRmRnRpRshRstRtRthRvRzSsTchXZz')+h(k-1):'')(n,p=x='BCChDFGGhGnLMNPPhRSSchShSkSpStTZB').toLowerCase())?f(n):s

オンラインでお試しください!


これ[^aeiou]{3}は正しいですか?「一致」という単語と、次squirdshlickerを含む3音節の例に基づくrdshl OP bbbは一般に3つの隣接する子音ではなく、同じ隣接する子音の3つのみを意味する(つまり許可されない)と思います。
ケビンクルーッセン

2
@KevinCruijssenチャレンジをもう一度読んで、あなたの解釈が正しいことはほとんど疑いがないと思います。そこで、それに応じてコードを更新しました。
アーナルド

3

05AB1E237 234 230 228 バイト

.•O0¦"ÐD›ô:ΓF9—∊‘àÕGÌ•3LŽZв₂в×S£V[1U.µ\µTΩiY.•1θ₆Ω–¸‡ÊΔιÃмº³ô»ÝAïG3_@|å“₄bÒs₃l¬t©ïÙK:≠•3LŽII₂в×S£«Ω1U}XižM•·Áy&ŒGηΩ¼αŸKq•6вèJ•Λ1"•bS>£Ω¼0U}TΩiY.•E–æƵHl¨åñyBY±(ú,ā]JùË‚aEuŒ—[K³|C~ôÙŸ„#¼ÑûĀdš+¢zsÄΘä¹ÊÌ₅ôθ•3LŽAE₆в×S£«Ω1U}J}Dγ€g3‹P#

@MagicOctopusUrnのおかげで-2バイト。

オンラインで試す、さらにいくつかの出力を取得します

説明:

.•O0¦"ÐD›ô:ΓF9—∊‘àÕGÌ•
                  "# Push compressed string "bcdfglmnprstzchghgnphshskspstsch"
  3L               # Push list [1,2,3]
    ŽA;            # Push compressed integer 8997
       ₂в          # Converted to Base-26 as list: [13,8,1]
         ×         # Repeat the digits [1,2,3] that many times: ["1111111111111","22222222","3"]
          S        # Convert it to a list of flattened digits
           £       # Split the string into parts of that size
            V      # Pop and store this string-list in variable `Y`
[                  # Start an infinite loop:
 1U                #  Reset variable `X` to 1
                 #  Reset the counter_variable to 0
 \                 #  Discard the top of the stack (if any)
 µ                 #  Loop while the counter_variable is not equal to the (implicit) input:
  TΩi              #   If a random boolean is truthy:
     Y             #    Push the string-list we stored in variable `Y`
     .•1θ₆Ω–¸‡ÊΔιÃмº³ô»ÝAïG3_@|å“₄bÒsl¬t©ïÙK:≠•
                   #    Push compressed string "hjkvwyblbrclcrdrflfrglgrknplprquscslsmsnthtrwhwrscrshmshrsqustrthr"
       3L          #    Push list [1,2,3]
         ŽII       #    Push compressed integer 4608
            ₂в     #    Converted to Base-26 as list: [6,21,6]
              ×    #    Repeat the digits [1,2,3] that many times: ["111111","222222222222222222222","333333"]
               S   #    Convert it to a list of flattened digits
                £  #    Split the string into parts of that size
     «             #    Merge it with list `Y`
      Ω            #    Pop and push a random starting consonant group from this list
     1U            #    And set variable `X` to 1
    }              #   Close the if-statement
  Xi               #   If variable `X` is 1:
    žM             #    Push builtin string "aeiou"
      •·ÁyGηΩ¼αŸKq
                   #    Push compressed integer 13814931869773709280202935082102
        6в         #    Converted to Base-6 as list: [1,0,1,1,1,2,1,4,0,1,0,2,0,3,0,4,2,0,2,1,2,3,3,0,3,1,3,2,3,3,3,4,4,1,4,2,0,1,2,3,4]
          èJ       #    Index each into the string "aeiou", and join together: "aeaiaoaueaeeeieuiaieiooaoeoiooouueuiaeiou"
      •Λ1"•       "#    Push compressed integer 8388576
           b       #    Converted to binary: "11111111111111111100000"
            S>     #    Split into a list of digits, and each increased by 1
              £    #    Split the string into parts of that size
               Ω   #    Pop and push a random vowel group from this list
    ¼              #    Increase the counter_variable by 1
    0U             #    And then set variable `X` to 0
   }               #   Close the if-statement
  TΩi              #   If a random boolean is truthy:
     Y             #    Push the string-list we stored in variable `Y`
     .•E–æƵHl¨åñyBY±(ú,ā]JùË‚aEuŒ—[K³|C~ôÙŸ„#¼ÑûĀdš+¢zsÄΘä¹ÊÌ₅ôθ•
                   #    Push compressed string "xbtckctftlbldlflklllmlnlpltmbmnmpnkngntptrbrcrdrfrgrkrlrmrnrprtrvrzsszzlchlshlthrchrshrstrthtch"
       3L          #    Push list [1,2,3]
         ŽAE       #    Push compressed integer 2564
            ₆в     #    Converted to Base-36 as list: [1,35,8]
              ×    #    Repeat the digits [1,2,3] that many times: ["1","222...222","33333333"]
               S   #    Convert it to a list of flattened digits
                £  #    Split the string into parts of that size
     «             #    Merge it with list `Y`
      Ω            #    Pop and push a random ending consonant group from this list
     1U            #    And set variable `X` to 1
    }              #   Close the if-statement
  J                #   Join all strings on the stack together
 }D                #  After the while-loop: duplicate the resulting string
   γ               #  Split the copy into chunks, with adjacent characters that are
                   #  the same grouped together
    g             #  Get the length of each chunk
      3           #  Check for each length if it's smaller than 3
        P          #  Check if all are truthy by taking the product, and if it is:
         #         #   Stop the infinite loop
                   # (after which the string at the top of the stack is output implicitly)

この05AB1Eのヒント(「辞書にない文字列を圧縮する方法」「大きな整数を圧縮する方法」、および圧縮整数リストには?どのように圧縮部品の動作方法を理解するために。


1
またžM•ô#‰¦λu¢!¡°gU€•6BS<èJ、4よりも小さくなります.•!m1±P1Ÿ6ºZ dâ4∍m–G¢”ãÔ2g•(ベース6の変換および組み込みのAEIOUを使用した置換)。TIOリンクが長すぎます。
魔法のタコUr

よろしくお願いします!でさらに2バイト節約しましたžM•·Áy&ŒGηΩ¼αŸKq•6вèJ。:) PS:他のほとんどのSEとは異なり、PPCGではtinyurl.comのようなURL短縮サービスを使用できます。:)
ケビンクルーイッセン

1

ゼリー、231バイト

e€ØẹŒrḢƇ,ŒɠF>2Ẹ
“yŒʠT¬ḅɼṬɦṀUżGv¶æɲCĊQ>ṙȦẇɼṄ0IḤhDẋDċṀĊṪɗĖƇẊ;1JƒṾỊżỵhṖ8>Ȯ⁶]¦Qṭ|Ṛṇẹm⁵ØKƈBNɦÇȯ¢ṣḟPṇMʠ¬YėĊÇẒỊĿXJÑḷÞeȮȮɼ$ỴœeṂṠɲẓḊ⁺ċŻ⁽⁶Ẓ⁹<>#nẇṬ⁴\¤ÐṡḞF5ƙẇwḶȤYḍ¡¢~ṚⱮ-ṃƲ⁻Ṙ6ɱṬ?İẆḌỊþEØ»Ḳµe€ØẹIkḣ3)Z;€“squ“qu”$1¦
“ئµ£‘ḃ3$Xµ³Ð¡ḊFµ⁺wØ2$¿ịÇX€Fß¹Ñ?

オンラインでお試しください!

必要な音節の数である単一の引数を取る完全なプログラム。

説明

このコアは、66ワードの圧縮された辞書文字列です。単語が子音と母音のグループに分割され、各単語に対して最初の3つのグループが使用される場合、質問から目的の開始グループ、母音グループ、および終了グループが生成されます。例外はあるqusqu、彼らは中母音を持っているので、ので、これらを手動で追加されます。単語リストは、Pythonスクリプトを使用してJelly辞書からアルゴリズム的に作成されました。いくつかの文字グループが繰り返されていることに注意してください。ただし、質問により、出力は可能な組み合わせのそれぞれを均一に表すことができません。これが望ましい場合、各グループを2バイトのコストで一意にすることは簡単Q€です()。

ヘルパーリンク1:3つ以上の母音が連続しているか、3つ以上の同じ文字が連続しているかを確認する
                | Sample input: branggag
e€Øẹ            | For each letter, is it a vowel? [0, 0, 1, 0, 0, 0, 1, 0]
    Œr          | Run-length encode [[0, 2], [1, 1], [0, 3], [1, 1], [0, 1]]
      ḢƇ        | Filter only those with true first value, popping first value [[1], [1]]
        ,       | Pair with
         Œɠ     | Run lengths of input [[[1], [1]], [1, 1, 1, 1, 2, 1, 1]
           F    | Flatten [1, 1, 1, 1, 1, 1, 2, 1, 1]
            >2  | Greater than 2 [0, 0, 0, 0, 0, 0, 0, 0, 0]
              Ẹ | Any 0
ヘルパーリンク2:3つの文字列グループ
“yŒʠ...þEØ»                          | Compressed string: shmooze gaolbird hailshot shriech waeful furze ghaut cruelness stealthier gneiss shoeshine wheelchair wring build priorship knosp spoilfive karst through coalpit teschenite schoolkid theurgic zabtieh skiamachies yirth snazzier slimnastics scripted smirch droskies strift blepharism chaulmoogra glegness scarf fratch clerk brank jarvey flourless vorpal grex nard plumb larn philter sorbo tractabilities parcel mart damp rearm back bast bag bant baba boll bad bap becap basal ban bail bare
           Ḳ                         | Split at spaces
            µ        )               | For each word: e.g. hailshot
             e€Øẹ                    |   Check whether each character is a vowel [0, 1, 1, 0, 0, 0, 1, 0]
                 I                   | Increments of this [1, 0, -1, 0, 0, 1, -1]
                  k                  |   Split word at truthy values of this [h, ai, lsh, o, t]
                   ḣ3                |   Take the first three [h, ai, lsh]
                      Z              | Transpose (so now have three lists, start consonants, vowels, end consonants)
                        €        $1¦ | For the first group
                       ; “squ“qu”    | Append squ and qu
メインリンク
          µ³Ð¡                     | Repeat the following the input number of times, collecting results:
“ئµ£‘                             |   18, 5, 9, 2
      ḃ3$                          |   bijective base 3: [1,2,3],[1,2],[2,3],[2]
         X                         |   Take one at random
              Ḋ                    | Remove first item (which will be the input to the link because if the way С works
               F                   | Flatten; we now have e.g. [1,2,3,2,3,1,2,3,2]. This corresponds to SC V EC V EC AC V EC V
                µ⁺    ¿            | Do everything so far once and then repeat while:
                  wØ2$             |   The output contains two twos (i.e. vowel-vowel)
                       ịÇ          | Look these up in the previous link, so we now have a group of letter groups for each position
                         X€F       | Pick a random letter group for each position
                            ß¹Ñ?   | If helper link 1 is true, retry the whole of this link again. Otherwise implicitly output

1
説明を見たいのですが、それは正しいのですか?gnuignaalfbiinput の出力を取得します4aa、チャレンジを正しく理解していなければ不可能です。音節を組み合わせるセクションには、「...、しかし、母音で始まる直前に母音で終わる音節を配置することはできません。
ケビンクルーイッセン

@KevinCruijssenはそれを見逃した。これでその要件も満たされるはずです。指摘してくれてありがとう
ニックケネディ

1
いい答えです。私はあなたがすべてのグループを作るのに使った辞書の文字列が好きです。Jellyの辞書にのような単語が含まれている理由はわかりませんがshmooze gaolbird hailshot shriech waeful furze ghaut、笑。xDとにかくJellyの辞書はどれくらいの大きさですか?
ケビンクルーッセン

1
@KevinCruijssen大。6文字未満の20453個の単語と227845個の大きな単語があります。
ニックケネディ

0

パイソン2522の 510バイト

from random import*
import re
c=choice
S,V,E=[map(str.lower,re.findall('[A-Z][a-z]*',x))for x in'BCDFGHJKLMNPRSTVWYZBlBrChClCrDrFlFrGhGlGnGrKnPhPlPrQuScShSkSlSmSnSpStThTrWhWrSchScrShmShrSquStrThr','AeAiAoAuEaEeEiEuIaIeIoOaOeOiOoOuUeUiAEIOU','BCDFGLMNPRSTXZBtChCkCtFtGhGnLbLdLfLkLlLmLnLpLtMbMnMpNkNgNtPhPtRbRcRdRfRgRkRlRmRnRpRtRvRzShSkSpSsStZzLchLshLthRchRshRstRthSchTch']
def f(n):w=c(['',c(S)]);exec"e=c(E);w+=c(V)[-(w[-1:]in V):]+c([c(S),e,e+c([x for x in S if x[0]*2!=e])])*(n>1);n-=1;"*n;return w+c(['',e])

オンラインでお試しください!


0

Pyth、346 335バイト

McG.u+NYr9,VHSlH1smjOgs@L"eaiou"jC" ¤E̽]¢¨¦l#"5,4 17*Vd,Og"bcdfghjklmnprstvwyzblbrchclcrdrflfrghglgngrknphplprquscshskslsmsnspstthtrwhwrschscrshmshrsqustrthr"[18 29 6)Og"bcdfglmnprstxzbtchckctftghgnlbldlflklllmlnlpltmbmnmpnkngntphptrbrcrdrfrgrkrlrmrnrprtrvrzshskspssstzzlchlshlthrchrshrstrthschtch"[13 43 8)tuaGO<W!eeG^,1Z2 2Q]1

こちらからオンラインでお試しください。


0

ルビー381の 379 375バイト

乱雑な正規表現の一致を使用して、子音グループを取得します。おそらく最適化できます。

->n,w=?a..s='zzz',a=[1]{s=(1..n).map{a=[w.grep(/^([^aeiouq]|[bcfgp][lr]|s?ch|dr|gn|kn|ph|s?qu|s[ct]r?|sh[mr]?|th?r?|s[klmnp]|wh|wr|gh)$/)+(a[-1]?[p]:[]),w.grep(/^[aeiou]{,2}$/),w.grep(/^([^aeiouqhjkvwy]|[bcflnprs]t|ck|gh|gn|l[bdfk-np]|m[bnp]|nk|ng|ph|r[bcdfgk-npvz]|[lr]?[stc]h|s[kps]|zz|rst|[st]ch)$/)<<p].map(&:sample)}*''while s=~/[aeiou]{3}|(.)\1\1|aa|eo|ii|iu|u[aou]/;s}

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.