Data un'immagine che ha solo pixel bianchi e neri e una posizione (x, y) che è un pixel bianco, colora i pixel bianchi in base alla loro minima distanza di Manhattan da (x, y) in un percorso che prevede solo l'attraversamento di altri pixel bianchi.
La tonalità dei pixel colorati deve essere proporzionale alla loro distanza da (x, y), quindi il pixel a (x, y) avrà una tonalità di 0 ° (rosso puro) e i pixel più lontani da (x, y) avrà una tonalità di 360 ° (anche rossa), con le altre tonalità che si fondono in modo continuo e lineare. La saturazione e il valore devono essere entrambi al 100%.
Se un pixel bianco non è collegato a (x, y) attraverso altri pixel bianchi, deve rimanere bianco.
Dettagli
- L'input consisterà nel nome del file dell'immagine o dei dati non elaborati dell'immagine, più i numeri interi xey.
- L'immagine di output può essere salvata in un file o reindirizzata allo stdout in qualsiasi formato di file immagine comune o semplicemente visualizzata.
- Il valore x è 0 sui pixel più a sinistra e aumenta andando a destra. Il valore y è 0 nei pixel più in alto e aumenta andando verso il basso. (x, y) sarà sempre nei limiti dell'immagine.
- Sono ammessi programmi e funzioni completi.
Vince il codice più breve in byte.
Esempi
Tutte queste immagini sono state ridimensionate per risparmiare spazio. Fare clic per visualizzarli a dimensioni intere.
Immagine di input:
(x,y) = (165,155)
e (x,y) = (0,0)
Immagine di input e output con (x,y) = (0,0)
:
Immagine di input e output con (x,y) = (600,350)
:
Immagine di input e output con (x,y) = (0,0)
:
Immagine di input e output con (x,y) = (0,0)
:
Bonus opzionale del 30%: usa la distanza euclidea. Un suggerimento per il tuo algoritmo è il seguente (schema generale):
- Avere un pixel iniziale.
- Riempi inondando da quel pixel.
- Per ogni pixel raggiunto nel riempimento dell'inondazione,
- Passa dal pixel iniziale a quel pixel a passi di mezza unità, in linea retta.
- Ad ogni passaggio, applicare
int()
alle coordinate xey. Se il pixel in queste coordinate è nero, fermati. Altrimenti, continua. (Questo è un metodo di linea di vista.) - Qualsiasi pixel raggiunto che confina con un pixel bianco e / o un pixel precedentemente etichettato con una distanza significativamente più alta (ovvero, +10) diventa un pixel iniziale.
In un senso più meta, questo algoritmo si estende a tutti i pixel raggiungibili in linea retta da pixel iniziali / già colorati, quindi "pollici" attorno ai bordi. Il bit "distanza significativamente più alta" ha lo scopo di accelerare l'algoritmo. Onestamente, non importa davvero come si implementa la distanza euclidea, deve solo assomigliare a questo.
Ecco come appare il primo esempio con la distanza euclidea, usando l'algoritmo sopra:
Immagine di input e (x,y) = (165,155)
Mille grazie a Calvin'sHobbies e trichoplax per aver contribuito a scrivere questa sfida! Divertiti!