To wyzwanie zostało całkowicie zerwane w dużej mierze z inspiracji All Light , opracowanej przez Soulgit Games.
Wyzwanie
Jesteś elektrykiem i Twoim zadaniem jest podłączyć wszystkie światła do akumulatora.
- Światła i bateria są ułożone w siatkę.
- Możesz podłączyć światło lub baterię do najbliższego światła lub baterii na północ, południe, wschód i zachód.
- Bateria może mieć dowolną liczbę połączeń.
- Każde światło określa liczbę wymaganych połączeń. Musisz wykonać dokładnie tyle połączeń z tym światłem.
- Możesz utworzyć pojedyncze połączenia lub podwójne połączenia między dwoma światłami (lub światłem i akumulatorem).
- Przewody nie mogą się krzyżować.
- Musi istnieć ścieżka od każdego światła do akumulatora.
- Gwarantowane jest istnienie co najmniej jednego poprawnego rozwiązania.
Biorąc pod uwagę położenie baterii i każdego światła oraz liczbę połączeń wymaganych przez każde światło, wysyłaj połączenia między nimi, które akceptują te właściwości.
Warunek wygranej
To jest golf golfowy , więc wygrywa najkrótszy kod w każdym języku.
Przypadki testowe
I / O jest elastyczny jak zwykle.
Do wprowadzenia będę używać tablicy 2d wielkości siatki, która przechowuje dodatnie liczby całkowite dla świateł, zera dla pustych spacji i -1 dla akumulatora. Innym dobrym wyborem może być lista świateł, gdzie światło jest krotką zawierającą pozycję światła i liczbę wymaganych połączeń.
Do wyjścia wykorzystam listę połączeń, gdzie połączenie jest krotką zawierającą pozycję początkową i końcową. Jeśli połączenie zostanie podwojone, będę miał 2 z nich na liście (inną opcją jest zawarcie tego parametru w krotce). Inną dobrą opcją może być układ siatki.
Jeśli używasz układu współrzędnych, możesz podać indeks początkowy i miejsce, z którego indeksujesz. Moje przykłady będą indeksowane 0 i użyję (0, 0) jako lewego górnego rogu (wiersz, kolumna). (Używam {} po prostu do wprowadzenia innego rodzaju separatora, aby był łatwiejszy do odczytania, nie dlatego, że są to zestawy.)
Oto graficzny widok przypadków testowych: Testy 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]
.Odpowiedzi:
JavaScript (Node.js) ,
393391378 bajtówWypróbuj online!
źródło
[0-9]
jest używany