Bu, bir dizi Ada Golf mücadelesinde ilkidir. Bir sonraki meydan okuma
ASCII-sanatında bir ada göz önüne alındığında, çevresini dolaşmak için optimal bir yol çıkar.
Giriş
Girişiniz, kara ve suyu temsil eden iki karakterden oluşan dikdörtgen bir ızgara olacaktır. Aşağıdaki örneklerde, toprak #
ve su .
, ancak istediğiniz iki karakterin yerine geçebilirsiniz.
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
Her zaman en az bir kara kiremit olacak. Kara kiremitlerinin tümü bitişik olacaktır (yani sadece bir ada vardır). Su karoları da bitişik olacaktır (yani göl yoktur). Şebekenin dış kenarının tamamı su kiremitleri olacaktır. Kara fayans olacak değil çapraz bağlanabilir: yani gibi bir şey görmek asla
....
.#..
..#.
....
Çıktı
Kodunuz, aynı ızgarayı, üzerinde çizilen en kısa örnekleme ile vermelidir . Aşağıdaki örneklerde, dairesel yol çizme yolu çizilir o
, ancak toprak ve su karakterlerinden farklı olduğu sürece herhangi bir karakteri kullanabilirsiniz.
Bir circumnavigation tam ızgara üzerinde tüm toprak kiremit etrafını saran, su fayans tamamen çekilmiş basit bir kapalı eğrisidir. Çapraz bağlantıları vardır izin verdi. Örneğin, bu yukarıdaki adanın bir örneğidir (en kısa olanı değil):
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
Bir çevre araştırmasının uzunluğu aşağıdaki şekilde hesaplanır: Yoldaki her bitişik fayans çifti için, yatay veya dikey olarak bağlanmışlarsa, 1 ekleyin; Çapraz bağlanmışlarsa add2 ekleyin. Yukarıdaki yolun uzunluğu 22 + 7√2'dir (≈ 31.9).
En kısa bir örnek, mümkün olan en kısa uzunluğa sahip bir örnek. Programınız bu koşulu karşılayan herhangi bir yolu çıkarmalıdır. Çoğu ada için, birçok olası çözüm olacaktır. 10 + 13√2 (≈ 28,4) uzunluktaki yukarıdaki ada için bir çözüm:
...oo......
..o##oo....
.o#####oo..
.o#######o.
o#########o
.o.#######o
..o#####.#o
...o####.o.
....ooooo..
ayrıntılar
Çözümünüz tam bir program veya işlev olabilir . Herhangi bir varsayılan giriş ve çıkış yöntemleri kabul edilebilir.
Giriş ve çıkışınız çok satırlı bir dize veya bir dize listesi olabilir. Eğer dil tek karakterlik dizeleri ayrı bir karakter türüne sahip, önceki cümlede "dizesi" için "karakter listesi" yerine. Dilinizin ızgaranın yüksekliğini ve / veya genişliğini girmesi gerekiyorsa, bunu yapabilirsiniz. Çıktınızın (isteğe bağlı olarak) tek bir izleyen yeni satırı olabilir. Yukarıda belirtildiği gibi, yerine herhangi bir üç karakter kullanabilirsiniz #.o
(lütfen gönderiminizde kullandığınız karakterleri belirtin).
Test durumları
A. Eşsiz en kısa sirkülasyonlara sahip adalar:
...
.#.
...
.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. Birden fazla olası çözümü olan bir ada örneği:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
Olası çıkışlar:
....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. Bir Gist olarak büyük test durumu
Bu kod golf : Her dilde en kısa kod kazanır.