Cài đặt
Hãy xem xét một hộp có hình dạng kỳ lạ chứa 29 ô được đánh số như trong Hình 1 bên dưới.
Bên trong chiếc hộp 2D này là hai loài động vật hình vuông: shubble và smoles. Hình. 1 (a) cho thấy một số shubble màu xanh lam và một số smoles màu đỏ. Mỗi sinh vật chiếm chính xác một ô lưới. Hộp có thể chứa bất kỳ vị trí nào trong khoảng từ 0 đến 26 shubble, nhưng sẽ luôn chứa chính xác hai smoles.
Chịu trọng lực, những con cá mập và những con cá đuối ngồi dưới đáy hộp, xếp chồng lên nhau bất cứ thứ gì bên dưới chúng. Cả hai loài đều đặc biệt lười biếng và vẫn bất động.
Chiếc hộp cũng chứa một cái cọc, được mô tả như một hình vuông màu đen, chiếm chính xác một ô lưới. Các stot không chịu trọng lực.
Hộp có một lỗ mở ở dưới cùng của ô 28, như được mô tả trong hình.
Để biểu thị cấu hình của shubble, smoles và stot trong hộp theo cách văn bản, chúng tôi sử dụng chuỗi 29 ký tự, một ký tự cho mỗi ô lưới, theo thứ tự liệt kê, .
đại diện cho một ô trống, o
đại diện cho một shubble, x
đại diện cho một smole, và @
đại diện cho stot. Ví dụ, cấu hình của Hình 1 (a) được biểu thị bằng chuỗi .........@...o....ooo..xox...
.
Thao tác
Hộp có thể được xoay bởi bất kỳ bội số 90 °. Trong khi hộp đang được xoay, các shubble và smoles vẫn đứng yên trong các ô lưới của chúng. Ngay khi một vòng quay hoàn thành, chúng rơi thẳng xuống cho đến khi i ) chúng bị chặn bởi một bức tường bên dưới, ii ) chúng bị chặn bởi một shubble, smole hoặc stot bên dưới, hoặc iii ) chúng rơi qua lỗ hổng trong ô 28 và thoát khỏi hộp. Các thỏi không rơi; nó vẫn cố định trong tế bào hiện tại của nó, ngay cả khi các sinh vật nằm trên nó.
Chiếc hộp không thể quay lại cho đến khi các sinh vật rơi xuống và đạt được cấu hình ổn định mới.
Về mặt văn bản, xoay hộp được biểu thị bằng cách +
xoay 90 ° theo chiều kim đồng hồ,|
cho xoay 180 ° và xoay -
90 ° ngược chiều kim đồng hồ.
Ngoài ra, stot có thể được di chuyển theo bốn hướng la bàn theo gia số của một ô lưới. Việc di chuyển có thể không: i ) gây ra va chạm giữa chuồng và sinh vật (tức là ô lưới đích phải trống), ii ) gây ra va chạm giữa chuồng và tường, cũng không phải là iii ) khiến cho chuồng thoát ra khỏi hộp. lỗ trong ô 28.
Ngoài ra, stot có thể không di chuyển nếu nó có bất kỳ sinh vật nào nằm trên nó (đối với trọng lực hiện tại).
Về mặt văn bản, các bước di chuyển được biểu thị bằng <
bên trái, >
bên phải, ^
lên và v
xuống. Di chuyển stot luôn được chỉ định liên quan đến khung "tiêu chuẩn" (không xoay) được mô tả trong các hình. Đó là, nếu stot nằm trong ô 10, di chuyển ^
sẽ luôn di chuyển nó đến ô 5 và di chuyển>
sẽ luôn di chuyển nó đến ô 11. Hướng của hộp không ảnh hưởng đến hướng di chuyển.
Chuỗi các thao tác được mã hóa bằng các chuỗi ký tự từ trái sang phải. Ví dụ: chuỗi+<<^-
biểu thị hộp được xoay theo chiều kim đồng hồ 90 °, sau đó, cột được di chuyển sang trái hai lần và lên một lần (đối với khung tiêu chuẩn), sau đó hộp được xoay 90 ° ngược chiều kim đồng hồ về hướng ban đầu.
Các thách thức
Vì những lý do hoàn toàn chính đáng (mà tôi không thể tiết lộ), chúng tôi muốn giải thoát tất cả các shubble khỏi hộp mà không thoát ra một smole. Để thực hiện điều này, chúng ta có thể sử dụng các thao tác được mô tả cụ thể ở trên.
Trước khi giải quyết vấn đề này, nó sẽ cho chúng ta mô phỏng cách các thao tác khác nhau của chúng ta sẽ ảnh hưởng đến nội dung của hộp, đó là trọng tâm của thử thách này.
Bạn phải viết một chương trình chấp nhận hai đối số từ stdin
(hoặc tương đương):
- một chuỗi mô tả trạng thái ban đầu của hộp
- một chuỗi các thao tác
Bạn có thể giả sử rằng cả hai đối số đều hợp lệ về mặt cú pháp, rằng hộp bắt đầu theo hướng chuẩn và trạng thái ban đầu của hộp là ổn định và hợp pháp.
Chương trình phải xuất ra stdout
(hoặc tương đương):
( trường hợp 1 ) trạng thái cuối cùng của hộp, được biểu thị dưới dạng chuỗi, nếu chuỗi di chuyển là hợp pháp (nó không vi phạm quy tắc di chuyển của stot) và không gây ra bất kỳ vết bẩn nào thoát khỏi hộp. Định hướng cuối cùng của hộp là không quan trọng.
( trường hợp 2 ) một dấu chấm than duy nhất
!
, nếu chuỗi di chuyển là bất hợp pháp hoặc khiến bất kỳ vết bẩn nào thoát ra khỏi hộp
Chấm điểm
Chương trình chiến thắng là chương trình ngắn nhất theo số byte , tùy thuộc vào một số bội số tiền thưởng cực kỳ hấp dẫn:
yêu cầu hệ số nhân 0,65 nếu thay vì in đầu ra được mã hóa cho trường hợp 1, chương trình xuất ra hình ảnh ASCII của hộp ở trạng thái và hướng cuối cùng của nó, sử dụng các ký tự đặc tả cho các shubble, smots, stots và các ô trống và đặt một
*
trong ô ngay bên ngoài lỗ trong ô 28. Khoảng trắng đầu và cuối được bỏ qua.Ví dụ, nếu Hình 1 (a) được xoay 90 °, đầu ra sẽ là
. . ..... .o... xo.@. *ooo.. x .
yêu cầu hệ số nhân là 0,22 nếu thay vì in đầu ra được mã hóa cho trường hợp 1, chương trình xuất ra tệp hình ảnh hoặc hiển thị cửa sổ GUI có hình ảnh của hộp ở trạng thái và hướng cuối cùng. Hình ảnh phải theo phong cách của Hình 1 (a), hiển thị các ô lưới, tường và sinh vật / gốc bằng các hộp màu.
yêu cầu hệ số 0,15 nếu thay vì in đầu ra được mã hóa cho trường hợp 1, chương trình xuất ra cửa sổ GUI .gif hoặc hoạt hình hiển thị tất cả các trạng thái trung gian trong mô phỏng trong khoảng thời gian 1 giây. Các quy tắc hình ảnh tương tự như cho số nhân 0,22 được áp dụng. Khung đầu tiên của hình ảnh động sẽ mô tả trạng thái ban đầu của mô phỏng. Ngoài ra, hình ảnh động sẽ hiển thị trạng thái trung gian "ẩn", đó là
các shubble / smoles rơi vào cấu hình ổn định bởi một ô trên mỗi khung hình động sau khi xoay
trạng thái trung gian 90 ° của hộp trong một vòng quay 180 °
yêu cầu hệ số nhân là 0,12 nếu chương trình tạo ra một cửa sổ GUI hoạt hình .gif hoặc hoạt hình theo kiểu trên, nhưng chạy ở tốc độ 20 khung hình / giây và hiển thị
hình ảnh động mượt mà, liên tục của hộp xoay
hình ảnh động mượt mà, liên tục của stot di chuyển, và của các shubbled / smoles rơi vào một cấu hình ổn định
Các mảnh vỡ rơi qua lỗ hổng trong ô 28 phải được hiển thị khi thoát khỏi hộp và sẽ biến mất một khi hoàn toàn ở bên ngoài. Bạn có thể chọn thời gian của riêng mình cho hoạt hình miễn là không quá 1 thao tác / giây được thực hiện.
Tổng số điểm là floor( base score * multiplier )
. Chỉ có một số nhân có thể được yêu cầu.
Rốt cuộc đó là một thế giới smole. ;)