Đây là lần đầu tiên trong một loạt các thử thách Island Golf. Thách thức tiếp theo
Đưa ra một hòn đảo trong nghệ thuật ASCII, đưa ra một con đường tối ưu để đi vòng quanh nó.
Đầu vào
Đầu vào của bạn sẽ là một lưới hình chữ nhật bao gồm hai ký tự, đại diện cho đất và nước. Trong các ví dụ dưới đây, đất #
và nước là .
, nhưng bạn có thể thay thế bất kỳ hai ký tự riêng biệt nào bạn muốn.
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
Sẽ luôn có ít nhất một ngói đất. Tất cả các ô đất sẽ liền kề nhau (tức là chỉ có một hòn đảo). Các gạch nước cũng sẽ tiếp giáp nhau (tức là không có hồ). Đường viền bên ngoài của lưới sẽ là gạch nước. Gạch đất sẽ không được kết nối theo đường chéo: tức là, bạn sẽ không bao giờ thấy một cái gì đó như
....
.#..
..#.
....
Đầu ra
Mã của bạn phải xuất ra cùng một lưới, với một vòng tuần hoàn ngắn nhất được vẽ trên đó. Trong các ví dụ dưới đây, đường dẫn tuần hoàn được vẽ bằng o
, nhưng bạn có thể thay thế bất kỳ ký tự nào miễn là nó khác với các ký tự đất và nước của bạn.
Một vòng tuần hoàn là một đường cong khép kín đơn giản, được vẽ hoàn toàn trên gạch nước, bao quanh hoàn toàn tất cả các ô đất trên lưới. Kết nối đường chéo được cho phép. Chẳng hạn, đây là một vòng quanh đảo trên (nhưng không phải là ngắn nhất):
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
Độ dài của một vòng tuần hoàn được tính như sau: Đối với mỗi cặp gạch liền kề trên đường dẫn, nếu chúng được kết nối theo chiều ngang hoặc chiều dọc, hãy thêm 1; nếu chúng được kết nối theo đường chéo, thêm √2. Độ dài của đường dẫn trên là 22 + 7√2 (31.9).
Một vòng tuần hoàn ngắn nhất là một vòng tuần hoàn với chiều dài ngắn nhất có thể. Chương trình của bạn sẽ xuất ra bất kỳ một đường dẫn nào thỏa mãn điều kiện này. Đối với hầu hết các đảo, sẽ có nhiều giải pháp khả thi. Đây là một giải pháp cho hòn đảo trên, với chiều dài 10 + 13√2 (28,4):
...oo......
..o##oo....
.o#####oo..
.o#######o.
o#########o
.o.#######o
..o#####.#o
...o####.o.
....ooooo..
Chi tiết
Giải pháp của bạn có thể là một chương trình đầy đủ hoặc một chức năng . Bất kỳ phương thức nhập và xuất mặc định nào đều được chấp nhận.
Đầu vào và đầu ra của bạn có thể là một chuỗi nhiều dòng hoặc một danh sách các chuỗi. Nếu ngôn ngữ của bạn có loại ký tự khác với các chuỗi ký tự đơn, bạn có thể thay thế "danh sách các ký tự" cho "chuỗi" trong câu trước. Nếu ngôn ngữ của bạn cần nhập chiều cao và / hoặc chiều rộng của lưới, bạn có thể làm như vậy. Đầu ra của bạn có thể (tùy chọn) có một dòng mới duy nhất. Như đã đề cập ở trên, bạn có thể sử dụng bất kỳ ba ký tự riêng biệt nào thay thế #.o
(vui lòng ghi rõ trong bài gửi của bạn những ký tự bạn đang sử dụng).
Các trường hợp thử nghiệm
A. Quần đảo có vòng tuần hoàn ngắn nhất:
...
.#.
...
.o.
o#o
.o.
......
.####.
......
.oooo.
o####o
.oooo.
......
......
..##..
...#..
......
......
......
..oo..
.o##o.
..o#o.
...o..
......
.......
.#####.
...#...
...#...
.#####.
.......
.ooooo.
o#####o
o..#..o
o..#..o
o#####o
.ooooo.
.......
...#...
...#...
.#####.
...#...
...#...
.......
...o...
..o#o..
.o.#.o.
o#####o
.o.#.o.
..o#o..
...o...
.......
.#####.
.##..#.
..#..#.
.......
.ooooo.
o#####o
o##..#o
.o#..#o
..oooo.
B. Ví dụ về một hòn đảo có nhiều giải pháp khả thi:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
Đầu ra có thể:
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##.o..
..ooo...
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##.o..
..ooo...
C. Trường hợp thử nghiệm lớn như một ý chính
Đây là code-golf : mã ngắn nhất trong mỗi ngôn ngữ sẽ thắng.