Nが与えられた場合、['A'、 'B'、 'AB'、 'C​​'、 'D'、 'C​​D'、 'ABCD'、 'E'、…]のn番目の要素を出力しますか?


12

次のリストを考慮してください。

expected = [
'A',
'B',
'AB',
'C',
'D',
'CD',
'ABCD',
'E',
'F',
'EF',
'G',
'H',
'GH',
'EFGH',
'ABCDEFGH',
'I',
'J',
'IJ',
'K',
'L',
'KL',
'IJKL',
'M',
'N',
'MN',
'O',
'P',
'OP',
'MNOP',
'IJKLMNOP',
'ABCDEFGHIJKLMNOP',
...
]

それを見る一つの方法があります-あなたは漢字の書き方を学んでいて、それらのますます大きな塊を学び、行くにつれてそれらをリハーサルします。Aから始めてBに進み、2つのペアのシーケンスが既にあるので、それを組み合わせます。次に、CとDを使用して、別のペアを作成し、練習します。その後、リハーサル:ABCD。その後、同じことがEからHまで続き、リハーサル:ABCDEFGHになります。リストは無限です。

目標は、このリストのn番目の要素を生成して印刷し、インデックスをゼロから増やすことです。「Z」の後、再び「A」を取得するとします。

勝利の基準は、ソースコードの長さです。


3
あるとき、わからない私は、それを得ますBCCDEF?連結するものとしないものを決定するものは何ですか?A後に再び開始する場合、無限にどのようになりZますか(ある時点で何か意味ABCDEFGHIJKLMNOPQRSTUVWXZABCDEFGHIJKLMNOPQRSTUVWXZABあるのですか?)
ジョナサンアラン

5
回り込む文字のテストケースを歓迎します(x,y,z,a,b...)。
スチューウィーグリフィン

7
今後、チャレンジを改善するためにSandboxを使用することを強くお勧めします。そこで、仲間のユーザーからフィードバックを受け取り、チャレンジがメインのPPCGサイトに適していることを確認します!個人的には、少なくとも2日間はSandboxに投稿を残し、誰もが投稿を見る機会を持つようにします。
ジョンファンミン

2
@JungHwanMin:リストを無限に印刷しても大丈夫ではありません。整数のリストを返します。
d33tah

4
「整数のリストを返すことを渡す」とはどういう意味ですか?整数のリストの出力は受け入れられますか?もしそうなら、「「Z」の後に再び「A」を取得することを想定してください」-この出力フォーマットの場合(i + 25の後に再び取得されます)はどうでしょうか?(関連情報を使用して投稿を更新します。仕様をコメントに残さないでください。)
Jonathan Allan

回答:


8

Python 2、53バイト

x,y=0,1
exec"x^=y-x;y+=x/y;"*input()
print range(x,y)

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

変換を使用したこの構成と同様にx = u-vy = u


なんて素敵な簡略化でしょう!最初のステートメントはx^=y-x、-1バイトにすることができます。
xnor

@xnorまあ、愚かな私
KSab

6

JavaScript(ES6)、59バイト

シーケンスのインデックスを1にし、KSabで使用されるものと同様の単純化を使用することで、2バイトを節約できます。

n=>(x=g=y=>n?g(y+=y==(x^=y-x),n--):x<y?[x++,...g(y)]:[])(1)

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


JavaScript(ES6)、61バイト

非ラッピング整数のリストを返します。

n=>(g=v=>n?g(u&-u^v?v*2:!!u++,n--):v?[u-v,...g(v-1)]:[])(u=1)

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

ドナルド・クヌースによる建設に基づいています。関連するOEISエントリ:A182105

どうやって?

これは2段階の再帰関数です。

あなたはnvnあなたは1v1=11

あなたはn+1vn+1={あなたはn+11もし あなたはnそしてあなたはn=vnあなたはn2vnさもないと

2番目のパスで、リストを作成します [あなたはnvnあなたはnvn+1あなたはn] そして最終的にそれを返します。


JavaScript(ES6)、97バイト

折り返しの大文字を返します。

n=>(s=i='',g=v=>(s+=String.fromCharCode(65+i++%26),n--)?g(u&-u^v?v*2:!!u++):s.substr(u-v,v))(u=1)

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

または、小文字で91バイト



2

Wolfram言語(Mathematica)80 71バイト

Range@#2+#-#2&@@Nest[If[#~BitAnd~-#==#2,{#+1,1},{#,2#2}]&@@#&,{1,1},#]&

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

アルファベットのラッピング文字列ではなく、整数のリストを返します。0インデックス付き。

@Arnauldのおかげで、OEIS A182105を使用しています。

リストを無期限に印刷、54バイト

Do[j=Range@i;#∣i&&Print@j[[-#;;]]&/@(2^j/2),{i,∞}]

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

1インデックス付き。TIOバージョンには、クラッシュを防ぐlim代わりにあります。




1

45 42 35バイト

FN⊞υ⎇∧›Lυ¹⁼L§υ±¹L§υ±²⁺⊟υ⊟υ§αL⭆υκ⮌⊟υ

オンラインでお試しください!リンクは、コードの詳細バージョンです。1インデックス付き。結果を生成するための簡単な式が見つからなかったので、質問に示された手順に従っただけです。説明:

FN

指定された回数だけ繰り返しnます。

⊞υ

次の要素を事前定義された空の配列uにプッシュします。

⎇∧›Lυ¹⁼L§υ±¹L§υ±²

...に複数の要素がuあり、最後の2つの要素の長さが同じ場合...

⁺⊟υ⊟υ

...最後から2番目の要素を最後の要素に追加します(結果が逆順になります)...

§αL⭆υκ

...それ以外の場合、次の文字は、これまでに追加した文字数をカウントし、事前定義された大文字アルファベットに周期的にインデックスを付けることで見つけることができます。(リストが空の場合、長さの合計または合計の長さの取得に失敗し、リストを文字列にマッピングすると、空のリストを特別にケーシングするよりも2バイト節約できます。)

⮌⊟υ

の最後の要素を取得します。uこれはn、目的のリストの逆の要素であり、暗黙的に逆を出力します。

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