Thử thách Mùa Vọng 2: Cuộc đột kích hiện tại!


9

<< Trước đó tiếp theo >>

Thử thách

Bây giờ ông già Noel cuối cùng đã tìm ra cách vào trong hầm hiện tại của mình, ông nhận ra rằng bằng cách nào đó, các yêu tinh đã vào đó trước ông và lấy trộm một số quà của ông! Mặc dù vậy, họ vẫn chưa tìm ra cách rời khỏi hầm, vì vậy ông già Noel phải cố gắng bắt tất cả. Cả ông già Noel và yêu tinh đều có năng lượng vô hạn để chạy xung quanh nhưng thật không may, yêu tinh có năng lượng vô hạn cao hơn, vì vậy nếu cuối cùng họ chạy theo vòng ở khắp mọi nơi, yêu tinh đã được tự do.

Đưa ra một biểu đồ các nnút và ecác cạnh với một bước đi tồn tại giữa hai nút bất kỳ và vị trí của yêu tinh và ông già Noel, xác định có bao nhiêu yêu tinh ông già Noel có thể bắt trước khi ông mệt mỏi.

Cuộc rượt đuổi là theo lượt. Mỗi chu kỳ, các yêu tinh trước tiên đều di chuyển đồng thời (chúng có thể di chuyển qua nhau và trên cùng một nút), và sau đó Santa sẽ di chuyển. Nếu Santa di chuyển vào cùng một nút với một yêu tinh, thì anh ta đã bắt được yêu tinh đó. Mỗi yêu tinh chỉ có thể di chuyển từ một nút sang hàng xóm của mình trong một bước. Điều tương tự cũng xảy ra với Santa ngay từ đầu, nhưng với mỗi yêu tinh mà anh ta bắt được, Santa có thể tiến thêm một bước. Vì vậy, nếu ông già Noel đã bắt được một yêu tinh, thì ông có thể di chuyển từ một nút đến người hàng xóm của nó. Điều này có nghĩa là anh ta có thể di chuyển đến một nút và sau đó quay lại. Tuy nhiên, vì Santa chạy quá nhanh trong khoảng thời gian này, anh ta sẽ không bắt được bất kỳ yêu tinh nào vượt qua các bước trung gian (vì vậy nếu anh ta ở trên A, A được kết nối với B, B được kết nối với C, có một yêu tinh trên B và Santa di chuyển từ A -> B -> C, yêu tinh vẫn chưa bị bắt). Tuy nhiên, Santa không phải di chuyển nhiều bước cùng một lúc; anh ta di chuyển lên tới 1 + (số lượng yêu tinh bị bắt) mỗi lượt.

Lưu ý rằng tất cả các yêu tinh phải di chuyển mỗi lượt và nếu một yêu tinh di chuyển đến nút của ông già Noel, họ sẽ bị bắt.

Tất cả các thực thể (yêu tinh, ông già Noel) sẽ ở trên các nút riêng biệt ngay từ đầu.

Thông số kỹ thuật và quy tắc

Về mặt lý thuyết, chương trình của bạn sẽ hoạt động cho đầu vào có kích thước bất kỳ. Đầu vào sẽ được đưa ra dưới dạng biểu đồ, vị trí của yêu tinh và vị trí của ông già Noel. Bạn có thể lấy biểu đồ ở bất kỳ định dạng hợp lý nào (danh sách các nút + danh sách các cạnh, danh sách các cạnh, ma trận kề, ký hiệu chu kỳ, v.v.) và bạn có thể nhận các vị trí ở bất kỳ định dạng hợp lý nào hoạt động với định dạng đầu vào biểu đồ của bạn (chỉ mục trong danh sách các nút, v.v.) Đầu ra phải là một số nguyên dương duy nhất cho biết số lượng yêu tinh tối đa mà ông già Noel có thể bắt được.

Các trường hợp thử nghiệm

Chúng được đưa ra dưới dạng danh sách các cạnh và số nút cho các vị trí.

Input -> Output
[(0, 1), (1, 2)], [0, 2], 1 -> 2 # Easy win for Santa, the elves get themselves caught :P
[(0, 1), (1, 2), (2, 3), (3, 0)], [0, 1], 2 -> 2 # The elf opposite of Santa cannot escape but the other one can always just run away each turn, until Santa catches the first elf. Then he can easily just catch the rest.
[(0, 1), (1, 2), (2, 3), (3, 0)], [1], 0 -> 0 # Santa will never catch up
[(0, 1), (1, 2), (2, 3), (3, 0), (1, 4), (4, 5), ..., (10, 11), (11, 3)], [2, 6], 0 -> 2 # The first elf moves to either 1 or 3 and then gets caught. Then, Santa can use his 2-step move to catch up to the second elf no matter what.

Tôi nghĩ ông già Noel có thể không bắt được yêu tinh hay tất cả các yêu tinh, vì vậy thử thách này có thể chỉ là "ông có thể bắt được một gợi ý "

Quy tắc

  • Áp dụng sơ hở tiêu chuẩn
  • Đây là một thử thách , vì vậy câu trả lời ngắn nhất tính theo byte sẽ thắng
  • Không có câu trả lời sẽ được chấp nhận

Chúc bạn chơi golf vui vẻ!

Lưu ý: Tôi đã lấy cảm hứng cho loạt thử thách này từ Advent Of Code . Tôi không có liên kết với trang web này

Bạn có thể xem danh sách tất cả các thử thách trong chuỗi bằng cách xem phần 'Liên kết' của thử thách đầu tiên tại đây .


1
Tôi ước gì tôi biết yêu tinh của ông già Noel được rằng xấu xa trước khi ...
Ông Xcoder

Cách tiếp cận để giải quyết điều này có lẽ sẽ là: 1Chứng minh một số phát biểu toán học. 2Đăng câu trả lời Jelly (/ ...) trong ít hơn 10 byte.
dùng202729

Vâng, có thể là ông già Noel có thể bắt một số nhưng không phải tất cả người tí hon (là nó có thể là một số chú lùn bắt đầu từ vị trí của ông già Noel, và nó có thể là những người tí hon tự nguyện để cho ông già Noel bắt họ?)
user202729

Chỉnh sửa: Không cho câu hỏi đầu tiên, nhưng có lẽ cho câu hỏi thứ hai.
dùng202729

3
@ user202729 Lưu ý rằng Santa không phải di chuyển 3 khoảng trắng; anh ta có thể di chuyển bất cứ nơi nào từ 1 đến 3 không gian. Đó có thể là nguồn gốc của sự nhầm lẫn ở đây.
HyperNeutrino

Câu trả lời:


1

Ngôn ngữ Wolfram (Mathicala) , 129 byte

Block[{a=#},Clear@f;s_~f~e_:=If[s==e,1,s~f~e=0;s~f~e=Min[(hMax[#~f~h&/@a@s,Boole[h==s]])/@a@e]];Tr[Max[(e#3~f~e)/@#2]^#2]]&

Hãy thử trực tuyến!

Cách tiếp cận tương tự với câu trả lời của tôi cho câu hỏi này .

Hàm lấy 3 đối số làm đầu vào: danh sách kề, được biểu diễn dưới dạng liên kết ( công cụ để tạo danh sách kề từ danh sách cạnh ), vị trí yêu tinh và vị trí santa.

Lưu ý rằng Clear[f]là cần thiết, bởi vì đệ trình chức năng phải được tái sử dụng.

Mã dưới đây là mã không được giải thích với một phần giải thích. Giải thích thêm sau.

reverseBoole = # != 0 &

(* Or@@{a, b} === reverseBoole[booleOr[Boole[{a, b}]]] *)
booleOr = Max

booleAnd = Min

(* Boole@f[s, e] = Santa can catch Elf ? *)

mainfunc = Block[{adjlist = #},
  Clear[f];
  f[s_, e_] := If[ s == e, f[s, e] = 1,
    f[s, e] = Boole[False];
    f[s, e] = booleAnd[
      (e1  booleOr[
        ( s1  f[s1, e1] ) /@ adjlist[s],
        Boole[e1 == s]
      ]) /@ adjlist[e]
    ]
  ];
  If [ 0 == booleOr[ ( e  f[#3, e] ) /@ #2 ] , 0, Length[#2] ]
]&

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.