… A Meksyk za to zapłaci!

26

Donald Trump jest pod wrażeniem pracy ludzi na tej stronie. Zobaczył, jak niesamowitą pracę wykonałeś pomagając Benowi Carsonowi , więc nawet zatrudnił cię do budowy jego ściany . Myśli, że jesteś wspaniały. Teraz znów potrzebuje twojej pomocy. Choć udało mu się zbudować swój mur, teraz potrzebuje za to meksykańskiego rządu. Chce pobierać milion dolarów za milę i powiedział im, że granica USA-Meksyku ma długość 1989 mil . Jednak nie są do końca pewni, czy ta liczba jest dokładna, dlatego chcieliby również wizualną reprezentację w skali. Właśnie tam wchodzisz. Musisz wziąć tę mapę: wprowadź opis zdjęcia tutaj

i dla każdego n (50 <= n <= 500) mil na granicy narysuj linię o długości 25 pikseli, prostopadłą do nachylenia granicy w tym punkcie. Używając skali po prawej stronie mapy, ustaliłem, że 100 mil ~ 50 pikseli . Narysowałem próbkę pierwszych 3 linii dla n = 60, ale są one tylko przybliżone:

wprowadź opis zdjęcia tutaj

Uwagi:

  • Jedynym wejściem jest n . Wyjściem powinien być obraz mapy z dodanymi liniami, narysowany na ekranie lub zapisany w pliku obrazu rastrowego (można zastąpić oryginalny plik mapy).
  • Możesz zapisać pusty plik mapy z dowolną nazwą pliku. Jest to JPEG, ale możesz go przekonwertować na inny popularny format rastrowy. Można także zmniejszyć rozmiar obrazu nawet o 50%, o ile wymiary są proporcjonalne, a linie nadal są skalowane.
  • Każda linia powinna być prostopadła do nachylenia granicy w tym punkcie. Nachylenie należy obliczyć rozpoczynając 50 mil przed punktem i kończąc 50 mil po punkcie.

Precyzja:

  • Nachylenie każdej linii może mieć margines błędu ± 5 °
  • Odstępy między liniami mogą mieć margines błędu ± 20 mil (10 pikseli na zwykłej mapie).
geokavel
źródło
3
Cena 10000 USD za milę jest prawdopodobnie 100 razy niższa, chyba że przez „ścianę” masz na myśli 3 pasma drutu kolczastego zainstalowanego przez robotników za 2,50 USD za godzinę.
Glenn Randers-Pehrson,
1
Ponadto Mma stwierdza, że ​​granica USA-Meksyk ma około 1952 mil długości.
LegionMammal978,
18
Dobrze wiedzieć, ale ważne jest, aby żadna z tych liczb nic nie znaczyła dla tego wyzwania.
geokavel,
@geokavel Śmiało i odpowiedz.
programmer5000
1
Ponadto, celem tego wyzwania jest możliwość przetworzenia obrazu i identyfikacji granicy przed narysowaniem linii, czy też dopuszczalne jest po prostu narysowanie linii bez faktycznego przetwarzania obrazu (zasadniczo zakładając, jak będzie wyglądał obraz )?
notjagan

Odpowiedzi:

7

Python 2 + numpy + OpenCV , 576 bajtów

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)

Ten program jest prawie całkowicie pozbawiony golfa, a niektóre jego aspekty są w tej chwili nieco niedokładne, ale przynajmniej w większości działa. Dodatkowo jest trochę twardego kodowania, ale dotyczy to tylko przybliżonego okna otaczającego ramkę i współrzędną pierwszego piksela na ramce (tego ostatniego najprawdopodobniej usunę później).

Obraz używany przez program jest zmniejszony o połowę w obszarze (tj. 1120 x 865), a zatem długość narysowanych linii i odległość między liniami są mniejsze.

notjagan
źródło
2
fajne!! świetnie widzieć odpowiedź!
geokavel
sugeruje usunięcie niedziałającego linku tio
Евгений Новиков
1
demo gif i.stack.imgur.com/RWQu4.gif . Zastosuj moją zmianę
Евгений Новиков
@ ЕвгенийНовиков Dzięki za gif! Jest o wiele bardziej ilustracyjny (i pomocny) niż zdjęcia, które miałem wcześniej.
notjagan