Tro choi
Hầu hết chúng ta đều biết về Frogger , trò chơi arcade thời kỳ 80, trong đó mục tiêu là nhảy một con ếch an toàn qua đường cao tốc bận rộn và một cái ao đầy nguy hiểm để đến nhà an toàn.
Một thử thách đã được đưa ra vài tháng trước để phát triển bản sao Frogger. Nhưng tại sao lại nhân bản Frogger khi bạn có thể chơi Frogger? :)
Hãy xem xét lưới chơi đơn giản hóa sau:
XXXXXXXXXXXXXXXXXXXXXXX North Safe Zone
-----------------------
| | <<<< Express Lane West (Lane 1)
| | > Gridlock East (Lane 2)
| | << Freeflowing Traffic West (Lane 3)
| | < Gridlock West (Lane 4)
| | >>>> Express Lane East (Lane 5)
-----------------------
XXXXXXXXXXX@XXXXXXXXXXX South Safe Zone
\__________ __________/
'
23 cells horizontally
Chúng tôi có năm làn xe lưu thông, mỗi làn rộng 23 ô và hai vùng an toàn (nơi ếch có thể di chuyển an toàn sang trái và phải), cũng rộng 23 ô. Bạn có thể bỏ qua các biên giới bên phải và bên trái vì đây là cho rõ ràng hình ảnh.
Ếch của chúng tôi bắt đầu trong vùng an toàn phía nam, trên tế bào trung tâm (thứ 12), như được chỉ ra bởi một @
trong hình trên.
Thời gian trong trò chơi được chia thành các bước riêng biệt được gọi là khung. Froggy là một con ếch nhanh và có thể nhảy một ô theo bất kỳ hướng nào (lên, xuống, phải, trái) trên mỗi khung. Anh ta cũng có thể chọn đứng yên cho bất kỳ khung hình nào. Giao thông trong năm làn di chuyển với tốc độ không đổi như sau:
- giao thông ở làn tốc hành phía tây (làn 1) di chuyển 2 ô còn lại mỗi khung
- giao thông trong làn đường phía đông chặn đường (làn 2) di chuyển 1 ô ngay mỗi khung hình thứ hai
- giao thông trong làn đường phía tây giao thông tự do (làn 3) di chuyển 1 ô còn lại mỗi khung
- giao thông trong làn đường phía tây bị chặn (làn 4) di chuyển 1 ô còn lại mỗi khung hình thứ hai
- giao thông trong làn tốc hành phía đông (làn 5) di chuyển 2 ô ngay mỗi khung
Lưu lượng truy cập được xác định duy nhất cho khoảng. 3.000 dấu thời gian trong tệp văn bản này . "Giao thông" bao gồm các phương tiện và không gian giữa các phương tiện. Bất kỳ nhân vật không phải là một không gian là một phần của một chiếc xe. Tệp văn bản chứa năm dòng, tương ứng với năm làn lưu lượng (có cùng thứ tự).
Đối với các làn đường đi về hướng tây, khi bắt đầu khung 0 (bắt đầu trò chơi), chúng tôi coi phương tiện đầu tiên trong làn đường nằm ngay sát mép phải của lưới chơi.
Đối với làn đường hướng đông, chuỗi giao thông nên được coi là "lùi" theo nghĩa là các phương tiện xuất hiện bắt đầu từ cuối chuỗi. Khi bắt đầu khung 0, chúng tôi coi chiếc xe đầu tiên trong các làn này chỉ nằm ngoài rìa trái của sân chơi.
Hãy xem xét như một ví dụ:
Traffic Lane 1: [|==| =
Traffic Lane 2: |) = o
Traffic Lane 3: (|[]-[]:
Traffic Lane 4: <| (oo|
Traffic Lane 5: |==|] :=)
Sau đó, lưới chơi sẽ xuất hiện như sau:
Start of Frame 0 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 1 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 2 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 3 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Sau khi tất cả lưu lượng trong một làn đường bị "cạn kiệt" (tức là hết chuỗi), chúng tôi coi tất cả các ký tự trong chuỗi là khoảng trắng.
Ếch của chúng tôi bị vắt nếu có bất kỳ điều nào sau đây xảy ra:
- con ếch chiếm một tế bào bị chiếm giữ bởi một chiếc xe, trên bất kỳ khung nào
- con ếch vẫn đứng yên trong làn tốc hành và một chiếc xe có chiều rộng 1 ô vượt qua anh ta trong khung đó
- con ếch nhảy về phía đông "xuyên qua" một chiếc xe đi về hướng tây, hoặc nhảy về phía tây qua một chiếc xe đi về hướng đông
- con ếch nhảy ra ngoài lưới 7 (dòng) bởi 23 (ô), trên bất kỳ khung nào
Lưu ý rằng đây là những điều kiện duy nhất mà theo đó một con ếch bị vắt. Cụ thể, một con ếch nhảy theo giao thông "với" là được phép, cũng như một con ếch nhảy vào hoặc ra khỏi một tế bào trong làn đường cao tốc được vượt qua bởi một phương tiện chiều rộng 1 trong cùng một khung.
Mục tiêu và chấm điểm
Mục tiêu của thử thách lập trình là đưa chú ếch băng qua đường nhiều lần nhất có thể trước khi chiếc xe cuối cùng thoát khỏi lưới chơi . Nghĩa là, chương trình chấm dứt ngay sau khi hoàn thành khung X , trong đó khung X là khung đầu tiên đưa lưới về trạng thái không có thêm phương tiện.
Đầu ra của chương trình của bạn phải là một chuỗi (hoặc tệp văn bản) chứa chuỗi di chuyển cho ếch bằng cách sử dụng mã hóa sau:
< frog moves left
> frog moves right
^ frog moves up
v frog moves down
. frog remains stationary
Ví dụ, chuỗi <<^.^
chỉ ra rằng con ếch di chuyển sang trái hai lần, sau đó lên, sau đó tạm dừng cho một khung hình, sau đó di chuyển lên.
Một điểm được ghi bất cứ khi nào ếch vượt qua từ vùng an toàn phía nam đến vùng an toàn phía bắc và một điểm được ghi mỗi khi ếch vượt qua từ vùng an toàn phía bắc đến vùng an toàn phía nam.
Một số quy tắc quan trọng:
- Con ếch không được squished.
- Vui lòng gửi giải pháp của bạn (trình tự di chuyển) cùng với mã chương trình của bạn, theo dòng hoặc dưới dạng tệp văn bản (ví dụ: sử dụng pastebin.com).
- Ếch của chúng tôi là người biết trước và biết trước, do đó chương trình của bạn có thể sử dụng bất kỳ và tất cả dữ liệu lưu lượng truy cập trong bất kỳ khung nào trong khi tìm kiếm giải pháp. Điều này bao gồm dữ liệu cho lưu lượng truy cập chưa đến lưới phát.
- Lưới không quấn quanh. Thoát khỏi lưới sẽ khiến ếch bị vắt và do đó không được phép.
- Không có lúc nào lưu lượng truy cập "thiết lập lại" hoặc ếch "dịch chuyển tức thời". Các mô phỏng là liên tục.
- Con ếch có thể trở về vùng an toàn phía nam sau khi thoát khỏi nó, nhưng điều này không được tính là một điểm. Tương tự như vậy đối với vùng an toàn phía bắc.
- Người chiến thắng cuộc thi là chương trình tạo ra chuỗi di chuyển mang lại số lượng giao cắt cao nhất.
- Đối với bất kỳ câu hỏi hoặc mối quan tâm bổ sung, xin vui lòng hỏi trong phần ý kiến.
Đối với một số ưu đãi được thêm vào, tôi sẽ thêm tiền thưởng +100 đại diện cho chương trình chiến thắng khi tôi có thể làm như vậy.
Tiền thưởng
+ 2,5% cho điểm cơ bản * (tối đa + 10%) cho mỗi góc của lưới chơi mà ếch chạm vào. Bốn góc của lưới là các ô ngoài cùng bên phải và bên phải của hai vùng an toàn.
+ 25% cho điểm cơ bản * nếu chuỗi di chuyển của bạn giữ cho ếch bị giới hạn trong phạm vi +/- 4 ô bên trái hoặc bên phải của ô bắt đầu cho toàn bộ mô phỏng (tất nhiên anh ta có thể di chuyển tự do theo chiều dọc).
Không có phần thưởng cho điểm, nhưng các đạo cụ đặc biệt trong OP sẽ gửi tới bất kỳ ai đăng trình xác nhận giải pháp bẩn nhanh chóng để tôi không phải lập trình. ;) Một trình xác nhận đơn giản sẽ chấp nhận một chuỗi các bước di chuyển, đảm bảo tính hợp pháp của nó (theo các quy tắc và tệp lưu lượng truy cập) và báo cáo điểm số của nó (tức là tổng số giao cắt).
* Tổng số điểm bằng với điểm cơ bản cộng với tiền thưởng, làm tròn xuống số nguyên gần nhất.