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[]
どこに子音と母音の製品を保存しているa
とb
、それぞれ。これは、すべての引数を乗算し、##
母音の積で除算する関数を作成することで機能します。この関数はアルファベットリストに適用され、各文字を個別の引数として渡します。
これまでのところは良いですが、今では
{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#