Tung hứng theo số


20

Nhiệm vụ của bạn là tạo ra một mẫu tung hứng hợp lệ bằng cách hoàn thành một mẫu nhất định. Nhưng trước tiên, có lẽ bạn cần phải biết làm thế nào một mẫu như vậy được ký hiệu.

nhập mô tả hình ảnh ở đây

Giới thiệu về trang webwap

Sitewap là ký hiệu được thiết lập cho các mẫu tung hứng. Nó hoạt động bằng cách chia mô hình thành các nhịp. Ở mỗi nhịp, tay trái và tay phải của bạn luân phiên ném bóng. Mỗi cú ném (tức là mỗi nhịp) được biểu thị bằng một con số cho biết khi quả bóng đó được ném tiếp theo - điều này tương ứng trực tiếp với chiều cao của cú ném.

Hãy xem xét một số ví dụ. Xem hình ảnh động của tất cả những thứ này ở đây .

Cascade 3 bóng

Mô hình 3 bóng đơn giản nhất. Mỗi quả bóng được ném ở mỗi nhịp thứ ba (tay xen kẽ). Viết ra các nhịp này trông giống như sau (các dòng ASCII kết nối hai nhịp mà cùng một quả bóng được ném):

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ưu ý cách mọi quả bóng ném theo một Lnhịp, được ném tiếp theo một Rnhịp. Các mẫu hình được lặp lại ngầm, do đó mẫu này thường được ký hiệu là 333, mặc dù đơn giản là 3cũng đủ.

441

Đây là một ví dụ phức tạp hơn một chút với các trang web 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
         │ │ └─┘ │ │
         └─┼─────┘ │
           └───────┘

Lưu ý cách ném số chẵn đi đến cùng một bàn tay mà chúng được ném từ đó, trong khi các cú ném số lẻ chuyển sang tay kia.

423

Đôi khi bạn chỉ muốn cầm một quả bóng qua một nhịp thay vì ném nó. Tất cả điều đó có nghĩa là, quả bóng này được ném vào lần tiếp theo đến lượt của nó - tức là 2 nhịp sau đó. Vì vậy, giữ một quả bóng tương đương với một 2trong mô hình:

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 0có nghĩa là tay hiện tại trống ở nhịp đó, vì mẫu này hiển thị:

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
         └───┼───┼─┘   │
             └───┼─────┘
                 └───────>

Ghép kênh

Vấn đề này sẽ là một chút quá đơn giản với các trang web vanilla mặc dù. Nhập mô hình ghép kênh! Tung hứng đa điểm có nghĩa là bạn ném nhiều quả bóng từ một tay cùng một lúc. Chẳng hạn, trong bậc thang 3 bóng ở trên, nếu bạn là hai người ném thêm một quả bóng ở mỗi nhịp thứ ba, mô hình sẽ trở thành [33]33và trông như thế này:

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
          └┴──┼─┼──┴┘  │ │
              └─┼──────┘ │
                └────────┘

Dưới đây là một ví dụ khác, trong đó cú ném ghép có hai chiều cao / chiều dài khác nhau. Nó có thể được ký hiệu là một trong hai [34]11hoặc [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
          ││  └─┴──┘│  │
          │└────────┘  │
          └────────────┘

(Lưu ý rằng 1cú ném tại nhịp 2hạ cánh theo nhịp 3và ngay lập tức được ném lại (như một 1cú đánh khác ) để hạ cánh theo nhịp 4và là một phần của cú ném ghép thứ hai.)

Các trang web cho hoạt hình ở đầu bài này là [53]15121 .

Hiệu lực mẫu

Để một mẫu có giá trị về mặt ngữ nghĩa , số lượng bóng trong một bàn tay phải luôn luôn tương ứng với số lần ném được chỉ định ở nhịp đó. Điều này có nghĩa là, không được có quả bóng nào hạ cánh theo một nhịp với a 0, chỉ có một quả bóng hạ cánh theo một nhịp với bất kỳ chữ số nào khác và phải có n quả bóng hạ cánh ở một nhịp ghép, trong đó n là số chữ số trong đó ném đa. Các mô hình cũng phải có thể lặp lại liền mạch.

Ví dụ về các mẫu không hợp lệ là 543(tất cả các quả bóng sẽ hạ cánh cùng một nhịp), 240( 2sẽ hạ cánh theo 0nhịp) hoặc 33[24](không có quả bóng nào chạm vào nhịp ghép, nhưng hai quả bóng rơi vào cả hai nhịp còn lại).

Các thách thức

Bạn sẽ lấy một mẫu trang web có chứa các ký tự đại diện và xuất ra một mẫu hợp lệ, với các ký tự đại diện được điền vào.

Lấy làm đầu vào (thông qua stdin, đối số dòng lệnh, tham số tệp hoặc hàm) một chuỗi định dạng

n s

Trường hợp nmột số nguyên cho biết số lượng bóng được sử dụng và slà mẫu trang web ( không có khoảng trắng). Bạn có thể cho rằng nó đúng về mặt cú pháp - tất cả các dấu ngoặc vuông được khớp và không được lồng nhau, và không có ký tự bất ngờ. Tất cả các cú ném sẽ là các cú ném một chữ số ( 0- 9). Tuy nhiên , một số nhịp có thể được ký hiệu là a _, được điền vào bằng một cú ném đơn hoặc ghép kênh trong đầu ra.

Lưu ý: một cái gì đó như [_3]sẽ không phải là một phần của đầu vào. Toàn bộ nhịp bị thiếu hoặc toàn bộ nhịp được đưa ra.

Xuất ra một mẫu hợp lệ, có thể được tung hứng với số lượng bóng đã cho và đồng ý với mẫu đầu vào trong tất cả các nhịp được chỉ định. Nếu không có mẫu hợp lệ nào có thể với đầu vào, đầu ra đã cho !. Đầu ra cũng sẽ thông qua thiết bị xuất chuẩn, đến một tệp hoặc dưới dạng giá trị trả về của hàm.

Lưu ý: Đầu ra không được chứa dấu ngoặc vuông hoặc số không cần thiết trong các lần ném ghép. Vì vậy, đầu ra có chứa [3]hoặc [03]không được chấp nhận, 3thay vào đó bạn phải xuất ra . Thứ tự của các chữ số trong một cú ném ghép không liên quan.

Lưu ý: Bạn có thể bỏ qua các mẫu trùng lặp theo hoán vị theo chu kỳ. Ví dụ: cho đầu vào 3 __(lưu ý hai ký tự đại diện), cả hai 4224là câu trả lời hợp lệ (trong số những người khác), nhưng chúng thực sự mô tả cùng một mẫu. Bạn có thể xuất cả hai hoặc chỉ một trong số chúng, nhưng bạn sẽ phải làm điều đó một cách nhất quán.

Đây là mã golf , mã thắng ngắn nhất (có thể nhận được tiền thưởng được liệt kê ở cuối câu hỏi).

Bạn có thể sử dụng JugglingLab để chơi xung quanh với các mẫu để xem chúng có hợp lệ không và chúng trông như thế nào.

Ví dụ

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.

Tiền thưởng

  • Nếu câu trả lời của bạn có thể xử lý "chữ số" tối đa 35, được biểu thị bằng các chữ cái (10 = A, 11 = B, ...), hãy trừ 20 ký tự . Bạn có thể quyết định xem những chữ cái đó có phải là chữ hoa, chữ thường hay chữ hoa không phân biệt. (JugglingLab có thể xử lý chúng trong trường hợp thấp hơn nếu bạn muốn xem xét một số mẫu điên rồ.)
  • Nếu câu trả lời của bạn đưa ra tất cả các giải pháp hợp lệ, hãy trừ 20 ký tự .

Câu trả lời:


6

Python, 587 - 20 = 567 ký tự

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"!"

Chỉ tò mò bạn có biết sự phức tạp về thời gian của giải pháp của bạn không? Đừng lo lắng về việc giải thích thuật toán (tuy nhiên), để không làm hỏng niềm vui cho những người khác vẫn có thể đang thử. ;)
Martin Ender

Tôi nghĩ rằng đó là một cái gì đó giống như L*n^(n*choose(n+11,n+2))nơi nlà số ký tự đại diện và Llà số ký tự trong mẫu. Không chính xác hiệu quả.
user1502040

Tôi chỉ nhận thấy rằng bạn đang đếm quá mức trong các trường hợp cho phép hoán vị theo chu kỳ (ví dụ: 3 __mỗi lần kết quả hai lần, với các nhịp được hoán đổi), nhưng tôi cho rằng đó là lỗi của tôi vì đã không chỉ định điều đó. Tôi sẽ thêm một mệnh đề mặc dù để cho phép bỏ qua những điều đó nếu điều đó giúp tiết kiệm byte.
Martin Ender

Vâng, có một tiền thưởng sau đó! Có vẻ như câu hỏi này quá nhàm chán hoặc quá nan giải đối với những người khác. ;)
Martin Ender
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.