C'est le premier d'une série de défis Island Golf. Prochain challenge
Avec un îlot en ASCII-art, affiche un chemin optimal pour le contourner.
Contribution
Votre entrée sera une grille rectangulaire composée de deux caractères, représentant la terre et l’eau. Dans les exemples ci-dessous, la terre est #
et l'eau est .
, mais vous pouvez substituer deux caractères distincts de votre choix.
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
Il y aura toujours au moins une tuile de terre. Les tuiles de terrain seront toutes contiguës (c'est-à-dire qu'il n'y a qu'une seule île). Les dalles d’eau seront également contiguës (c’est-à-dire qu’il n’ya pas de lacs). La bordure extérieure de la grille sera constituée de carreaux d’eau. Les tuiles de terrain ne seront pas reliées en diagonale: vous ne verrez jamais quelque chose comme
....
.#..
..#.
....
Sortie
Votre code doit sortir la même grille, avec une circumnavigation la plus courte dessinée. Dans les exemples ci-dessous, le chemin de circumnavigation est dessiné avec o
, mais vous pouvez remplacer n'importe quel caractère tant qu'il est distinct de vos personnages de terre et d'eau.
Une circumnavigation est une simple courbe fermée, entièrement dessinée sur des tuiles d'eau, qui entoure complètement toutes les tuiles de terrain de la grille. Les connexions diagonales sont autorisées. Par exemple, ceci est une circumnavigation de l'île ci-dessus (mais pas la plus courte):
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
La longueur d'une circumnavigation est calculée comme suit: pour chaque paire de tuiles adjacentes sur le chemin, si elles sont connectées horizontalement ou verticalement, ajoutez 1; s'ils sont connectés en diagonale, ajoutez √2. La longueur du chemin ci-dessus est de 22 + 7√2 (31.9).
Une circumnavigation la plus courte est une circumnavigation dont la longueur est la plus courte possible. Votre programme doit générer tout chemin répondant à cette condition. Pour la plupart des îles, les solutions possibles seront multiples. Voici une solution pour l’île ci-dessus, de longueur 10 + 13√2 (28.4):
...oo......
..o##oo....
.o#####oo..
.o#######o.
o#########o
.o.#######o
..o#####.#o
...o####.o.
....ooooo..
Détails
Votre solution peut être un programme complet ou une fonction . Toutes les méthodes d'entrée et de sortie par défaut sont acceptables.
Votre entrée et votre sortie peuvent être une chaîne multiligne ou une liste de chaînes. Si votre langue a un type de caractère distinct des chaînes à caractère unique, vous pouvez remplacer "liste de caractères" par "chaîne" dans la phrase précédente. Si votre langue doit entrer la hauteur et / ou la largeur de la grille, vous pouvez le faire. Votre sortie peut (éventuellement) avoir une nouvelle ligne de fin. Comme mentionné ci-dessus, vous pouvez utiliser trois caractères distincts à la place de #.o
(veuillez spécifier dans votre soumission les caractères que vous utilisez).
Cas de test
A. Îles avec les plus courtes circumnavigations uniques:
...
.#.
...
.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. Exemple d'îlot avec plusieurs solutions possibles:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
Sorties possibles:
....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. Grand test en tant que Gist
C'est du code-golf : c'est le code le plus court dans chaque langue qui gagne.