Ini adalah yang pertama dari serangkaian tantangan Island Golf. Tantangan selanjutnya
Diberi nama pulau dalam seni ASCII, menghasilkan jalur yang optimal untuk mengelilingi pulau itu.
Memasukkan
Input Anda akan berupa kotak persegi panjang yang terdiri dari dua karakter, mewakili tanah dan air. Dalam contoh di bawah ini, tanah adalah #
dan air adalah .
, tetapi Anda dapat mengganti dua karakter berbeda yang Anda inginkan.
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
Akan selalu ada setidaknya satu ubin tanah. Ubin tanah semuanya akan bersebelahan (yaitu hanya ada satu pulau). Ubin air juga akan bersebelahan (yaitu tidak ada danau). Perbatasan luar dari grid semua akan menjadi ubin air. Ubin tanah tidak akan terhubung secara diagonal: yaitu, Anda tidak akan pernah melihat sesuatu seperti itu
....
.#..
..#.
....
Keluaran
Kode Anda harus menampilkan kisi yang sama, dengan navigasi keliling terpendek di atasnya. Pada contoh di bawah ini, jalur navigasi keliling digambar o
, tetapi Anda dapat mengganti karakter apa pun asalkan berbeda dari karakter tanah dan air Anda.
Sebuah mengelilingi adalah kurva tertutup sederhana, ditarik sepenuhnya pada ubin air, yang sepenuhnya mengelilingi semua ubin tanah di grid. Koneksi diagonal yang diperbolehkan. Misalnya, ini adalah penjelajahan dari pulau di atas (tetapi bukan yang terpendek):
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
Panjang navigasi mengelilingi dihitung sebagai berikut: Untuk setiap pasangan ubin yang berdekatan di jalan, jika mereka terhubung secara horizontal atau vertikal, tambahkan 1; jika mereka terhubung secara diagonal, tambahkan √2. Panjang jalur di atas adalah 22 + 7√2 (≈ 31,9).
Sebuah terpendek mengelilingi adalah mengelilingi dengan panjang sesingkat mungkin. Program Anda harus menampilkan satu jalur yang memenuhi kondisi ini. Untuk sebagian besar pulau, akan ada beberapa kemungkinan solusi. Berikut adalah satu solusi untuk pulau di atas, dengan panjang 10 + 13√2 (≈ 28,4):
...oo......
..o##oo....
.o#####oo..
.o#######o.
o#########o
.o.#######o
..o#####.#o
...o####.o.
....ooooo..
Detail
Solusi Anda mungkin merupakan program atau fungsi lengkap . Salah satu input dan output metode standar yang dapat diterima.
Input dan output Anda mungkin berupa string multiline atau daftar string. Jika bahasa Anda memiliki tipe karakter yang berbeda dari string karakter tunggal, Anda dapat mengganti "daftar karakter" untuk "string" dalam kalimat sebelumnya. Jika bahasa Anda perlu memasukkan tinggi dan / atau lebar kisi, Anda dapat melakukannya. Output Anda mungkin (secara opsional) memiliki satu baris baru. Seperti disebutkan di atas, Anda dapat menggunakan tiga karakter berbeda sebagai pengganti #.o
(harap tentukan dalam kiriman Anda karakter mana yang Anda gunakan).
Uji kasus
A. Pulau dengan navigasi berkeliling terpendek yang unik:
...
.#.
...
.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. Contoh pulau dengan beberapa solusi yang memungkinkan:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
Output yang mungkin:
....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. Kasus uji besar sebagai Intisari
Ini adalah kode-golf : kode terpendek dalam setiap bahasa menang.