... E il Messico lo pagherà!


26

Donald Trump è molto colpito dal lavoro delle persone su questo sito. Ha visto l'incredibile lavoro che hai svolto aiutando Ben Carson , quindi ti ha persino assunto per costruire il suo muro . Pensa che tu sia eccezionale. Ora ha di nuovo bisogno del tuo aiuto. Mentre ha costruito con successo il suo muro, ora ha bisogno che il governo messicano lo paghi. Vuole pagare $ 1 milione al miglio e ha detto loro che il confine tra Stati Uniti e Messico è lungo 1,989 miglia . Tuttavia, non sono sicuri che questo numero sia accurato, quindi vorrebbero anche una rappresentazione visiva in scala. Ecco dove entri. Devi prendere questa mappa: inserisci qui la descrizione dell'immagine

e per ogni n (50 <= n <= 500) miglia sul bordo traccia una linea di 25 pixel, perpendicolare alla pendenza del bordo in quel punto. Usando la scala sul lato destro della mappa, ho determinato che 100 miglia ~ 50 pixel . Ho disegnato un campione delle prime 3 righe per n = 60, ma queste sono solo approssimative:

inserisci qui la descrizione dell'immagine

Gli appunti:

  • L'unico input è n . L'output dovrebbe essere l'immagine della mappa, con le linee aggiunte, disegnate sullo schermo o salvate in un file di immagine raster (è possibile sovrascrivere il file della mappa originale).
  • È possibile salvare il file della mappa vuoto con il nome file desiderato. È un JPEG, ma è possibile convertirlo in un altro formato raster comune, se si preferisce. Inoltre, puoi ridurre le dimensioni dell'immagine fino al 50%, purché le dimensioni siano proporzionali e le linee rimangano in scala.
  • Ogni linea dovrebbe essere perpendicolare alla pendenza del bordo in quel punto. La pendenza deve essere calcolata iniziando 50 miglia prima del punto e finendo 50 miglia dopo il punto.

Precisione:

  • La pendenza di ciascuna linea può avere un margine di errore di ± 5 °
  • La spaziatura tra ciascuna linea può avere un margine di errore di ± 20 miglia (10 pixel sulla mappa normale).

3
Il prezzo di $ 10000 / miglio è probabilmente sceso di un fattore 100, a meno che per "muro" si intendono 3 fili di filo spinato installati dai lavoratori che fanno $ 2,50 / ora.
Glenn Randers-Pehrson,

1
Inoltre, Mma afferma che il confine tra Stati Uniti e Messico è lungo circa 1952 miglia.
LegionMammal978,

18
Buono a sapersi, ma l'importante è che nessuno di questi numeri significhi nulla per questa sfida.
geokavel,

@geokavel Vai avanti e rispondi.
programmatore

1
Inoltre, l'intenzione di questa sfida è quella di essere in grado di elaborare l'immagine e identificare il bordo prima di tracciare le linee, oppure è accettabile poter disegnare solo le linee senza effettivamente elaborare l'immagine (presupponendo essenzialmente come sarà l'immagine )?
Notjagan,

Risposte:


7

Python 2 + numpy + OpenCV , 576 byte

Demo GIF

from cv2 import*
from numpy import*
n=input()/4
f="m.png"
i=imread(f)
b=array([0]*3)
y=array([165,195,225])
j=inRange(i,b,b+120)
k=inRange(i,y,y+25)
for x,y in zip(*where(j)):j[x,y]=k[x+3,y]-j[x+1,y]>1
j=j[506:732,152:557]
p=[array([11,9])]
for c in sorted(zip(*where(j)),key=lambda c:c[1]):r=range(p[-1][1]+1,c[1]+1);p+=map(array,zip(map(int,interp(r,*zip(p[-1],c)[::-1])),r))
for x,c in enumerate(p[25:-25:n]):s=-1/true_divide(*p[x*n+50]-p[x*n+25]);k=6/(1+s**2)**.5;line(i,*map(tuple,[(c+[int(k*s)+506,int(k)+152])[::-1],(c-[int(k*s)-506,int(k)-152])[::-1],b]))
imwrite(f,i)

Questo programma è quasi interamente non golfato, e ci sono aspetti che al momento sono in qualche modo inaccurati, ma almeno funziona per la maggior parte. Inoltre, c'è un po 'di hardcoding, ma è solo per una finestra approssimativa che racchiude il bordo e la coordinata del primo pixel sul bordo (quest'ultimo che probabilmente rimuoverò in seguito).

L'immagine utilizzata dal programma viene dimezzata nell'area (cioè 1120 x 865), quindi la lunghezza delle linee disegnate e la distanza tra le linee è minore.


2
freddo!! bello vedere una risposta!
geokavel,

suggerire di eliminare tio link non funzionante
Евгений Новиков

1
gif demo i.stack.imgur.com/RWQu4.gif . Applica la mia modifica
Евгений Новиков

@ ЕвгенийНовиков Grazie per la gif! È molto più illustrativo (e succint) delle immagini che avevo prima.
Notjagan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.