チャレンジの説明
ラングフォード文字列の順序のは、N
次のように定義されています。
- 文字列の長さに等しく
2*N
、 - 文字列に
N
は英語のアルファベットの最初の文字が含まれ、各文字は2回表示されますが、 - 同じ文字の各ペアについて、ある
M
それらの間の文字は、どこM
アルファベットで、その文字の位置です(A = 1
、B = 2
、...
、Z = 26
)。
例えば、オーダーの2つのだけの可能なラングフォード文字列が3
あるBCABAC
とCABACB
。ご覧のとおり、これらの両方の文字列にはA
、2つの文字の間に1つの文字、2つの文字の間に2つの文字、B
および3つの文字の間に3つの文字がありC
ます。正の整数を指定するとN
、すべての順序のラングフォード文字列を出力しますN
(合理的な形式で:改行で区切って1つずつ印刷し、リスト/配列を返します...)。
サンプル入力/出力
3: [CABACB, BCABAC]
4: [DACABDCB, BCDBACAD]
5: # no output #
7: [GCFBECBDGFEADA, GBFCBDECGFDAEA, GBDFBCEDGCFAEA, GCAFACDEGBFDBE, GADAFCEDGCBFEB, GACAFDCEGBDFBE, GDAEAFDCGEBCFB, GBDEBFCDGECAFA, EGBFCBEDCGFADA, CGDFCBEDBGFAEA, EGDAFAEDCGBFCB, EGBCFBECDGAFAD, AGABFDBECGDFCE, EGADAFECDGBCFB, AGABEFBCDGECFD, BGDBCEFDCGAEAF, FBGDBCEFDCGAEA, BFGBAEADFCGEDC, CFGACADEFBGDBE, EAGAFBEDBCGFDC, BCGBFCEADAGFED, DAGAFDBECBGFCE, EBGCBFECDAGAFD, CEGDCFBEDBGAFA, CEGBCFBEDAGAFD, BDGBCFDECAGAFE, EFAGACEDFCBGDB, DFAGADEBFCBGEC, AFAGBDEBFCDGEC, DFAGADCEFBCGBE, ECFGBCEBDFAGAD, DEFGADAECFBGCB, CDFGCBDEBFAGAE, EBDGBFEDACAGFC, CDEGCFDAEABGFB, AEAGCDFECBDGBF, FAEAGCDFECBDGB, DFCEGDCBFEBAGA, BFCBGDCEFADAGE, ECFDGCEBDFBAGA, DAFAGDCEBFCBGE, BCFBGCDEAFADGE, AEAFGBDEBCFDGC, ADAFGCDEBCFBGE, AFACEGDCFBEDBG, BFCBEGCDFAEADG, EBFDBGECDFACAG, BEFBCGDECFADAG, EBDFBGEDCAFACG, AEAFCGDECBFDBG, AEADFGCEDBCFBG, ADAEFGDBCEBFCG]
12: # <216288 strings> #
ノート
- 順序のラングフォード文字列は
N
、N ≡ 0 (mod 4)
またはの場合にのみ生成できますN ≡ 3 (mod 4)
。 - 小文字と大文字の両方を使用できますが、
- 後続の番号も使用できます(
012...
またはの123...
代わりにABC...
) - 出力として表示される文字列の順序は指定されていませんが、
- 出力は非常に長くなる可能性があります(たとえば、5兆を超える異なるラングフォードの順序の文字列があり
20
ます)。したがって、プログラムは実際にすべてを出力する必要はありませんが、理論的には動作する必要があります(十分な時間とメモリが与えられます)。 - この課題は/ r / dailyprogrammerから取られました。すべてのクレジットは/ u / XenophonOfAthensに送られます
4
サンドボックスには密接に関連する課題があります。決して必要ではありませんが、通常は重複をチェックするのも良い考えです。
—
マーティンエンダー
数字の配列だけを出力できますか?
—
リーキー修道女
@LeakyNun:もちろんです。説明を更新しました。
—
shooqie