Lý lịch
Thử thách này là để vinh danh những người chơi apsillers , người đã chiến thắng hạng mục Không đơn giản như vẻ ngoài của Best of PPCG 2016 với thử thách của họ Hộp nhạc 4 nốt của tôi có thể phát bài hát đó không? Xin chúc mừng!
Trên trang "Giới thiệu về tôi" của họ, người dùng này có một trình giả lập thực sự gọn gàng cho thiết bị tự động di động Game of Life . (Nghiêm túc, đi kiểm tra xem.) Mặt khác, từ aspillera là tiếng Tây Ban Nha có nghĩa là "mũi tên sáng". Trước những sự thật này, thử thách này là về những mũi tên trong Trò chơi cuộc sống.
Trò chơi mũi tên cuộc sống
Trong GoL, chúng ta sẽ biểu thị một mũi tên bằng tàu lượn và một bức tường bằng một chuỗi các khối . Một tàu lượn duy nhất tiếp cận bức tường từ trên cao và cố gắng bay qua một khoảng trống trên tường (mũi tên sáng). Nhiệm vụ của bạn là kiểm tra xem tàu lượn có đi qua mũi tên sáng hay đâm vào tường không.
Đầu vào
Đầu vào của bạn là một lưới các bit, đại diện cho cấu hình GoL. Bạn có thể lấy nó ở bất kỳ định dạng hợp lý nào (chuỗi nhiều dòng của bất kỳ hai ký tự ASCII có thể in được, danh sách các chuỗi, mảng số nguyên 2D, mảng booleans 2D, v.v.). Để rõ ràng, tôi sẽ sử dụng các chuỗi nhiều dòng của các ký tự .#
sau đây.
Đầu vào được đảm bảo có một số thuộc tính. Đầu tiên, chiều cao của nó là 2N đối với một số N 6 và chiều rộng của nó ít nhất là 2N + 2 . Đầu vào sẽ là tất cả .
s, ngoại trừ một nơi nào đó trên ba hàng trên cùng là tàu lượn và trên hai hàng giữa có một bức tường khối. Tàu lượn sẽ hướng về phía tây nam hoặc đông nam, và vị trí của nó là nếu các bức tường được gỡ bỏ, nó sẽ không đi qua một cạnh bên trước khi đến cạnh dưới cùng (nhưng nó có thể chạm tới một góc của lưới). Tàu lượn ban đầu được tách ra khỏi các cạnh trái và phải ít nhất một bước của .
s. Nó có thể trong bất kỳ giai đoạn.
Bức tường bao gồm các khối, được ngăn cách bởi một cột của .
s, ngoại trừ ở một nơi, nơi chúng sẽ được ngăn cách bởi ít nhất hai cột của .
s. Giống như tàu lượn, các khối ngoài cùng bên phải và bên phải cũng được tách ra khỏi các cạnh bằng một bước của .
s. Sẽ luôn có ít nhất một khối ở cạnh trái và một khối ở cạnh phải.
Dưới đây là một ví dụ về lưới đầu vào hợp lệ:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
Đầu ra
Như đã nêu, nhiệm vụ của bạn là xác định xem tàu lượn có đâm vào tường hay đi qua rìa phía nam hay không. Đối với mục đích của thử thách này, một sự cố xảy ra nếu cấu hình không còn bao gồm một tàu lượn và tường khối, bất kể điều gì xảy ra sau đó trong mô phỏng. Các sơ đồ sau đây cho thấy những khoảng trống nhỏ nhất mà tàu lượn phía đông nam có thể đi qua mà không bị rơi trong hai giai đoạn riêng biệt (điều kiện cho tàu lượn phía tây nam là đối xứng).
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
Nếu tàu lượn bay qua tường, bạn sẽ xuất ra một giá trị trung thực và nếu không thì là giá trị giả. Đối với ví dụ trên, đầu ra chính xác là sai, vì tàu lượn sẽ đâm vào phần bên trái của bức tường.
Đối với mục đích của thử thách này, bạn có thể giả sử rằng nếu bạn mô phỏng GoL trên đầu vào cho các bước 2 * (chiều cao - 3) , tàu lượn nằm ở hàng dưới cùng ở vị trí mong đợi và tường vẫn còn nguyên, thì đầu ra là đúng .
Quy tắc và tính điểm
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng.
Các trường hợp thử nghiệm
Tôi đã thu thập các trường hợp thử nghiệm vào kho lưu trữ GitHub , vì chúng khá lớn. Dưới đây là các liên kết đến các tệp riêng lẻ: