Ce défi est complètement arnaqué, fortement inspiré de All Light , développé par Soulgit Games.
Défi
Vous êtes électricien et c'est votre travail de câbler toutes les lumières à la batterie.
- Les lumières et la batterie sont disposées dans une grille.
- Vous pouvez connecter une lumière ou une batterie à la lumière ou à la batterie la plus proche au nord, au sud, à l'est et à l'ouest.
- La batterie peut avoir un nombre illimité de connexions.
- Chaque voyant spécifie le nombre de connexions dont il a besoin. Vous devez établir exactement autant de connexions avec cette lumière.
- Vous pouvez créer des connexions simples ou doubles entre deux lumières (ou lumière et batterie).
- Les fils ne peuvent pas se croiser.
- Il doit y avoir un chemin entre chaque lumière et la batterie.
- Il existe au moins une solution valide.
Étant donné la position de la batterie et de chaque lumière, et le nombre de connexions que chaque lumière nécessite, émettez les connexions entre elles qui admettent ces propriétés.
Condition de victoire
C'est le code-golf , donc le code le plus court dans chaque langue l'emporte.
Cas de test
Les E / S sont flexibles comme d'habitude.
Pour l'entrée, j'utiliserai un tableau 2D de la taille de la grille qui stocke des entiers positifs pour les lumières, des zéros pour les espaces vides et -1 pour la batterie. Un autre bon choix pourrait être une liste de lumières, où une lumière est un tuple contenant la position de la lumière et le nombre de connexions requises.
Pour la sortie, j'utiliserai une liste de connexions, où une connexion est un tuple contenant la position de départ et la position de fin. Si une connexion est doublée, j'en aurai 2 dans la liste (une autre option est d'inclure ce paramètre dans le tuple). Une autre bonne option pourrait être une sorte de disposition de la grille.
Si vous utilisez un système de coordonnées, vous pouvez spécifier l'index de départ et d'où vous indexez. Mes exemples seront indexés 0 et utiliseront (0, 0) comme coin supérieur gauche (ligne, colonne). (J'utilise {} simplement pour introduire un autre type de délimiteur afin qu'il soit plus facile à lire, pas parce qu'ils sont des ensembles.)
Voici une vue graphique des cas de test: Tests 1-12
Test 1:
[-1 | 0 | 1 ] => [{(0, 0), (0, 2)}]
Test 2:
[-1 | 0 | 2 ] => [{(0, 0), (0, 2)}, {(0, 0), (0, 2)}]
Test 3:
[-1 ]
[ 0 ] => [{(0, 0), (2, 0)), ((0, 0), (2, 0)}]
[ 2 ]
Test 4:
[ 1 | 0 |-1 | 0 | 2 ] => [{(0, 0), (0, 2)}, {(0, 2), (0, 4)}, {(0, 2), (0, 4)}]
Test 5:
[ 2 ]
[ 0 ]
[-1 ] => [{(0, 0), (2, 0)}, {(0, 0), (2, 0)}, {(2, 0), (4, 0)}]
[ 0 ]
[ 1 ]
Test 6:
[ 1 | 0 | 0 ]
[ 0 | 0 | 0 ] => [{(0, 0), (2, 0)}, {(2, 0), (2, 2)}]
[ 2 | 0 |-1 ]
Test 7:
[ 4 | 0 | 0 |-1 ]
[ 0 | 0 | 0 | 0 ] => [{(0, 0), (0, 3)}, {(0, 0), (0, 3)},
[ 2 | 0 | 0 | 0 ] {(0, 0), (3, 0)}, {(0, 0), (3, 0)}]
Test 8:
[ 2 | 0 |-1 | 0 | 2 ] [{(0, 0), (0, 2)}, {(0, 0), (0, 2)},
[ 0 | 0 | 0 | 0 | 0 ] => {(0, 2), (0, 4)}, {(0, 2), (0, 4)},
[ 0 | 0 | 1 | 0 | 0 ] {(0, 2), (2, 2)}]
Test 9:
[ 0 | 0 | 2 | 0 | 0 ]
[ 0 | 0 | 0 | 0 | 0 ]
[ 1 | 0 |-1 | 0 | 1 ] => [{(0, 2), (2, 2)}, {(0, 2), (2, 2)}, {(2, 0), (2, 2)},
[ 0 | 0 | 0 | 0 | 0 ] {(4, 2), (2, 2)}, {(2, 4), (2, 2)}, {(2, 4), (2, 2)}]
[ 0 | 0 | 2 | 0 | 0 ]
Test 10:
[-1 | 2 | 3 | 2 ] => [{(0, 0), (0, 3)}, {(0, 0), (0, 3)},
{(0, 0), (0, 3)}, {(0, 0), (0, 3)}]
Test 11:
[-1 | 0 | 0 | 0 ]
[ 3 | 0 | 0 | 0 ]
[ 3 | 0 | 0 | 3 ] => [{(0, 0), (1, 0)}, {(1, 0), (2, 0)}, {(1, 0), (2, 0)},
[ 0 | 0 | 0 | 0 ] {(2, 0), (2, 3)}, {(2, 3), (4, 3)}, {(2, 3), (4, 3)}]
[ 0 | 0 | 0 | 2 ]
Test 12:
[ 2 | 0 | 0 ] [{(0, 0), (1, 0)}, {(0, 0), (1, 0)}, {(1, 0), (1, 1)},
[ 3 |-1 | 0 ] => {(1, 1), (2, 1)}, {(1, 1), (2, 1)}, {(2, 0), (2, 1)},
[ 2 | 5 | 1 ] {(2, 0), (2, 1)}, {(2, 1), (2, 2)}]
[1 | -1] [1 1]
.Réponses:
JavaScript (Node.js) ,
393391378 octetsEssayez-le en ligne!
la source
[0-9]
Est habituellement utilisé