数字によるジャグリング


20

あなたの仕事は、与えられたテンプレートを完成させることにより、有効なジャグリングパターンを生成することです。しかし、最初に、おそらくそのようなパターンがどのように示されるかを知る必要があります。

ここに画像の説明を入力してください

Siteswapの概要

Siteswapは、ジャグリングパターンの確立された表記法です。パターンをビートに分割することで機能します。打つたびに、ボールを投げるときにあなたの左手と右手が交互になります。各スロー(つまり、各ビート)は、そのボールが次にスローされるタイミングを示す数字で示されます-これは、スローの高さに直接対応します。

いくつかの例を見てみましょう。これらすべてのアニメーションはこちらでご覧ください

3ボールカスケード

最も単純な3ボールパターン。各ボールは3拍ごとに投げられます(交互の手)。これは次のようにビートを書き出します(ASCIIラインは、同じボールが投げられる2つのビートを接続します)。

Beat     1 2 3 4 5 6 7 8 9
Hand     L R L R L R L R L
Siteswap 3 3 3 3 3 3 3 3 3
         └─┼─┼─┘ │ │
           └─┼───┘ │
             └─────┘

で投げ、すべてのボールに注意してくださいLビートは、次回にスローされますR。このパターンは、通常と表記されるようにbeat.Siteswapパターンは、暗黙のうちに繰り返し333単にものの、3また十分であろう。

441

次に、siteswap 441を使用したもう少し複雑な例を示します。

Beat     1 2 3 4 5 6 7 8 9
Hand     L R L R L R L R L
Siteswap 4 4 1 4 4 1 4 4 1
         │ │ └─┘ │ │
         └─┼─────┘ │
           └───────┘

偶数番号のスローは、スローされたのと同じ手に行き、奇数番号のスローは、もう一方の手に行くことに注意してください。

423

ボールを投げるのではなく、ビートを通してボールを保持したい場合があります。つまり、このボールは、次にこのハンドが回ったとき、つまり2ビート後に投げられます。したがって、ボールを保持することは2、パターン内のaと同等です。

Beat     1 2 3 4 5 6 7 8 9
Hand     L R L R L R L R L
Siteswap 4 2 3 4 2 3 4 2 3
         │ └─┼─┘ │ │
         │   └───┼─┘
         └───────┘

50505

A 0は、このパターンが示すように、現在のハンドがそのビートで空であることを意味します。

Beat     1 2 3 4 5 6 7 8 9
Hand     L R L R L R L R L
Siteswap 5 0 5 0 5 5 0 5 0
         └───┼───┼─┘   │
             └───┼─────┘
                 └───────>

マルチプレックスジャグリング

しかし、この問題はバニラサイトスワップでは少し単純すぎます。多重パターンを入力してください!マルチプレックスジャグリングとは、片手で複数のボールを同時に投げることを意味します。たとえば、上記の3ボールカスケードでは、3ビートごとに2つのボールを追加で投げると、パターンは次のように[33]33なります。

Beat     1    2 3 4    5 6 7    8 9
Hand     L    R L R    L R L    R L
Siteswap [33] 3 3 [33] 3 3 [33] 3 3
          └┴──┼─┼──┴┘  │ │
              └─┼──────┘ │
                └────────┘

次に、マルチプレックススローに2つの異なる高さ/長さがある別の例を示します。[34]11またはのいずれかで示されます[43]11

Beat     1    2 3 4    5 6 7    8 9
Hand     L    R L R    L R L    R L
Siteswap [43] 1 1 [43] 1 1 [43] 1 1
          ││  └─┴──┘│  │
          │└────────┘  │
          └────────────┘

1ビートで投げられたものは、ビートで2着地し3、すぐに(別の1)として再び投げられて、ビートで着地し4、2番目のマルチプレックススローの一部になることに注意してください。)

この投稿の冒頭のアニメーションのサイトスワップはでした [53]15121

パターンの有効性

パターンが意味的に有効であるためには、ハンドのボールの数は常にそのビートで示されるスローの数に対応していなければなりません。ビートに着陸ないボールがあってはならないこの手段、0他の任意の単一の数字とビート1つだけのボール着地がなければならない、とが存在しなければならないN多重ビート、で着陸ボールnは桁数でありますその多重スローで。また、パターンはシームレスに繰り返せる必要があります。

無効なパターンの例は543、(すべてのボールが同じビートに着陸う)2402に着陸ないでしょう0ビート)または33[24](多重ビートで何のボールランドが、2個のボールは、他の2拍の両方に着陸します)。

チャレンジ

ワイルドカードを含むサイトスワップパターンを取得し、ワイルドカードを埋めた有効なパターンを出力します。

入力として(標準入力、コマンドライン引数、ファイル、または関数パラメーターを介して)形式の文字列を受け取ります

n s

where nは使用するボールの数を示す整数sで、siteswapパターン(空白なし)です。あなたはそれが構文的に正しいと仮定するかもしれません-すべての角括弧は一致し、入れ子にならず、予期しない文字はありません。すべてのスローは1桁のスロー(0- 9)です。ただし、一部のビートは単にとして示される場合_があります。これは、出力の単一または多重スローで埋められます。

注:のようなものは入力の一部で[_3]はありません。ビート全体が欠落しているか、ビート全体が与えられています。

有効なパターンを出力します。これは、指定された数のボールでジャグリングでき、指定されたすべてのビートの入力パターンと一致します。指定された入力で有効なパターンが使用できない場合は、output !出力、stdout経由、ファイルへ、または関数の戻り値としても行われます。

注:出力には、不要な角括弧または多重スローのゼロが含まれていてはなりません。そのため、出力を含む[3]または[03]受け入れられない出力は、3代わりに出力する必要があります。マルチプレックススローの数字の順序は関係ありません。

注:あなたがかもしれ巡回置換の下で重複しているパターンを省略します。入力用など3 __(2つのワイルドカードを注意してください)、両方4224(特に)有効な答えですが、彼らは実際には同じパターンを記述しています。両方または1つだけを出力できますが、一貫して出力する必要があります。

これはコードゴルフで、最短のコードが勝ちます(質問の下部に記載されているボーナスの対象です)。

JugglingLabを使用して、パターンをいじって、パターンが有効かどうか、どのように見えるかを確認できます。

Input           Possible Outputs     Comments

3 _             3
                [21]
                [111]

3 4_3           423

4 4_2           4[51]2
                4[42]2
                4[321]2

3 _23_          6231
                4233
                323[31]
                2235
                223[41]
                0237
                023[43]
                [42]231
                [32]23[11]
4 5_3           !                    5 and 3 will both land at the third beat, but
                                     there is only a single throw at that beat. This
                                     cannot be fixed with any throw in the blank.

2 5_4           !                    Any possible throw in the wildcard (including a
                                     0) will make a pattern for at least 3 balls.

3 54_           !                    The only solution that would correspond to a
                                     3-ball pattern is 540, which is not semantically
                                     valid because the 5 and 4 both land at beat 3.
                                     There are valid solutions, but they require at
                                     least 4 balls.

ボーナス

  • 回答が文字(10 = A、11 = B、...)で示される最大35桁の「数字」を処理できる場合、20文字を減算します。これらの文字を大文字にするか、小文字にするか、大文字と小文字を区別しないかを決定できます。(JugglingLabは、非常識なパターンを見たい場合は小文字で処理できます。)
  • 答えがすべての有効な解を出力する場合、20文字を減算します

回答:


6

Python、587-20 = 567文字

from itertools import *
E,J,L,R,X=enumerate,''.join,len,range,list
def f(x):
 [u,p]=str.split(x);n=int(u);a=[[[x],x][type(x)==X]for x in eval("["+J(c if c=="["else"-1,"if c=="_"else c+","for c in p)+"]")];l,w=L(a),[i for i,x in E(a)if x==[-1]]
 for j in product([[0]]+X(chain(*[combinations_with_replacement(R(1,10),i+1)for i in R(n+1)])),repeat=L(w)):
  for k,m in zip(w,j):a[k]=m
  b=[0]*l
  for k,x in E(a):
   for y in x:b[(k+y)%l]+=1
  if all(x==L(y)for x,y in zip(b,a))&((sum(map(sum,a))/l)==n):
   u=0;yield J([['['+J(map(str,x))+']',str(x[0])][L(x)==1]for x in a])
 if u:yield"!"

好奇心から、ソリューションの時間の複雑さを知っていますか?ただし、アルゴリズムを説明することを心配する必要はありません(まだ)。まだ試みている可能性のある他の人の楽​​しみを損なわないように。;)
マーティンエンダー14

私はそれはのようなものだと思うL*n^(n*choose(n+11,n+2))どこnワイルドカードの番号であり、Lパターン内の文字数です。正確には効率的ではありません。
user1502040 14

巡回順列を許可する場合(たとえば3 __、すべての結果が2回あり、ビートが入れ替わっている場合)に過剰カウントしていることに気づきましたが、それを指定しないのはむしろ私のせいだと思います。ただし、節を追加して、バイトの節約に役立つ場合は省略できます。
マーティンエンダー14

さて、それでは賞金があります!この質問は、他の人にとっては退屈すぎるか、気が遠くなるように思えました。;)
マーティンエンダー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.