Questa sfida è stata completamente strappata fortemente ispirata da All Light , sviluppata da Soulgit Games.
Sfida
Sei un elettricista ed è il tuo compito collegare tutte le luci alla batteria.
- Le luci e la batteria sono disposte in una griglia.
- È possibile collegare una luce o una batteria alla luce o alla batteria più vicine a nord, sud, est e ovest.
- La batteria può avere un numero qualsiasi di connessioni.
- Ogni luce specifica quante connessioni sono necessarie. Devi fare esattamente così tante connessioni a quella luce.
- È possibile creare connessioni singole o doppie tra due luci (o luce e batteria).
- I fili non possono incrociarsi.
- Deve esserci un percorso da ciascuna luce alla batteria.
- È garantita l'esistenza di almeno una soluzione valida.
Data la posizione della batteria e di ciascuna luce e il numero di connessioni richieste da ciascuna luce, emettere le connessioni tra loro che ammettono queste proprietà.
Condizioni di vittoria
Questo è code-golf , quindi vince il codice più corto in ogni lingua.
Casi test
L'I / O è flessibile come al solito.
Per l'input userò un array 2d delle dimensioni della griglia che memorizza numeri interi positivi per luci, zeri per spazi vuoti e -1 per la batteria. Un'altra buona scelta potrebbe essere un elenco di luci, in cui una luce è una tupla contenente la posizione della luce e il numero di connessioni necessarie.
Per l'output userò un elenco di connessioni, in cui una connessione è una tupla contenente la posizione iniziale e finale. Se una connessione viene raddoppiata, ne avrò 2 nell'elenco (un'altra opzione è quella di includere questo parametro nella tupla). Un'altra buona opzione potrebbe essere una sorta di layout della griglia.
Se si utilizza un sistema di coordinate, è possibile specificare l'indice iniziale e la provenienza dell'indice. I miei esempi saranno indicizzati 0 e userò (0, 0) come angolo in alto a sinistra (riga, colonna). (Sto usando {} semplicemente per introdurre un altro tipo di delimitatore in modo che sia più facile da leggere, non perché sono insiemi.)
Ecco una vista grafica dei casi di test: Test 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].