Prefazione
Mentre stavo girando un tiro con l'arco a 900 round oggi (10 finisce a 6 frecce alla fine e 10 finisce a 3 frecce alla fine, per un totale di 90 frecce e un punteggio massimo di 900), ho pensato a questa sfida.
Nel tiro con l'arco (supponendo che stai sparando su una faccia bersaglio fornita dalla FITA [il pezzo di carta che spari a]], per ogni freccia puoi ottenere un punteggio massimo di 10. La faccia bersaglio contiene 10 o 11 anelli di diametro decrescente, annidati l'uno nell'altro. Dall'anello interno verso l'esterno, questi vengono conteggiati da 10 punti, a un punto (e nel caso di 11 anelli, esiste un anello più interno secondario che conta come "X", che segna come 10 ma viene utilizzato nei casi di rottura del pareggio come il valore più alto). Osservare:
Certo, mi riferisco al punteggio FITA Metric, come mostrato nella figura sopra. Se guardi da vicino, puoi osservare l'anello più interno, che è una linea tratteggiata sbiadita, il cui punteggio non è segnato. Questa è la "X" a cui mi riferivo, ma non dovrai prestare attenzione a questo a meno che non competi per il bonus.
Sfida
Crea una funzione (o un programma completo, se la lingua non supporta le funzioni), che riceve un'immagine perfettamente quadrata come input (o nome file immagine, se necessario), contenente un numero di verde (HEX # 00FF00, RGB (0, 255, 0)) punti di qualche dimensione e restituisce il punteggio. L'immagine può contenere dati diversi dai punti verdi , ma il verde avrà sempre la stessa identica tonalità.
Puoi immaginare che l'immagine quadrata rappresenti la faccia del bersaglio, con l'anello più esterno che tocca in 4 punti (in alto al centro, in basso al centro, al centro a destra, al centro a sinistra). La faccia di destinazione rappresentata sarà sempre della stessa proporzione, con tutti gli anelli che hanno una larghezza esattamente di 1/20 della larghezza dell'immagine di destinazione in ingresso. Ad esempio, data un'immagine di input di dimensioni di input 400px per 400px, puoi supporre che ogni anello abbia una larghezza interna di 20px, come illustrato di seguito:
chiarimenti
- Se si toccano due anelli separati, viene conteggiato il più alto dei due anelli
- Non è necessario tenere conto automaticamente dei mancati o del caso "x", a meno che non si provi il bonus
- Puoi presumere che nessun cerchio verde si sovrapponga
- Puoi anche supporre che nell'immagine non vi siano altri pixel di quella tonalità di verde
- L'immagine sarà in formato PNG, JPEG o PPM (a tua scelta)
- Sono consentite librerie esterne di elaborazione delle immagini, se create prima della pubblicazione di questa domanda
- Puoi presumere che tutti i cerchi verdi su un bersaglio avranno lo stesso diametro
- Se spari (hah) per il bonus dei cerchi sovrapposti, puoi presumere che almeno un cerchio nell'immagine non abbia un altro sovrapposto
- Le scappatoie standard non sono ammesse
Casi test
I seguenti due casi dovrebbero segnare 52 (o in caso di bonus, 52 con 1 'x' e 1 mancata):
E quest'ultimo test dovrebbe segnare 25 :
indennità
- -25 byte se si restituisce anche il numero di mancati (al di fuori di qualsiasi anello)
- -30 byte se si restituisce anche la quantità di X (supponiamo che la x più interna sia 3 / 100th della larghezza dell'immagine e 10 sia quindi 2 / 100th della larghezza dell'immagine. Le proporzioni 1-9 rimangono invariate)
- -35% conteggio byte se si tiene conto di cerchi sovrapposti
Questo è il codice golf, quindi vince il minimo byte. Divertiti!