切り替えシーケンス


11

イントロ

スイッチングシーケンスは次のように定義されます。

n円の中に立っている人から始めます(6この例の場合)。

 1  2
6    3
 5  4

personから開始して1、「選択された」人の左側にある人が削除されます。

 1
6    3
 5  4

削除された人は、削除方法を「切り替える」ことができます。

  • 削除された人が偶数の場合(この場合)、次の削除された人は、次の「選択された」人の右側になります。
  • 削除された人が奇数の場合、次の削除された人は、次の「選ばれた」人の左側になります。

次に選択された人は、以前に削除された人にも依存します。

  • 削除された人が偶数の場合、次に選択された人は前に選択された人の右側になります。
  • 削除された人が奇妙な場合、上記を参照してください。ただし、「右」を「左」に置き換えます。

そのため、次に選択される人は6です。

今、私たちはの右にある者を削除6され、5

 1
6    3
    4

ので5奇数で、削除人は左になりました。新しく選ばれた人は1です。

削除し3ます:

 1
6
    4

1つの番号が残るまでこのプロセスを続けます。この例では、最終的な番号は1です。だからS(6) = 1

最初の数は次のとおりです。

 n | S(n)
---------
 1 | 1
 2 | 1
 3 | 3
 4 | 1
 5 | 5
 6 | 1
 7 | 3
 8 | 6
 9 | 5
10 | 6
11 | 9

仕事

あなたの仕事は戻っていることプログラム(または関数)を作成することであるS(n)nスイッチングシーケンスにおける番目数)が与えられたとき、nバイトの最小量を使用して、。

入力と出力の例:

1  -> 1
10 -> 6
13 -> 13

正の整数を取得することが保証されています。

これはなので、バイト単位の最短コードが勝ちです!

注:検索の手間を省くために、OEISシーケンスはありません(何?)。


7
人々に検索を保存するために、oeisにヒットはありません。
xnor

明らかに2残ることはありませ7んが、ありますか?
ジョナサンアラン

1
@JonathanAllan最初の1000の用語をチェックしたところ、結果は現在「いいえ」です。しかし、私はよくわかりません-人々が証明しようとすることができる「サイドチャレンジ」なもの、または何かとして置くべきですか?それはブラウニーポイントのためですので、挑戦を損なうことはありません。
-clismique

誰かがあなたの指示に従うこと以外の方法で起動したら多分それは...明白であろう
ジョナサン・アラン

3
OEISなしでこれを解決する人々をどのように期待しますか?誰かがOEISをプッシュしてください?
エリックアウトゴルファー

回答:


4

Python 2、183 94バイト

-4 Artyerのおかげで(使用バイトinput()printいうよりdefreturn
-1バイトをFlipTack(使用のおかげprint-~p[0]ではなくprint p[0]+1

p=range(input())
d=i=1
while p[1:]:m=p.pop(i)%2;i-=m+m-(d<0);d=-m|1;i+=d;i%=len(p)
print-~p[0]

repl.it

これは与えられた指示に従うだけで、何らかのパターンに気づきました。悪用される可能性がありますか?

唯一の変更点は次のとおりです。

  • 0ベースのインデックスを使用します(したがって、人々も奇数で、その逆も同様です)-これはゴルフロジックで5バイトを節約し、最後に修正されます+1
  • 使用に1左のように-1、右のように( -誰もが代わりに外側に向いているだけのような範囲を使用します)
  • 次の選択された個人がpopリストからのアカウントを見つけるために見つかったステップのロジックを変更するには、「ポインター」インデックスをリストの右側(または元の用語では左側)にステップ1します。

ゴルフをしていない:

def circle(n):
    people = range(n) # p
    direction = 1 # d
    removeIndex = 1 # i
    while n > 1:
        removingMod2 = people.pop(removeIndex) % 2 # m
        removeIndex -= removingMod2 + removingMod2 - (direction == -1)
        direction = -removingMod2 or 1
        removeIndex += direction
        n -= 1
        removeIndex %= n
    return people[0] + 1

最後の行は可能print-~p[0]ですか?
FlipTack

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