ババブからzyzyzまでのすべての単語


38

あなたの仕事は、以下の構造を持つ5文字ごとの読み取り可能なリストを出力するプログラムを作成することです。

子音-母音-子音-母音-子音

出力はアルファベットごとにソートされ、1行に1つの単語があり、単語が2回繰り返されることはありません。小文字でも大文字でもかまいませんが、混在させることはできません。したがって、リストは次のように開始および終了できます。

babab  
babac  
babad  
...  
zyzyw  
zyzyx  
zyzyz 

母音はa - e - i - o - u - yであり、他の20個の英語のアルファベット文字は子音です。
単語は実際の辞書の単語である必要はありません。
最短のコードが優先されます。

注:数年前、私は大学のWebサイトでまさにそれを行ったプログラムを見つけました。私の姓と名がcvcvc制約に適合することがわかり、私は自分自身をグーグルで探していました。


7
ここには2つのことがあります。まず、このような言葉はとんでもない量です。エントリをどのようにテストしますか?また、その制約に適合する多くの名前があります。最初に思い浮かぶのはジェイコブですがルーカスのような他の人も
当てはまります-TrojanByAccident

9
@TrojanByAccident名前/英語の単語であるかどうかに関係なく、チャレンジには一致するすべての文字の組み合わせが必要だと思います。「単語は実際の辞書の単語である必要はありません。」
-trichoplax

3
@wilks 関連メタ投稿 -厳密なI / O形式は、このSEコミュニティでは高く評価されていません。この課題は、単語の間に改行を挿入するのではなく、cvcvc単語の生成に焦点を合わせていますか?
ジョンファンミン

1
@JungHwanMinリンクをありがとう、ここに初めて来て、私はこれについて知りませんでした。私はそれをすべてのcvcvc単語の読みやすいアルファベット順のリストと見なしました。したがって、大文字でも小文字でも問題ないことに同意しますが、1つの非常に長い文字列、または入れ子になった配列を言うと、技術的には有効ではないことも大きな答えにはなりません。
ウィルクス

2
この質問に対する賛成の回答をいくつか実行した結果、「出力は各行ごとにインクリメンタルになります」に準拠していないことは明らかです。この要件は緩和されていますか?もしそうなら、質問を編集してこれを反映できますか?回答が形式によって制限されていない場合、かなりのバイトを失う可能性があると考えています。
エルペドロ

回答:


28

Mathematica、72 65 61バイト

Print@@@Tuples@{a=##/(b=#5#9#15#21#25#)&@@Alphabet[],b,a,b,a}

テストのために、に置き換えることをお勧めPrint@@@""<>#&/@ます。Mathematicaは、288,000行を印刷するのに永久に時間を費やす代わりに、最初の数語と最後の数語を示す切り捨てられたフォームを表示します

説明

ついに文字列を分割する使用法を見つけました。:)

しばらくの間、文字列を追加または乗算する可能性に興味がありましたが、実際の使用例はかなり限られています。主点のようなものであること"foo"+"bar"、または"foo"*"bar"(その結果は、ショートフォームは"foo""bar")Mathematicaの完全に有効です。ただし、算術式の文字列をどう処理するかは実際にはわからないため、これらは未評価のままです。ただし、Mathematica 一般的に適用される単純化を適用ます。特に、文字列は正規の順序でソートされます(さまざまなケース、数字、および文字以外の文字を含む文字列のソートを開始すると、これはMathematicaでかなり混乱します)。 。さらに、"abc""abc"に簡略化されます"abc"^2(これは、文字列を繰り返した場合に問題になりますが、それもありません)、また、"abc"/"abc"実際にキャンセルされるようなものもあります(これも利用します)。

ここでゴルフをしようとしています。母音のリストと子音のリストが必要なので、それらをフィードしてTuplesすべての可能な組み合わせを生成できます。私の最初のアプローチは、単純な解決策でした:

Characters@{a="bcdfghjklmnpqrstvwxz",b="aeiouy",a,b,a}

その子音のハードコードされたリストは少し傷つきます。Alphabet安価な方法で母音を削除できた場合、Mathematicaにはそれを回避できるビルトインがあります。ただし、ここで注意が必要です。要素を削除する最も簡単な方法はComplementですが、次のオプションのいずれかを使用して長くなります:

{a=Complement[Alphabet[],b=Characters@"aeiouy"],b,a,b,a}
{a=Complement[x=Alphabet[],b=x[[{1,5,9,15,21,25}]]],b,a,b,a}

(文字列ではなく文字のリストを提供するCharactersため、全体に適用する必要はありませんAlphabet[]。)

それでは、算術ビジネスを試してみましょう。アルファベット全体をリストではなく文字の積として表す場合、キャンセル規則により、単純な分割により文字を削除できます。必要ないので、多くのバイトを節約できますComplement。さらに、"a""e""i""o""u""y"実際には1バイトよりも短いですCharacters@"aeiouy"。そのため、次のようにします。

a=##/(b="a""e""i""o""u""y")&@@Alphabet[]

どこに子音と母音の製品を保存しているab、それぞれ。これは、すべての引数を乗算し、##母音の積で除算する関数を作成することで機能します。この関数はアルファベットリストに適用され、各文字を個別の引数として渡します。

これまでのところは良いですが、今では

{a=##/(b="a""e""i""o""u""y")&@@Alphabet[],b,a,b,a}

の引数として、Tuplesそれらはまだリストでなく製品です。通常、それを修正する最短の方法はList@@@、先頭にa を置くことです。これにより、製品が再びリストになります。残念ながら、これらの7バイトを追加すると、単純なアプローチよりも長くなります。

ただし、Tuples内部リストの先頭はまったく気にしないことがわかります。もしあなたがそうするなら

Tuples[{f[1, 2], f[3, 4]}]

(はい、未定義の場合f。)以下が得られます:

{{1, 3}, {1, 4}, {2, 3}, {2, 4}}

List代わりにを使用したかのようにf。そのためTuples、これらの製品を実際にそのまま使用して、正しい結果を得ることができます。これにより、2つのハードコーディングされた文字列を使用した単純なアプローチよりも5バイト節約できます。

"a""e""i""o""u""y"はまだかなり迷惑です。ただし、ここでも数バイト節約できます!関数の引数は個々の文字です。したがって、正しい引数を選択するだけで、3つの文字列リテラルよりも短い文字列リテラルの代わりに再利用できます。私たちは、引数が必要#(の略#1)、 、#5、、#9 と。最後に配置する場合、(regex)は数字以外を追加できない完全なトークンであるため、それらを乗算するために追加する必要もありません。したがって、最終的には、さらに4バイト節約されます。#15#21#25#*#\d+#5#9#15#21#25#


11
説明を読みます。だから...基本的に魔法。
タリー

あなたのTuplesトリックに驚き、感動しました。それは完全に文書化されていませんよね?そして、2入力フォームが(少なくとも私には)頭を持っTuples[list,n]listいないことをどのように扱うかを考えると、予想外Listです!
シモンズ


1
@ngenisisその言葉遣いは非常に紛らわしいと思います。これは、複数のリストを使用するときに外部リストを参照するかどうかは明らかではないためです。確かTuples[f[{1,2}, {3,4}]]{f[1, 3], f[1, 4], f[2, 3], f[2, 4]}代わりに与えます。内側の頭が完全に無視されることは文書化されていません。
マーティンエンダー

@ASimmons cc。^
マーティン・エンダー

16

Perl、47バイト

#!perl -l
/((^|[aeiouy])[^aeiouy]){3}/&&print for a..1x5

シバンを1つとして数えます。

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


2
これは素晴らしい、よくできた!使用していない理由はsay何ですか?
ダダ

ありがとう。私は同意しないことを-M5.01「無料」でなければなりません。
プリモ

1
私はあなたの意見が好き-M5.010です。そして、ゴルフの興味深い部分は... に置き換えることprintではありませんsay
ダダ

-E(そしてその後say)景品ではありませんか?
ザイド

@Zaid Primoの最初のコメント
ダダ

11

Python 3-110バイト

a,b="bcdfghjklmnpqrstvwxz","aeiouy";print(*(c+d+e+f+g for c in a for d in b for e in a for f in b for g in a))

簡単なループの楽しみ:)


私たちのアイデアは同じだと思いますが、Python 3で10勝ちました!
エルペドロ

このアプローチを使用してpython2に相当するものを投稿しようとしていました。遅すぎる、代わりにあなたに投票。
クリスH

8

ルビー、72 71 52バイト

puts (?z..?z*5).grep /#{["[^aeiouy]"]*3*"[aeiouy]"}/

基本的なアイデアを提供してくれたValue Inkに感謝します。これにより60バイトになりました。


1
5文字の単語のリストを生成してを使用する方が簡単grepです。小文字の文字列を使用する範囲を生成すると、一連の小文字の単語のみが取得されます。puts ("babab".."zyzyz").grep /#{["[^aeiouy]"]*3*"[aeiouy]"}/60バイトの場合
値インク

7

05AB1E18 16バイト

05AB1ECP-1252エンコードを使用します。

žP3ãžO3ãâ€øJ€¨ê»

説明

žP3ã                # push all combinations of 3 consonants
    žO3ã            # push all combinations of 3 vowels
        â           # cartesian product
         €ø         # zip each pair of [ccc,vvv] (c=consonant,v=vowel)
           J        # join to list of strings ['cvcvcv','cvcvcv' ...]
            ۬      # remove last vowel from each
              ê     # sort and remove duplicates
              »     # join on newlines

テストのためにžP、いくつかの子音とžOいくつかの母音で置き換えることをお勧めします。

5つの子音と3つの母音を使用した例


デカルト積の適切な使用。それを考えなかったでしょう。
魔法のタコUr


7

ピュアバッシュ、74

v={a,e,i,o,u,y}
c={b,c,d,f,g,h,{j..n},{p..t},v,w,x,z}
eval echo $c$v$c$v$c

簡単なブレース拡張。

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


各項目が独自の行にある必要がある場合、次のようになります。

ピュアバッシュ、84

v={a,e,i,o,u,y}
c={b,c,d,f,g,h,{j..n},{p..t},v,w,x,z}
eval printf '%s\\n' $c$v$c$v$c

7

PHP、88 86 84 80バイト

きれいな文字列の増分:)
@Christophで6バイト節約

for($s=$v=aeiouy;++$s<zyzza;preg_match("#[^$v]([$v][^$v]){2}#",$s)&&print"$s
");

bababato からのすべての文字列をループしzyzyz、パターンに一致するかどうかをテストします。で実行し-nrます。


Lol、バグのある言語仕様でゴルフをするのが好きです
パトリックロバーツ

1
@PatrickRobertsこれはバグではありません。機能です。:DIは$a="001";$a++;、いつか整数への暗黙のキャストを埋め込んだのは悲しいです。それは非常に不便な変更でした。
タイタス

1
for($s=$v=aeiouy;++$s<zyzza;)preg_match("#[^$v][$v][^$v][$v][^$v]#",$s)&&print"$s\n";1文字節約できます。悲しいことに、使用するにはechoをprintに変更する必要があります&&\n実際の改行に置き換えると、別の改行が保存されます。
クリストフ

1
あなたはいくつかの文字を使用して保存するかもしれません"#([^$v][$v]){2}​[^$v]#"が、私はそれをテストしていません。
クリストフ

1
@Christoph:Idkの理由ですが([^$v][$v]​){2}[^$v]、ループでは動作しませんが、動作[^$v]([$v]​[^$v]){2}します。ただし、両方ともスタンドアロンで動作します(変数を使用しても)。
タイタス

6

MATL、21バイト

11Y2'y'h2Y2X~6Myyy&Z*

オンラインでお試しください!(ただし、出力は切り捨てられます)。

11Y2   % Push 'aeiou' (predefined literal)
'y'    % Push 'y'
h      % Concatenate: gives 'aeiouy'
2Y2    % Push 'abcdefghijklmnopqrstuvwxyz' (predefined literal)
X~     % Set symmetric difference: gives 'bcdfghjklmnpqrstvwxz'
6M     % Push 'aeiouy' again
yyy    % Duplicate the second-top element three times onto the top. The stack now
       % contains 'bcdfghjklmnpqrstvwxz', 'aeiouy', 'bcdfghjklmnpqrstvwxz',
       % 'aeiouy', 'bcdfghjklmnpqrstvwxz'
&Z*    % Cartesian product of all arrays present in the stack. Implicity display

私はバイトを剃る、これは動作するはずだと思う:11Y2'y'h2Y2yX~yyy&Z*オンラインをお試しください!
コナー・オブライエン

@ ConorO'Brien残念ながら、これはvcvcvパターンを作成するものでcvcvc、必要なものではありません。でもありがとう!
ルイスメンドー

6

Python、92バイト

f=lambda i=-4,s='':i*[s]or sum([f(i+1,s+c)for c in i%2*'AEIOUY'or'BCDFGHJKLMNPQRSTVWXZ'],[])

itertools勝つことはできません。反復はPython 2では1バイト長くなります。

W='',
for s in(['AEIOUY','BCDFGHJKLMNPQRSTVWXZ']*3)[1:]:W=[w+c for w in W for c in s]
print W

これは素晴らしいです^ _ ^
ABcDexter

6

Haskell、54 51バイト

l="bcdfghjklmnpqrstvwxz":"aeiouy":l
mapM(l!!)[0..4]

mapM func listによって返されるリストからインデックスiの可能な文字を取得することにより、すべての単語を構築しますfunc (list!!i)

編集:@xnorは保存するために2バイトを見つけ、彼の解決策を見て、別のものを見つけました。


mapM id$take 5$cycle["bcdfghjklmnpqrstvwxz","aeiouy"]バイトを保存します。
-xnor

より良い、mapM(cycle["bcdfghjklmnpqrstvwxz","aeiouy"]!!)[0..4]またはmapM(["bcdfghjklmnpqrstvwxz","aeiouy"]!!)[0,1,0,1,0]。母音と子音をハードコーディングしない方がいいでしょうが、うまくいきmapM(\n->[x|x<-['a'..'z'],elem x"aeiou"==odd n])[0..4]ません。
-xnor

@xnor:ありがとう!cycle最初のバリアントを明示的な再帰に置き換えると、追加のバイトが節約されます。
nimi

5

Brachylog、18バイト

@W:@Dg:2jcb:eac@w\

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

説明

@W:@D                 The list ["aeiouy", "bcdfghjklmnpqrstvwxz"]
     g:2jcb           The list ["bcdfghjklmnpqrstvwxz", "aeiouy", "bcdfghjklmnpqrstvwxz", "aeiouy", "bcdfghjklmnpqrstvwxz"]
           :ea        Take one character of each string
              c       Concatenate into a single string
               @w     Write to STDOUT followed by a newline
                 \    Backtrack: try other characters of the string

gand の必要性に驚きましたがb、それをテストしています。これはj、入力として文字列のリストを取得することを拒否しているように見えるためです。:eaしかし、Prolog / Brachylogの強みは実際に発揮されており、他のほとんどの言語でははるかに困難なステップです。

@ ais523はい、私はまたことを驚いたgとはb必要でした。jバグがあるようです。これは、引数のリストを単なるリストと区別するのが難しいためです。これを修正するかもしれませんが、これは実装をもう一度複雑にします。私はそれを修正しないだけでなく、Brachylogの新しいバージョンのコアの問題を修正するために時間を費やすかもしれません。
1

5

JavaScript(ES6)、91 90バイト

f=(s='',i=4)=>{for(c of i%2?'aeiouy':'bcdfghjklmnpqrstvwxz')i?f(s+c,i-1):console.log(s+c)}

編集

  • ETHproductions:forステートメントの三項演算子の周りの無関係なグループを削除することにより、-1バイト

説明

これは、呼び出しの深さのパリティを使用して母音または子音を反復するかどうかを決定する、深さ5の再帰関数を定義します。各反復で、残りの再帰の量をチェックすることにより、再帰するか印刷するかを確認し、現在の反復の文字を、深さ優先で現在構築されている5文字の文字列の末尾に連結します。

ISO8859-1エンコーディングを想定した代替の89バイトソリューション:

f=(s='',i=4)=>{for(c of i%2?'aeiouy':btoa`mÇ_äi骻-¿s`)i?f(s+c,i-1):console.log(s+c)}

出力全体を単一の文字列として返す代替の96バイトソリューション:

f=(s='',i=4,o='')=>eval("for(c of i%2?'aeiouy':'bcdfghjklmnpqrstvwxz')o+=i?f(s+c,i-1):s+c+`\n`")

自己責任で実行してください。91バイトのソリューションでは、単に使用f()し、97 バイトのソリューションでは、を使用しますconsole.log(f())


ソリューションを2つの異なる方法でジェネレーターに変えてみました。Firefoxでのみサポートされている短縮形の使用は同じ長さです:f=(s='',i=2)=>(for(c of(i%2?'aeiouy':'bcdfghjklmnpqrstvwxz'))for(q of i?f(s+c,i-1):[s+c])q)残念ながら標準形の使用は1バイト長くなります:function*f(s='',i=2){for(c of(i%2?'aeiouy':'bcdfghjklmnpqrstvwxz'))yield*i?f(s+c,i-1):[s+c]}ジェネレーターが最も短いオプションである日を待っています
...-ETHproductions

1
ところで、for...of1バイトを節約するためにステートメントの内側の括弧を削除できます
-ETHproductions

5

C、201の 199 186 184 183 169 163バイト

以前の基本的なカウント方法とは少し異なる方法で行う:

f(){for(char*c="bcdfghjklmnpqrstvwxz",*v="aeiouy",i[5]={0},*s[]={c,v,c,v,c},j=0;j<5;puts("")){for(j=5;j--;putchar(s[j][i[j]]));for(;j++<5&&!s[j][++i[j]];i[j]=0);}}

ゴルフをしていない:

f() {
    for(char *c="bcdfghjklmnpqrstvwxz", *v="aeiouy", i[5]={0}, *s[]={c,v,c,v,c}, j=0; j<5; puts("")) {
        for (j=5; j--; putchar(s[j][i[j]])) ;
        for (; j++ < 5 && !s[j][++i[j]]; i[j]=0) ;
    }
}

そしてもう少し慣習的な方法で書かれています:

f() {
    char *c="bcdfghjklmnpqrstvwxz", *v="aeiouy", i[]={0,0,0,0,0}, *s[]={c,v,c,v,c}, j=0;
    while (j>=0) {
        for (j=0; j<5; j++) putchar(s[j][i[j]]); // output the word
        while (--j>=0 && !s[j][++i[j]]) i[j]=0; // increment the counters
        puts("");
    }
}

基本的に、iはカウンタであり、sは各カウンタに対して反復する必要のあるすべての文字を含む文字列の配列です。トリックは内側のwhileループです。これは、右端から開始して、カウンターを増分するために使用されます。表示する必要がある次の文字が終了ヌル文字であることがわかると、カウンターをゼロに再起動し、「キャリー」が次のカウンターに伝搬されます。

クリストフに感謝します!


PPCGへようこそ!
マーティンエンダー

1
char *cスペースは不要だと思います。
クリストフ

1
f(){char*c="bcdfghjklmnpqrstvwxz",*v="aeiouy",i[]={0,0,0,0,0},*s[]={c,v,c,v,c},j=0;while(j>=0){for(j=0;j<5;++j)putchar(s[j][i[j]]);for(;--j>=0&&!s[j][++i[j]];)i[j]=0;puts("");}}177に移動します。さあ、あなたはもっともっと良くできます;)。
クリストフ

2
i[5]={0}代わりにi[]={0,0,0,0,0}を使用すると、7バイト節約されます。
ファルケン

1
@Christoph Aha、ありがとう。よくやった。しかし、あなたはそれを楽しんでいるように見えたので、私は挑戦を押し進めていたのです(いや、冗談です。私はお尻が痛いからといってそれをしました)。真剣に、啓発に感謝します。
薄暗い

4

Perl、71バイト

map{push@{1+/[aeiouy]/},$_}a..z;$"=",";say for glob"{@1}{@2}"x2 ."{@1}"

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

説明

後でさらに説明を追加します。

map{push@{1+/[aeiouy]/},$_}a..z;@1子音と@2母音を含む2つの配列を作成します。
globのような引数を使用した呼び出し{a,b}{c,d}は、中括弧内の要素のすべての順列を返します。


4

Befunge、95バイト

::45*%\45*/:6%\6/:45*%\45*/:6%\6/1g,2g,1g,2g,1g,55+,1+:"}0":**-!#@_
bcdfghjklmnpqrstvwxz
aeiouy

オンラインでお試しください!、ただし、出力は切り捨てられることに注意してください。

これは、0〜287999の範囲のループであり、インデックスを混合ベースの数値20-6-20-6-20として出力し、最後の2行でテーブルから取得した数値の「数字」を使用します。


4

Perl 6、70バイト

$_=<a e i o u y>;my \c=[grep .none,"a".."z"];.say for [X~] c,$_,c,$_,c

興味深い部分の説明:

.say for [X~] c, $_, c, $_, c

              c, $_, c, $_, c  # list of five lists
         [X ]                  # lazily generate their Cartesian product
           ~                   # and string-concatenate each result
.say for                       # iterate to print each result

その前のコードは、母音のリスト($_)と子音のリスト()を生成するだけでc、残念ながら冗長です。


4

パイソン2120の 117バイト

タブのヒントを提供してくれた@WheatWizardに感謝します。

x,y='aeiouy','bcdfghjklmnpqrstvwxz'
for a in x:
 for e in x:
	for b in y:
		for c in y:
			for d in y:print b+a+c+e+d

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

これが多くゴルフできるかどうかはわかりません。オンラインで試してみてください。128KBで切り捨てられますが、アイデアを与えるのに十分な量です。ワードをカウントするデバッグコードを使用したローカル実行では、合計288000が得られました。テストしたい場合、約45秒で実行されます。

zyzyv
zyzyw
zyzyx
zyzyz
Total word count: 288000

110バイトの非準拠、したがって非競合バージョン(指定された形式ではなく、ネストされた配列を出力):

x,y='aeiouy','bcdfghjklmnpqrstvwxz'
print[[[[c+a+d+b+e for e in y]for d in y]for c in y]for b in x]for a in x]

1
私の最初の実装でした:)
カーラ

すべてのインデントにスペースを使用する代わりに、単一のインデントにスペースを使用し、二重にタブを使用できます。
小麦ウィザード


4

xeger、49バイト

([bcdfghj-np-tvwxz][aeiouy]){2}[bcdfghj-np-tvwxz]

正規表現を指定すると、xegerは単に一致するすべての文字列を生成します。ブラウザを強制終了しないようにするには、1000の出力ごとに一時停止し、クリックして続行する必要がありますが、最終的にはそこに到達します。


バグが修正さ^れた23バイトのバージョンを次に示します。

([:c^y][:v:y]){2}[:c^y]

これらは[:c]y除外された「すべて小文字のASCII子音^y[:v:]y追加された「すべて小文字のASCII母音」の文字クラスです。


これはどの正規表現のフレーバーに基づいていますか?(または、独自にロールした場合、どの機能がサポートされますか?これに関するドキュメントはありますか?)
マーティン・エンダー

@MartinEnderこれは、DFAトラバーサル(私が学生向けに作成したDFA / NFAビジュアライザーから作成されたもので、ドキュメントが限られています)-後方参照なし、非正規のものです。長い文字列では非常に遅くなります。式自体の唯一の興味深い特徴はとの接続&です。
マイケル・ホーマー

残りのドキュメントをページに追加し、いくつかのサンプルを追加しました。
マイケルホーマー

1
文字クラスに範囲を実装したようです。その後、あなたは行うことができます[bcdfghj-np-tvwxz]
マーティンエンダー

4

JavaScript(Firefox 30-57)、82バイト

f=(i=5)=>i?[for(s of f(i-1))for(c of i%2?'bcdfghjklmnpqrstvwxz':'aeiouy')s+c]:['']

文字列の配列を返します。102 101(@ETHproductionsのおかげで1バイト)バイトの非常に高速なバージョン:

_=>[for(i of c='bcdfghjklmnpqrstvwxz')for(j of v='aeiouy')for(k of c)for(l of v)for(m of c)i+j+k+l+m]

いいね 101バイトのために除去することができる高速バージョンで余分なスペースがあります
ETHproductions

3

CJam32 31 29 28バイト

Martin Enderのおかげで2バイト、kaineのおかげで1バイト節約

"aeiouy"_'{,97>^\1$1$1$N]:m*

オンラインでお試しください!(TIOでは出力が切断されることに注意してください)

説明

"aeiouy"_ e# Push the six vowels and duplicate
'{,97>    e# Push the whole alphabet
^         e# Symmetric set difference of the alphabet with the vowels, yields the consonants only
\         e# Swap top two elements
1$1$1$    e# Copy the second-from-the-top string to the top three times
          e# This results in the array being consonants-vowels-consonants-vowels-consonants
N         e# Add a newline character to the end of the list
]         e# End an array. Puts everything done so far in an array
          e# since there was no explicit start of the array.
:m*       e# Reduce the array using Cartesian products

'{,97>アルファベットを取得します。そして、"aeiouy"_'{,97>^別のバイトをに保存し1$ます。
マーティンエンダー

最初のキャラクターは必要ありません。スタックの開始を取得した場合に想定されます。
ケイン

@kaine興味深いことに、それを知りませんでした。ありがとう。
ビジネス猫

$ "aeiouy" _ '{、97> ^] 3 *(;:メートル* N * $ $兆候を無視IDKコメントでコードを配置する方法について説明します。。
ケイン

@kaine「 `」のようなバックティックを使用します。
コナーオブライエン


3

Perl、63 59 54バイト

$a="aeiouy";$b="[^$a][$a]"x2;for("a"x5.."z"x5){say if/$b[^$a]/}
$a="aeiouy";$b="[^$a][$a]"x2;/$b[^$a]/&&say for"a"x5.."z"x5

$a=aeiouy;$b="[^$a][$a]"x2;/$b[^$a]/&&say for a.."z"x5

変化のためにPerlゴルフを試してみてください。
編集:私はまだ学ぶべきことがたくさんあるよう見えます... :)


ナイスなもの(プリモの答えが短くても)。/$b[^$a]/&&say for"a"x5.."z"x5数バイトを節約するように終わりを書くことができます。編集:そして、あなたはドロップすることができ$bます$a="aeiouy";/([^$a][$a]){2}[^$a]/&&say for"a"x5.."z"x5
ダダ

また、引用符は必要ありませんaeiouy。また、正規表現は5文字をチェックするため、を実行できますa.."z"x5
ダダ

@ダダ:ありがとう。Perlを通常のプログラミングに使用しているが、今までゴルフには使用していない人として、私は非厳密モードを悪用することすら考えていませんでした。私が選んだ理由です$aし、$b変数名としてそれらもstrictモードで宣言する必要はありませんので...、:)私はまた、Perl 6の多くにさえしない、これらの日、使用していた非strictモードを。
smls

3

Scala、87 86バイト

val a="aeiouy"
val b='a'to'z'diff a
for(c<-b;d<-a;e<-b;f<-a;g<-b)println(""+c+d+e+f+g)

を置き換えf"$c$d$e$f$g"""+c+d+e+f+gバイトを保存できます。
corvus_192

3

R、143132バイト

q=letters;v=c(1,5,9,15,21,25);x=list(q[-v],q[v],q[-v],q[v],q[-v]);Reduce(paste0,mapply(function(a,b)rep(a,e=b/20),x,cumprod(sapply(x,length))))

q=letters;v=c(1,5,9,15,21,25);x=list(a<-q[-v],b<-q[v],a,b,a);Reduce(paste0,mapply(function(a,b)rep(a,e=b/20),x,cumprod(lengths(x))))

これはコードゴルフでの私の最初の試みなので、さらにそれを切り詰めるための提案を歓迎します。これまでのところ、すべてがかなり標準的なRです。ここで唯一厄介なことは、paste0が引数を最長の長さにリサイクルすることです。

編集:rturnbullの割り当てトリックを使用し、に置き換えsapply(x,length)ましたlengths


サイトへようこそ!これは非常に良さそうです(Rでプログラミングしたのは少しだけです)。答えに古いコードを含めないことをお勧めします。編集履歴は常に利用可能なため、誰でもいつでも閲覧できます。これは個人的なスタイルのことなので、私の意見を無視してください。
小麦ウィザード

114バイトの関数割り当てでブルートフォースできます
Punintended

3

R、111 98バイト

y母音として追加され、@ Patrick Bのおかげで13バイトのゴルフが行われました。

l=letters
v=c(1,5,9,15,21,25)
apply(expand.grid(C<-l[-v],V<-l[v],C,V,C)[,5:1],1,cat,fill=T,sep="")

を使用しております expand.gridのすべての可能な組み合わせを生成するVC、我々はプリセット変数から定義する行列で、letters(アルファベット)。アルファベット順を確保するために、組み合わせを逆にします(デフォルトでは最初の変数が最も速く回転するため)。次に、マトリックスの各行を反復処理して、各文字を標準出力に出力します。fill引数を使用して、cat各単語が新しい行で始まるようにします。


いいね!catでいくつかのオプションを使用し、「letters」の名前を変更することにより、これをさらに98文字(母音として 'y'を追加、または95文字まで)に切り詰めることができます:l = letters; v = c(1,5,9、 15,21,25); apply(expand.grid(C <-l [-v]、V <-‌ l [v]、C、V、C)[、5:1]、1、‌ cat 、fill = T、sep = "")
パトリックB.

@PatrickB。ありがとう!あなたの提案を取り入れました。
rturnbull


2

Clojure、101バイト

(print(apply str(for[V["aeiouy"]C["bcdfghjklmnpqrstvwxz"]a C b V c C d V e C](str a b c d e "\n")))))

エキサイティングではありません...


2

ルビー、 65 61バイト

まったく異なるアプローチ:

(b=[*?a..?z]-a="aeiouy".chars).product(a,b,a,b){|x|puts x*""}

今日学んだ新しいこと:Array#product関数


2

C 361バイト

f(){i,j,k,l,m;v[6]={97,101,105,111,117,121};c[25];s=26;for(i=0;i<26;i++)c[i]=97+i;for(i=0;i<26;i++){for(j=0;j<6;j++)if(c[i]==v[j])c[i]+=1;}for(i=0;i<s;i++)for(j=i+1;j<s;){ if(c[i]==c[j]){for(k=j;k<s-1;++k)c[k]=c[k+1];--s;}else ++j;}for(i=0;i<s;i++)for(j=0;j<6;j++)for(k=0;k<s;k++)for(l=0;l<6;l++)for(m=0;m<s;m++)printf("%c%c%c%c%c\n",c[i],v[j],c[k],v[l],c[m]);}

ゴルフされていないバージョン:

void f()
{   
int i,j, k,l,m;
int s=26;
int v[6]={97,101,105,111,117,121};
int c[s];

for(i=0;i<s;i++)
 c[i]=97+i;
for(i=0;i<s;i++)
{     
  for(j=0;j<6;j++)
    if(c[i]==v[j])
      c[i]+=1;
     }
for(i=0;i<s;i++)
 for(j=i+1;j<s;)
 { if(c[i]==c[j])
  {
    for(k=j;k<s-1;++k)
      c[k]=c[k+1];
      --s;  
  }else
   ++j;  
  }
for(i=0;i<s;i++)
  for(j=0;j<6;j++)
       for(k=0;k<s;k++)
        for(l=0;l<6;l++)
         for(m=0;m<s;m++)       
      printf("%c%c%c%c%c\n",c[i],v[j],c[k],v[l],c[m]);
}

これを確実に短くする方法が必要です。

説明

  • a、e、i、o、u、yの整数値を数値配列に格納し、
  • 母音の場合、すべてのアルファベットを配列に保存し、子音に置き換えたため、配列内に子音値が重複していたため、
  • 重複する子音値を削除し、
  • すべての組み合わせcvcvcを印刷しました。

あなたが非常に役立つと思われるバージョンを置くことができたら。
SIGSTACKFAULT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.