Ispirato alla sfida dei rapporti di cambio Lego di Keith Randall.
Anch'io ho intenzione di costruire un gigantesco robot lego che alla fine sarà in grado di distruggere gli altri robot nella competizione mai menzionata prima. * Nel processo di costruzione del robot, userò molti ingranaggi per connettermi diverse parti del robot. Voglio che tu mi scriva il programma più breve che mi aiuterà a costruire i complessi ingranaggi necessari per un compito così complesso. Ovviamente userò solo ingranaggi con raggio 1, 2, 3 e 5 unità di lego arbitrarie.
Ogni ingranaggio nel treno di ingranaggi ha una coordinata intera specifica su una griglia 2D. La prima marcia si trova in (0,0) e la marcia finale si troverà in coordinate non negative. La posizione e le dimensioni del primo e dell'ultimo ingranaggio verranno fornite come input, il programma deve dire quali ingranaggi vanno dove riempire gli spazi vuoti.
Inoltre, il programma deve utilizzare il numero minimo possibile di ingranaggi nella trasmissione. Meno ingranaggi / treno = più treni ** = robot di distruzione più grande e migliore.
L'input consisterà in una riga:
X,Y,B,A
X e Y sono le coordinate della marcia finale. La prima marcia si trova sempre in (0,0). B e A sono i raggi degli ingranaggi finale e iniziale, rispettivamente. Per aggiungere qualche difficoltà, è necessario assicurarsi che l'ingranaggio di uscita ruoti nella direzione corretta. Se A e B hanno lo stesso segno, l'ingranaggio di uscita deve ruotare nella stessa direzione e deve essere utilizzato un numero dispari di marce. Se hanno segni opposti, è necessario utilizzare un numero pari di marce.
L'output dovrebbe essere un elenco della posizione X, della posizione Y e dei raggi di ciascuna marcia aggiuntiva, una marcia per linea. Se sono disponibili più soluzioni con ingranaggi minimi, stampare solo una a scelta. L'ordine degli ingranaggi nell'output non ha importanza.
Esempi (potrebbero essere possibili soluzioni più equivalenti):
in
4,0,1,1
out
2,0,1
in
7,7,-2,-2
out
4,3,3
OR
0,7,5
OR
the above reflected over y=x line
in
7,8,-1,2
out
7,0,5
7,6,1
OR
7,0,5
1,8,5
in
7,7,2,-2
out
4,-3,3
7,1,2
12,1,3
12,7,3
OR
any permutation of the above, or reflected over y=x line
Now you're thinking with gear trains!
Ecco le soluzioni agli esempi precedenti, visualizzate:
Per quanto ne so, nessun problema è impossibile a meno che i due ingranaggi di input non si sovrappongano o si colleghino direttamente. Non dovrai occupartene.
Questo è il golf del codice, vince la risposta più breve.
* Un futuro KOTH, chiunque?
** CHOO CHOO !!
