Questa è la seconda delle due sfide su "tirare le funzioni tese". Ecco la parte I leggermente più semplice .
Guidiamo m chiodi in una tavola in posizioni (x 1 , y 1 ) a (x m , y m ) . Lega un elastico al primo e all'ultimo di quelli e allunga attorno alle altre unghie, in modo che la banda attraversi tutte le unghie in ordine. Si noti che l'elastico ora descrive una funzione parametrica lineare a tratti (x (t), y (t)) nello spazio 2D.
Ora guida un altro n chiodi nel tabellone, nelle posizioni (x 1 , y 1 ) a (x n , y n ) . Se ora rimuoviamo tutti i chiodi m originali tranne il primo e l'ultimo (a cui sono legate le estremità della gomma), l'elastico si accorcerà fino a quando non sarà teso attorno ai nuovi chiodi, dando un'altra funzione lineare a tratti.
Ad esempio, prendi m = 12 chiodi iniziali nelle posizioni (0, 0), (2, -1), (3/2, 4/3), (7/2, 1/3), (11/2, 16/3), (1, 16/3), (0, 1), (7, -2), (3, 4), (8, 1), (3, -1), (11, 0) e n = 10 ulteriori chiodi nelle posizioni (1, 1), (3, 1), (4, 4), (1, 3), (2, 2), (5, -1), (5, 0 ), (6, 2), (7, 1), (6, 0) . I seguenti tre grafici mostrano il processo sopra descritto:
Per versioni più grandi: fare clic con il pulsante destro del mouse -> Apri in una nuova scheda
Ed ecco un'animazione del serraggio dell'elastico se hai qualche difficoltà a visualizzarlo:
La sfida
Dati due elenchi di "chiodi", tracciare l'elastico teso attorno al secondo elenco se inizia dalla forma che attraversa tutti i chiodi del primo elenco.
È possibile scrivere un programma o una funzione e accettare input tramite STDIN, ARGV o argomento della funzione. È possibile visualizzare il risultato sullo schermo o salvare un'immagine in un file.
Se il risultato è rasterizzato, deve essere di almeno 300 pixel su ciascun lato. L'elastico finale e i chiodi devono coprire almeno il 75% dell'estensione orizzontale e verticale dell'immagine. Le scale di lunghezza x ed y devono essere uguali. Devi mostrare i chiodi nel secondo set (usando almeno 3x3 pixel) e la stringa (almeno 1 pixel di larghezza). È possibile includere o meno gli assi.
I colori sono la tua scelta, ma hai bisogno di almeno due colori distinguibili: uno per lo sfondo e uno per le unghie e il filo (quelli possono avere colori diversi però).
Puoi presumere che tutti i chiodi nel secondo elenco siano ad almeno 10-5 unità dalla forma iniziale dell'elastico (quindi non devi preoccuparti di imprecisioni in virgola mobile).
Questo è il golf del codice, quindi vince la risposta più breve (in byte).
Altri esempi
Ecco altri due esempi:
{{1, 1}, {3, 3}, {2, 4}, {1, 3}, {4, 0}, {3, -1}, {2, 0}, {4, 2}}
{{2, 1}, {3, 2}, {1, 2}, {4, 1}}
{{1, 1}, {3, 1}, {3, 3}, {1, 3}, {1, 5}, {3, 5}, {-1, 3}, {-1, 0}, {3, 4}, {5, 1}, {5, -1}, {7, -1}, {3, 7}, {7, 5}}
{{0, 0}, {0, 2}, {0, 4}, {0, 6}, {2, 0}, {2, 2}, {2, 4}, {2, 6}, {4, 0}, {4, 2}, {4, 4}, {4, 6}, {6, 0}, {6, 2}, {6, 4}, {6, 6}}
Ed ecco un esempio che mostra il significato di due chiodi iniziali rimasti. Il risultato dovrebbe essere b e non a :
{{0, 0}, {0, 1}, {-1, 1}, {-1, -1}, {1, -1}, {1, 0}}
{{-0.5, 0.5}}
Grazie a Ell per aver fornito questo esempio.