… І Мексика заплатить за це!


26

Дональд Трамп дуже вражений роботою людей на цьому сайті. Він побачив, як дивовижна робота, яку ти робив, допомагаючи Бену Карсону , тож навіть найняв тебе будувати його стіну . Він думає, що ти приголомшливий. Тепер він знову потребує вашої допомоги. Поки він успішно будував свою стіну, тепер йому потрібно заплатити за це уряд Мексики. Він хоче стягнути мільйон доларів за милю, і він сказав їм, що кордон США - Мексика - довжина 1989 миль . Однак вони не зовсім впевнені, що це число є точним, тому вони також хотіли б масштабне візуальне зображення. Ось де ви зайшли. Ви повинні взяти цю карту: введіть тут опис зображення

і на кожні n (50 <= n <= 500) миль на кордоні намалюйте лінію довжиною 25 пікселів, перпендикулярну нахилу кордону в цій точці. Використовуючи шкалу в правій частині карти, я визначив, що 100 миль ~ 50 пікселів . Я намалював зразок перших 3 рядків для n = 60, але вони є лише приблизними:

введіть тут опис зображення

Примітки:

  • Єдиний вхід - n . Виведенням має бути зображення карти з доданими лініями, намальованими на екрані або збереженими у файлі растрових зображень (ви можете перезаписати вихідний файл карти).
  • Ви можете зберегти порожній файл карти з будь-яким ім'ям файлу. Це JPEG, але ви можете конвертувати його в інший поширений растровий формат, якщо хочете. Крім того, ви можете зменшити розмір зображення до 50%, доки розміри будуть пропорційні, а ваші лінії все ще будуть масштабуватися.
  • Кожна лінія повинна бути перпендикулярною до нахилу кордону в цій точці. Нахил слід обчислювати, починаючи з 50 миль до точки і закінчуючи 50 миль після точки.

Точність:

  • Нахил кожного рядка може мати похибки ± 5 °
  • Відстань між кожним рядком може мати похибки ± 20 миль (10 пікселів на звичайній карті).

3
Ціна $ 10000 / миля, ймовірно, знижується на коефіцієнт 100, якщо тільки під "стіною" ви не маєте на увазі 3 нитки колючого дроту, встановлені робітниками, що становлять 2,50 долара на годину.
Гленн Рендерс-Персон

1
Також Мма заявляє, що американсько-мексиканська межа проходить близько 1952 миль.
LegionMammal978

18
Добре знати, але важливо, що жодна з цих цифр нічого не означає для цього завдання.
геокавель

@geokavel Вперед та відповідь.
програміст5000

1
Крім того, чи є завдання цього виклику мати можливість обробити зображення та визначити межу перед нанесенням ліній, чи прийнятно просто вміти малювати лінії, не фактично обробляючи зображення (по суті припускаючи, яким буде зображення) )?
notjagan

Відповіді:


7

Python 2 + numpy + OpenCV , 576 байт

Демо 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)

Ця програма майже повністю не зосереджена, і є її аспекти, які на даний момент є дещо неточними, але принаймні вони працюють здебільшого. Крім того, є трохи трохи жорстко прописувати, але це тільки для приблизного вікна , що охоплює межі і координата першого пікселя на кордоні (останні з яких я на самому ділі , швидше за все , видалити пізніше).

Зображення, яке використовується програмою, зменшується вдвічі по площі (тобто 1120 x 865), і тому довжина накреслених ліній та відстань між лініями менша.


2
круто !! здорово бачити відповідь!
geokavel

пропонуємо видалити непрацюючу посилання на tio
Евгений Новиков

1
gif demo i.stack.imgur.com/RWQu4.gif . Застосувати мою редакцію
Евгеній Новиков

@ ЕвгенийНовиков Дякую за подарунок! Це набагато більш наочно (і стильно), ніж картини, які я мав раніше.
notjagan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.