発音可能な単語を生成する


16

課題は簡単です。

単語を生成します。

仕様:

  • Wordは発音可能でなければなりません。
    • これは、「子音と母音の交代」と定義されています。
    • 子音は、次の文字のいずれかです。 bcdfghjklmnpqrstvwxz
    • 母音は、次の文字のいずれかです。 aeiouy
  • Wordはランダムに生成する必要があります。
  • 単語には、すべての子音と母音を含めることができる必要があります。(bcdf子音やaei母音だけに使用することはできません。)
  • Wordには10文字を含める必要があります。
  • 最短のコード(文字数)が優先されます。


7
では、このXKCDストリップを念頭において、プログラムは、echo buxitiwymu技術的仕様に準拠しています。単語をランダムに生成しました
。P– AardvarkSoup

1
@AardvarkSoup「言葉がすべての子音と母音を含むことができなければなりません」
ドアノブ

1
@Kartikは文脈に依存します。「はい」は子音、「なぜ」は母音ですが、これにより、母音と子音を交互に繰り返す発音可能な単語を定義できなくなります。yyyyyyyyは有効な単語です。
-CJStuart

1
しばらく前に実際にScratchでジェネレータを作成しました。それはあなたが扱うことができるときに特定のルールだったyあなたが使用することができ母音、などをqしてx、そして次のような2文字の組み合わせを使用することができたときngea
Esolangingフルーツ

回答:



8

ルビー:56文字

([v=%w(a e i o u y),[*?a..?z]-v]*5).map{|a|$><<a.sample}

出力例:

  • イトピトジョグ
  • ウマプジョジム
  • イパゴドゥサス
  • yfoqinifyw
  • エビリポディス

1
'aeiouy'.chars1文字短くなります。
ハワード

@Howard次いで減算オペレータレイズTypeError: can't convert Enumerator into Array
ジョンドヴォルザーク

@JanDvorak申し訳ありませんが、このトリックにはRuby 2.0が必要であることを忘れていました。
ハワード

7

Python、81

from random import*
print''.join(map(choice,["bcdfghjklmnpqrstvwxz","aeiouy"]*5))

それらを発音する幸運。


彼らは、例えば私が得た最初の言葉は「viketuziwo」だった、発音に非常に簡単、実際にしている:P
ドアノブ

@Doorknob多分それはちょうど私の運だ。「qijepyjyga」のような「単語」を取得し続けます。私のコンピューターがそれらを発音する試みはそれを
補い

3
python grc.py | sayは自分のマシンでたくさんのことを楽しんでいた。アイデアをありがとう。
カヤ

7

COBOL、255

ですから、現時点ではCOBOLを学んでいます。この質問を練習として使用しました。それをゴルフしようとしました。

先頭の空白を除いた255で、286バイトです。

価値のあることは、これはVS2012のMicrofocus COBOLで実行され、他の場所で実行されるかどうかはわかりません。

       1 l pic 99 1 s pic x(26) value'aeiouybcdfghjklmnpqrstvwxz' 1 r
       pic 99 1 v pic 9 1 q pic 99. accept q perform test after varying
       l from 1 by 1 until l>9 compute v=function mod(l,2) compute r=1+
       function random(q*l)*5+v*15+v*5 display s(r:1)end-perform exit


6

JavaScript、74

for(a=b=[];a++-5;)b+="bcdfghjklmnpqrstvwxz"[c=new Date*a%20]+"aeiouy"[c%6]

すべての組み合わせが生成されるわけではありませんが、すべての子音と母音が表示されると思います。

JavaScript、79

for(a=b=[];a--+5;)b+="bcdfghjklmnpqrstvwxz"[c=Math.random()*20^0]+"aeiouy"[c%6]

より「ランダムな」バージョン。


何の^0ためですか?
アルファ

1
@Alpha Math.randomはfloatを提供します。整数が必要です。^0番号を切り捨て
ます

巧妙なトリック。^JavaScriptで演算子を見るのは初めてで、それを使用してfloatを切り捨てることについてはあまり聞いていません。ありがとう!
アルファ

@copy iの使用が好き^
Math chiller

4

ルビー:70 66文字

10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}

サンプル実行:

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
izogoreroz

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
onewijolen

bash-4.1$ ruby -e '10.times{|i|$><<["aeiouy"*4,"bcdfghjklmnpqrstvwxz"][i%2][rand 20]}'
amilyfilil

10.times1文字少なくすることができます。
ハワード

1
また、質問では、各文字が同じ確率である必要はありません。*10-> *4、skip *3rand 60-> rand 203文字保存しました。
ハワード

@Howard、ルールをよく理解してください。ありがとうございました。
マナトワーク

4

R:105文字

a=c(1,5,9,15,21,25)
l=letters
s=sample
cat(apply(cbind(s(l[-a],5),s(l[a],5)),1,paste,collapse=""),sep="")


4

処理中、100 99 93 87

int i=10;while(i-->0)"aeiouybcdfghjklmnpqrstvwxz".charAt((int)random(i%2*6,6+i%2*i*2));

質問を詳しく調べてみると、出力を必要としません。これに応じて調整しました。


3

Objective-C、129

main(){int i=10;while(i-->0)printf("%c",[(i%2==0)?@"aeiouy":@"bcdfghjklmnpqrstvwxz"characterAtIndex:arc4random()%(6+(i%2)*14)]);}

ダニエロの助けを借りて

(私は傾向演算子を使用するの大好きです(->)


3

Java AKAは、これまでに作成された中で最も冗長な言語 です。

class w{public static void main(String[]a){int i=11;while(--i>0)System.out.print((i%2==0?"aeiouy":"bcdfghjklmnpqrstvwxz").charAt(new java.util.Random().nextInt(6+(i%2)*14)));}}

ゴルフをしていない:

    class w {

        public static void main(String[] a) {
            int i = 11;
            while (--i > 0) {
                System.out.print((i % 2 == 0 ? "aeiouy" : "bcdfghjklmnpqrstvwxz").charAt(new java.util.Random().nextInt(6 + (i % 2) * 14)));
            }
     }

}


1
提案の改善:変更String a[]するString[]a(-1文字)、変化w W = new w();するw W=new w();(-2文字)
ドアノブ

提案:単語は常に子音(または小声)で始まるようにします。質問で言及されていない場合、これをランダム化する必要はありません!したがって、ブール値fをスキップしてi%2代わりに使用します。また、forループを短くすることができ、両方の文字列を条件演算子の中に入れて(また、ここに括弧は必要ありません)、charAt外側で使用できます。195 CHARS、38 SAVEDがすべてです:import java.util.*;class w{public static void main(String[]a){Random r=new Random();for(int i=0;++i<11;)System.out.print((i%2>0?"bcdfghjklmnpqrstvwxz":"aeiouy").charAt(r.nextInt(6+(i%2)*14)));}}
-daniero

2
「Java AKAは、これまでに作成された中で最も冗長な言語です」- シェークスピアを試したことはありますか?;-)
マナトワーク

1
@ manatwork、1つの場所でのみ使用されるようになったら、インポートを削除することを忘れないでください。
ピーターテイラー

1
@manatworkたぶん私たちはLispが好きですか?? [OK]を、申し訳ありませんが、私は仕事から家に帰るときから、それらの括弧を取るつもり
jsedano

3

Javascript、85

for(r=Math.random,s="",i=5;i--;)s+="bcdfghjklmnpqrstvwxz"[20*r()|0]+"aeiouy"[6*r()|0]

コンソールから実行すると、出力が表示されます。明示的な表示が追加されますalert(s) 8文字れ、他のJSソリューションよりも短くなります。

C5H8NNaO4とハワードに感謝します!


いいですね、最後の「;」を削除してキャラクターを保存します
C5H8NNaO4

1
代わりに、4文字を節約~~(###)するように書くことができます###|0
ハワード

3

Javascript、135 122 96 86文字

s='';c=5;r=Math.random;while(c--)s+='bcdfghjklmnpqrstvwxz'[r()*20|0]+'aeiouy'[r()*6|0]


3

Unixツール:73バイト

実行時間の保証はありません:)

</dev/urandom grep -ao '[aeiouy][bcdfghjklmnpqrstvwxz]'|head -5|paste -sd ''

唯一の問題は、生成される文字列が毎回「母音」で始まることです。

(編集:変更 ' 'への''ペーストの引数に)(別の編集:grepのオプションから削除-P、おかげmanatwork


grepパラメータに基づいて何かを微調整することができます。「e ap ag ak」を取得しました。
マナトワーク

うーん...奇妙な。そのようなものは何もありませんでした。-a十分だと思いました。
-pgy

1
私のテストはそれ-Pがそれであることを示しています。男は、その非常に実験的な状態について、理由を付けて警告しているようです。(grep2.16)しかし、とにかく、それは問題なく動作し-Pます。
マナトワーク

あなたは正しいです、ありがとう、私はそれを考慮しませんでした。-Pそもそもなぜ使ったのかさえ分かりません。答えを編集します。
-pgy

1
ちなみに、tr -d \\nラインを結合するための短いです。
マナトワーク

3

Pyth、26文字

J-G"aeiouy"VT=k+kOJ=J-GJ;k

こちらのオンラインコンパイラで試すことができます。

誰かが非常によく似た課題を投稿しましたが、解決策を講じた後で終了しました。私はそれを理解していませんでしたが、この質問は実際にはPythの作成よりも前のものです。とにかく、内訳は次のとおりです。

J                             Set string J equal to:
  G                            the entire alphabet (lowercase, in order)
 - "aeiouy"                    minus the vowels
           VT                 For n in range(1, 10):
             =k                   Set string k to:
                k                  k (defaults to empty string)
               + OJ                plus a random character from J
                   =J             Set J to:
                      G            the entire alphabet
                     - J           minus J
                        ;     End of loop
                         k    print k

Every time the loop is run, J switches from being a list of consonants to a list of vowels. That way we can just pick a random letter from J each time.
There may be a way to initialize J in the loop or remove the explicit assignments from the loop, but I have not had success with either yet.


1
Bumping old questions is generally considered fine. However, when you use a language newer than the question (I created Pyth in 2014) you should note this in your answer.
isaacg

Thanks for clearing that up for me. I didn't realize that Pyth was created after this question and I've added that to the answer.
Mike Bufardeci

3

APL 30 26

,('EIOUY'∪⎕A)[6(|,+)⍪5?20]

Explanation is very similar to the past version below, just reordered a bit to golf the solution.

Note: ⎕IO is set to 0


('EIOUY'∪⎕A)[,6(|,(⍪+))5?20]

Explanation:

'EIOUY'∪⎕A    puts vowels in front of all letters.
5?20            for the indexes we start choosing 5 random numbers between 0 and 19
6(|,(⍪+))        then we sum 6 and the random numbers, convert to 5x1 matrix (⍪), add a column before this one containing 6 modulo the random numbers. 
                [[[ this one can be rewritten as: (6|n) , ⍪(6+n)  for easier understanding]]]
,6(|,(⍪+))5?20  the leading comma just converts the matrix to a vector, mixing the vowel and consonants indexes.

Tryapl.org


1
('AEIOUY'∪⎕A) ≡ (∪'AEIOUY',⎕A) but it's one byte shorter.
lstefano

1
Deferring 'A' to ⎕A saves another byte: ,('EIOUY'∪⎕A)[6(|,+)⍪5?20]
Adám

Nice! down to 26. Thanks
Moris Zucca

2

PHP 79 bytes

<?for($c=bcdfghjklmnpqrstvwxz,$v=aeiouy;5>$i++;)echo$c[rand()%20],$v[rand()%6];

Fairly concise.


2

C: 101

main(){int x=5;while(x-->0){putchar("bcdfghjklmnpqrstvwxyz"[rand()%21]);putchar("aeiou"[rand()%5]);}}

2

Javascript, 104 87

a="";for(e=10;e--;)a+=(b=e&1?"bcdfghjklmnpqrstvwxz":"aeiouy")[0|Math.random()*b.length]

golfed a whole lot of simple unnecessary stuff, still not nearly as nice as copys' one

Oh, and that one just opped up during golfing: "dydudelidu"

Now I tried one using the 2 characters at once approach. Turns out it's almost the same as copys' second one, so I can't count it, also at 79. a="";for(e=5;e--;)a+="bcdfghjklmnpqrstvwxz"[m=0|20*Math.random()]+"aeiouy"[m%6]


2

Brachylog, 9 bytes

Ḍ;Ẉṣᵐzh₅c

Try it online!

Gives output as a list of letters through the output variable.

   ṣ         Randomly shuffle
 ;  ᵐ        both
Ḍ            the consonants without y
  Ẉ          and the vowels with y,
     z       zip them into pairs,
      h₅     take the first five pairs,
             and output
        c    their concatenation.

1

F#, 166 characters

open System;String.Join("",(Random(),"aeiouybcdfghjklmnpqrstvwxz")|>(fun(r,s)->[0..5]|>List.collect(fun t->[s.Substring(6+r.Next()%20,1);s.Substring(r.Next()%6,1)])))

1

K, 40 bytes

,/+5?/:("bcdfghjklmnpqrstvwxz";"aeiouy")

5?"abc" will generate 5 random letters from the given string.

5?/: will generate 5 random letters from each of the strings on the right, producing two lists.

+ transposes those two lists, giving us a list of tuples with one random character from the first list and then one from the second list.

,/ is "raze"- fuse together all those tuples in sequence.

K5 can do this in 33 bytes by building the alphabet more cleverly and then using "except" (^) to remove the vowels, but K5 is much too new to be legal in this question:

,/+5?/:((`c$97+!26)^v;v:"aeiouy")

1

R, 83 bytes

cat(outer((l<-letters)[a<-c(1,5,9,15,21,25)],l[-a],paste0)[sample(1:120,5)],sep="")

Generate all possible vowel-consonant sequences in a matrix, then randomly sample 5 of them, yielding a 10-letter word.



0

Jelly, 13 bytes

Øy,ØYẊ€Zs5ḢŒl

Explanation:

Øy,ØYẊ€Zs5ḢŒl
Øy,ØY         Makes a list of two lists of characters: [[list-of-vowels-with-y], [list-of-consonants-without-y]]
     Ẋ€       Shuffle €ach.
       Z      Zip those two lists together. [[random-vowel, random-consonant],...]
        s5    Split them into chunks of five (because each pair contains two letters, this splits them into chunks of 10 letters)
          Ḣ   Take the list of 5 pairs.
           Œl Make each of the characters in it lowercase
              Implicit concatenation and print.

Try it online!

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