Реши задачу и получи приглашение на собеседование в Google
UPD. Закончено, Sasha-Flyer победил.
Первый решивший задачу в посте и запостивший рабочее решение в комментарии получит инвайт в программу рекрутинга Google Foobar (что это?). Если там он покажет себя как перспективный разработчик — он может получить приглашение на собеседование в Google.
Вы — спецагент Министерства Тайных Наук. Вы находитесь в зале прямоугольной формы, пол, стены и потолок которой сделаны из абсолютного зеркального материала. Ваша цель, один из трибунов Зебрийского Легиона, прямо перед вами. Вы — спокойная и рассудительная понька. Чтобы сделать один точный и смертельный выстрел из своего лазерного пистолета, вам нужно знать все возможные способы, которыми луч может отразиться от стен, пола и потолка и поразить цель, не поджарив при этом вас.
Дано:
• Куб N на M на K.
• D — Максимальная дистанция полёта луча с учётом отражений.
• Y — Ваша позиция внутри куба.
• T — Позиция вашей цели внутри куба.
Условия:
• Куб в любом из измерений не может быть меньше 2 и больше 10000 юнитов.
• Размер куба и позиции стрелка и цели задаются целыми числами.
• Y или T не могут находиться на грани куба (т.е. как минимум в 1 юните от любой из стен).
• Y и T не могут находиться в одной точке.
• Луч не может пролететь сквозь Y или T.
• Количество отражений не ограничено.
• Угол падения равен углу отражения. В случае попадания в трёхгранный угол — луч отражается в обратном направлении. В двугранный — по двум осям соответствующим углу в обратном и по одной как обычно.
• Требуемая точность попадания в Y и T до 6 знака после запятой (0.000001).
• D находится в пределах [1, 10000].
• Требуемое время выполнения для N = M = K = 100 и D = 2500 — 30 секунд (без учёта старта виртуальной машины, если она нужна).
• Память не ограничена.
Найти:
• Количество уникальных путей, которыми луч может вылететь из Y и поразить T. Включая путь напрямую.
Решение принимается на любом из этих языков: C, C++, C#, Java, Kotlin, JS, TS, Python, Go, Rust, Swift, а так же на GLSL и HLSL (мало ли).
На задачу отводится неделя — если за это время она не будет решена, будет пост с объяснением и следующей задачей.
Good luck, have fun.
Первый решивший задачу в посте и запостивший рабочее решение в комментарии получит инвайт в программу рекрутинга Google Foobar (что это?). Если там он покажет себя как перспективный разработчик — он может получить приглашение на собеседование в Google.
Вы — спецагент Министерства Тайных Наук. Вы находитесь в зале прямоугольной формы, пол, стены и потолок которой сделаны из абсолютного зеркального материала. Ваша цель, один из трибунов Зебрийского Легиона, прямо перед вами. Вы — спокойная и рассудительная понька. Чтобы сделать один точный и смертельный выстрел из своего лазерного пистолета, вам нужно знать все возможные способы, которыми луч может отразиться от стен, пола и потолка и поразить цель, не поджарив при этом вас.
Дано:
• Куб N на M на K.
• D — Максимальная дистанция полёта луча с учётом отражений.
• Y — Ваша позиция внутри куба.
• T — Позиция вашей цели внутри куба.
Условия:
• Куб в любом из измерений не может быть меньше 2 и больше 10000 юнитов.
• Размер куба и позиции стрелка и цели задаются целыми числами.
• Y или T не могут находиться на грани куба (т.е. как минимум в 1 юните от любой из стен).
• Y и T не могут находиться в одной точке.
• Луч не может пролететь сквозь Y или T.
• Количество отражений не ограничено.
• Угол падения равен углу отражения. В случае попадания в трёхгранный угол — луч отражается в обратном направлении. В двугранный — по двум осям соответствующим углу в обратном и по одной как обычно.
• Требуемая точность попадания в Y и T до 6 знака после запятой (0.000001).
• D находится в пределах [1, 10000].
• Требуемое время выполнения для N = M = K = 100 и D = 2500 — 30 секунд (без учёта старта виртуальной машины, если она нужна).
• Память не ограничена.
Найти:
• Количество уникальных путей, которыми луч может вылететь из Y и поразить T. Включая путь напрямую.
Решение принимается на любом из этих языков: C, C++, C#, Java, Kotlin, JS, TS, Python, Go, Rust, Swift, а так же на GLSL и HLSL (мало ли).
На задачу отводится неделя — если за это время она не будет решена, будет пост с объяснением и следующей задачей.
Good luck, have fun.
472 комментария
Нет, они могут находится в любой валидной точке внутри куба.
А по прямой из Y в T не считается?
Ой да ну нафиг с погрешностями флоатов связываться
Да на самом деле достаточно использовать fp64 — точности хватит.
Правильно понимаю, что решения с отражениями от пола и потолка отбрасывать?
Вот думаю… Писать на C, которого последний раз касался лет 10 назад, или на Python, который только собираюсь учить. В любом случае, будет страшное. =] А остального я не знаю >_<
Что это значит? Ввод и вывод весь целый.
Это точность, при которой засчитывается попадание в Y или T.
Если луч проходит в менее чем или в 1e-9 от точки — значит, это попадание.
D ограничил.
Вероятно, имеется в виду, что размер математической точки цели и стрелка в физическом пересчете — не менее 9 знаков после запятой. То есть, при расчете координат нет смысла брать десять знаков, достаточно девяти. Это вроде бы float в терминах C.
Тонкая шутка, не сразу заметил.
А чего это Гугл лазерами интересуется? Никак старина Трамп снова Звездные войны решил запилить?
Сам решаешь на ходу и осознаёшь что за фигню задал?)))
Начало координат в одном из углов параллелепипеда?
А сам Табун уже несколько лет не может себе программистов найтиА разве все профессиональные разработчики выше уже не отказались от работы над Табуном?2) В таком пространстве маршруты луча длины не больше D задаются шаром радиуса D с центром в Y. Искомые маршруты — те внутри этого шара, которые заканчиваются в отражении точки T, лежащей в начальном кубе, относительно стенок решёток. И ещё там нужно отфильтровать, чтобы не проходило через более близкие отражения точек Y и T. Координаты отражений точек Y и T внутри каждого отражения куба довольно просто подсчитать.
3) Начнём обходить кубы в порядке их «глубины» по отражениям — сначала начальный куб (глубины 0), потом его соседей (глубины 1), потом их соседей (глубины 2) и т.д. Более точно, будем поддерживать FIFO-очередь кубов, в которую изначально запихнём начальный куб, а потом будем вынимать очередной куб из очереди, и если он пересекает шар из пункта 2) [или для простоты проверки не сам шар — а куб с параллельными стенками, в который вписан шар — это увеличит количество обойденных кубов в какую-то константу раз], то запихнём в очередь всех его соседей большей глубины. Таким образом, мы обойдём все кубы, пересекающие данный шар, и почти не будем смотреть на кубы вне шара (поиск будет затухать на границе).
4) При доставании очередного куба из очереди мы рассчитываем координаты отражений точек Y и T в нём, и делаем с ними следующее. Проверяем, а) что расстояние до отражения T не превосходит D, и б) по некоторой структуре данных, описанной ниже, что луч в T не проходит через уже посещённые ранее отражения (не близок к лучам, уже лежащим в структуре данных). Если оба условия выполняются, инкрементируем ответ. Затем обновляем структуру данных, добавляя туда лучи в оба отражения Y и T.
5) В качестве структуры данных можно взять ассоциативный массив, основанный на сбалансированном дереве. (std::map в C++) Значениями будут тройки чисел — координаты пересечения направления луча с единичной сферой. Ключи нужно подобрать такие, чтобы можно было быстро найти «очень близкую» тройку. Как вариант — сгенерировать три рандомных вещественных числа (a, b, c) в самом начале, и для тройки (x, y, z) ключ будет (ax+by+cz). Тогда чтобы проверить, был ли уже очень похожий луч, нужно просто найти lower_bound в сбалансированном дереве и посмотреть на близкие элементы справа и слева (там уже сверять и значения троек).
Кода не будет, потому что влом :)
Без кода я бы уже два часа назад скинул)
Чтобы учесть отражения много раз, можно отразить относительно стенок не только исходный куб, но и его отражения, и их отражения и т.д. до бесконечности. В итоге получится решётка кубов, а каждому отрезку из точки Y в этой решётке будет соответствовать некоторый кусок луча, отражённый произвольное число раз — то число раз, что отрезок пересекает стенки решётки.
> отрезок пересекает стенки решётки
а, блин, пересечения в физическом смысле
Я так понимаю, эти два значения — набор из трех координат?
ИдеяПервое что пришло в голову почти сразу после прочтения — отзеркалить куб по всем направлениям во все стороны столько раз, пока между центральным и отзеркаленными во все стороны кубами не будет расстояние, превышающее D — и дальше уже не надо будет никаких геометрических вычислений. Нунжо будет просто понять, как хитро посчитать, в каких отзеркаленных кубах ты сможешь впервые добраться до отзеркаленной в ней точки, не пересекая при этом исходную отзеркаленную точку, а в каких — такое условие будет недостижимо.
Остается 29.9 секунд, чтобы всё брутфорсом пересчитать)
На данный момент программа работает несколько минут. (и пока нет обработки исключений, если ты введешь координаты вне границ). У меня уже есть идеи, как уменьшить время работы.
Это значение можно уменьшать, увеличивая этот массив:
И равномерно с этим увеличивая точность функции sort.
Спойлер
И даже так, зная чем сегодня стал Гугл, принципиальные люди пойдут туда в последнюю очередь.
Поправил
Я бы тупо перенаправил тебя на сторону полки с книгой «Живи, вкалывай, сдохни». Но я сам только скачал и собираюсь начать, там более глубоко все разобрано.
Моё референсное решение, которое я написал за час и особо не тестировал: gist.github.com/Shimmermare/2ce043acbb22e840bda59bedfad0b334 Скорее всего, там что-то не учтено, но это на самом деле не важно, ибо как выше написали — главное подход.
На будущее советую победителю писать более читаемый код. В следующем челленже его ждёт 9 задач уровня от «отсортировать массив» до «заставит PhD in CS задуматься». 6 из них нужно решить, чтобы получить шанс пройти дальше. На каждую из задач будет отведено от двух до 10 дней. Решения проверяет автоматика, а оценивает человек. Если решения будут интересными, то в течение 1-6 месяцев с ним свяжется рекрутёр. Если дело дойдёт до собеседования — понадобится разговорный английский.
Интересный опыт, может быть повторю ещё раз.
Повод-то действительно есть. Он взял и сделал, а я нет.
Я не хочу в Гугл, я завален работой, а последние два дня вообще готовлю экспедицию и по уши в спальниках с консервами.
Но факт остаётся фактом. Молодец.
Ну может он исправился и пошёл на путь истинный, чё ты пессимист такой
Идея для стартапа: юзерскрипт, автоматический цитирующий комменты KerHarrad'а в ответах, специально для Флаера
Читая посты на Хабре, я могу с уверенностью сказать, что на работу туда не брали людей, у которых знаний и опыта работы намного больше чем у меня. Так что остается надеятся на смекалку и идеи, а не на опыт.
А может быть это хитрый план и Shimmermare твинк Сани… Ой вэй!..
Да, сорри. Учту это в будущем.
А вообще, всё таки что этот пост делает на Табуне? Это же наверно не какой-то фиг с горы, а кто-то размыто, но связанный с гуглом пришёл на Табун и ищет тут способных людей. Не верится в это…
Думаю человек знает о чем пишет.
Его инвайт оказался вполне действительным. Почему именно на табуне? Могу лишь предположить, что это броняша, который хочет, чтобы на его работе появились еще броняши.
В 2020 году искать себе на работу по принципу «Он смотрит тот же сериал, что и я? Беру его!», это даже не смешно…
@
СИДИШЬ, ПРОСМАТРИВАЕШЬ БАЗУ ДАННЫХ СОТРУДНИКОВ
@
S A S H A — F L Y E R
@
КОМНАТА ОЗАРЯЕТСЯ КРАСНЫМ СВЕТОМ МИНУСОВ
@
В УШАХ ЗВУЧИТ НЕСТЕРПИМОЕ НЫТЬЕ
@
ТВОИ ГЛАЗА ПЛАЧУТ КРОВЬЮ
@
ТАБУНАРИЙ
Да, абсолютно. Из московского офиса разработчиков уже давно эвакуировали, там только sales. И даже туда нужен разговорный английский.
Просто решил помутить воду, почему нет? Это же не приглашение на интервью, а обычный инвайт в foobar. Его только каждый 10 проходит и не со всеми прошедшими связываются.
Стоило сделать хотя бы ради гневной тирады Орхи о том как он не любит алгоритмические задачки.
Ого… А он нужен только на техническом уровне? То есть, типа если я способен прочитать документацию и объяснить её на английском, то этого достаточно?
Можешь посоветовать как легко и быстро подтянуть английский до минимально нужного уровня? Конечно шансы что мне позвонят малы, но если это все-таки случится — будет эпик феил, если я ни слова не смогу выдавить. А если не свяжутся, этот скилл в любом случае не помешает в будущем.
Расскажи о своих приключениях, когда ты смог от армии отбиться. :3
«Furri...» — Smiritel'no proiznos odin iz moikh broni-znakomykh. I tut moyo serdtse upalo v pyatki. Chtoby otvlech'sya, vklyuchili ponyal, 1-2 seriyu 5-go sezona, pochti srazu pribezhali oni… «O, poni!». Vneshne, na pervyy vzglyad, oni vyglyadyat dovol'no normal'no, khotya u odnoy osobi zhenskogo pola, bez preuvelicheniy, ya na sheye razglyadel kozhanyy osheynik… Poshumeli oni u nas, prolyapali vsyakuyu labudu, chto oni tipa volki, i ushli dal'she v svoy otdel'nyy zal veselit'sya. Chestno govorya, lyudi eti ne nastol'ko uzhasnyye, no mne prosto nepriyatno bylo ryadom s nimi nakhodit'sya, nu ne moyo eto. I vso by nichego, yesli by cherez 2 chasa nashey veseloy vstrechi so znakomymi, posle igry v neskol'ko nastolok, odin iz moikh bronyash skazal:«Tam, eti, v mafiyu igrat' sobirayutsya, pognali s nimi!» I tut ya okonchatel'no vpal v depressiyu, kotoraya ne otpuskayet menya do sikh por. Posledniye chasy skhodki ya prosidel v pryamom smysle odin v zale, v kotoryy my prishli pervonachal'no kompaniyey. Blago u menya byl planshet i internet s ponyashnymi seriyami, kotoryye ya i smotrel v odinochestve, chtoby uzh okonchatel'no ne rasplakat'sya, takiye vot dela.
Развернуть
1352/5000
This happened in one anti-cafe, and the sight, to be honest, was not the most pleasant. I planned to spend time with friends in this anti-cafe, we went there, sat down in a separate small room, at first everything seemed to be normal, and suddenly, out of nowhere, I hear a howl…
“Furry ...” one of my armor acquaintances said stubbornly. And then my heart sank. To get distracted, they turned on I realized 1-2 series of the 5th season, almost immediately they ran in… «Oh, pony!» Outwardly, at first glance, they look pretty normal, although one female, without exaggeration, I saw a leather collar around my neck… They made a noise with us, dabbed every crap that they were like a wolf, and went on to their own room to have fun. Honestly, these people are not so terrible, but it was just unpleasant for me to be with them, well, it's not mine. And all would be fine, if after 2 hours of our fun meeting with friends, after playing several tables, one of my armor said: “There, these people are going to play the mafia, they drove with them!” And then I finally fell into depression, which still does not let me go. The last hours of the gathering I literally sat alone in the hall, to which we had originally arrived as a company. Fortunately, I had a tablet and the Internet with intelligible series, which I watched alone, so that I would not finally cry, these are the things.
насчет этого поста?
Вот в этом весь Фраер — ляпнуть что-то тупое и не в тему абсолютно…
Так и не дошло, что это значит.
Почему «зоо», причём тут звери?
И почему «шиза»?
Просвещайся. Это об общем понятии термина.
А применительно к интернету зоошиза — те кто вписываются на форуме за какого-то местного убогого, и начинают яростно защищать, не задумываясь, что может и не просто так он был в убогие определен.
Видишь баннер с Твайлайт справа?
1. Тыкни на него
2. Найди два удаленных комментария
3. Найди оба этих удаленных комментария в архиве andreymal'а
4. У обоих выбери исходную версию.
При условии кучи свободного времени — более детализированный и ранний вариант: весь тред и прилинкованный комментарий с содержимым конфы
Да и сечас продолжает бесполезно зафлуживать темы репликами не в тему
вот даже тут посмотри начиная отсюда
tabun.everypony.ru/blog/computers/195945.html#comment13266942
tabun.everypony.ru/blog/computers/195945.html#comment13267074
куча флудопостов подряд. Устроил тут чатег сам с собой, чтоб все видели какой он деловой, умный, решает тут сидит задачу весь из себя… Флудер и хайпоеб. На модерируемом ресурсе улетел бы в бан за флуд.
Так ресурс модерируется саморегуляцией, видимо всем пофигу на этот спам (не считая хейтеров, но они минусили Флаера ибо он Флаер)
А вообше, давайте и мне минусов отсыпите? Не одному же Флаеру все лавры забирать.
ну вот как после такого идиотизма к нему относиться? Он очевидной шутки не понимает, пишет херню.
С сожалением =(
Одним словом ты сейчас описываешь его, мистресс нигму и никса. Однако до них были и другие. Например, в 2015-17 меня активно хейтил Айдем — минусил каждый коммент и пост, еще Стардиск тогда тоже был активен в этом плане. И еще была крайне агрессивная личность, которая всем твердила, что меня вообще ни на какие сходки/турниры нельзя брать. Еще была одна личность, ник которой начинался на Дрой, а заканчивался на Дека, который даже грозился физической расправой. Ну и где все они? Вместо них пришли другие. Я уже привык к такому аутрейджу.
Во-воторых не все комментарии табуна говно, а только твои. Опять обобщаешь пытаясь перевести стрелки.
Издержки системы. Чтобы минусы оказали эффект, нужно минусить все. Иначе всего один пост с рандомными картинками из интернета уводит в плюс.
Примерно так и выживают долбоёбы например на Пикабу… не смотря на то, что там есть модерация и иногда жёсткая.
Продолжайте вон защищать вашего клопа… опять обсирает чужие проекты.
Поставьте себе юзерскрипт для игнора Флайера и всё, что за детский сад?
Нам лень, им — нет, так пусть борются.
Они своими минусами как раз таки заставляют меня тут остаться. Может быть я уже дано ушел если бы не эти минусы)) А с ними я 120% тут останусь до самой смерти.
Ты не только моральный мазохист, но и физический еще чтоль? ))
Когда-то я был нормальным человеком, но потом ко мне подошел малолетний пиздюк, и въебал в колено… ))))
Но я не хочу тыкать пальцем в подозреваемого, т.к. в целом уважаю этого человека. Но не из-за его отношения к Флаеру.
Да и у меня не было цели выставить кого-то виновным. Я просто люблю такие вот мелкодетективные проблески. На Табуне не заскучаешь, поэтому и захожу на него каждый день, хоть и пишу редко. И волей-неволей подмечаю действующих лиц.
А Флаер… Флаер — не подарок. С такими, как он, было бы трудно ужиться. Есть у меня такие знакомые. Поэтому я не могу обвинять тех, кто его хочет выгнать.
Но я на сто процентов уверен, что жизнь у самого Флаера далеко не сахар. Поэтому я его тоже не могу обвинять в его поведении. Оно, я бы сказал, вполне ожидаемо.
Что с ним делать — имхо, сводится к вопросу гуманизма.
И я не про прон на внешке, а про регулярный спавн.
А тот факт, что они все состоят в единичном закрытом блоге, админ которого и начал меня первым хейтить, и что у них есть много кармы, но при этом ни одного поста на внешке? Я про тех самых, у кого 2019 год регистрации
Ну так это не повод вести себя так.
У нас все жизнь не сахар, у каждого по-своему. У кого-то физически, у кого-то финансово, у кого-то психологически, а у кого и всё сразу.
Не не не, пока мы разъеденены, они побеждают.
Таки соглашусь, твинков-то могло быть не 3, а 10, и они могли сливать не тебя, а нормальных людей.
А пока что наслаждайся минусами, пока их не прикрыли (если ты таки пожалуешься)
А вообще, твинководские пидары, подайте мне горяченьких минусов!
Меня одного рандом не послушает. Нужно мнение нескльких независимых юзеров.
Видишь ли Саня — как аукнется, так и откликнется…
А в целом, прежде чем кого-то спрашивать «зачем» подумай что это могут и у тебя спросить.
Зачем ты писал херню про BOINC и сегодня про новую дерпибуру?
за меня уже всё доказали
Может конечно действительно тайно майнят, но об этом ни ты ни я знать точно не можем.
Сравнил BOINС и МММ…
И кто-то ж еще защищает этого аутиста.
Всего лишь озвучивают то, что свежее
Как там SecondFly поживает?А почему три? Вроде как два же. Два твинка мол и один основной
В общем, кто бы сомневался в этом-то случае…
почти наверняка нетМы не знаем до конца, кем он себя идентифицирует!
Некоторые комменты с трёх аккаунтов просто близнецы братья не то что стилистически, даже оформлением. Беспалевность 80-го уровня.
Таки ролевые твинки не для того чтоб притворяться — вне ролевой — кем-то другим (и тем более не для умножения своего голоса).
А плюсики-минусики разве что такого как я сольют.
Знаешь, есть хорошая жизненная мудрость: Если тебе кажется, что каждый человек говно, то попробуй принюхаться — может это от тебя воняет?
Как показывает жизненная практика, чем сильнее человек говорит о том, что все вокруг плохие, тем вероятнее он сам оказывается мудаком.
А вообще, с Вами всё понятно, а чего от Флаера хотят остальные хейтеры?
Про более чем двух-трехтысячники в принципе можно забыть.
Словом, ничего особенного, просто как обычно люди бросаются в крайности.
Вот так я сегодня трапезничаю.
Если фотка вотпрямщаз, то приятного аппетита
Да и для банхаммера целью мелковатой буду, разве что докопаться и пораздувать.
… чертова прорва твинкоты и ботов, созданных когда-то для срачевойн, но давно забытых своими создателями и продолжающих в тупую минусить друг друга и клепать пустопосты для поправки никому уже не нужной кармы.
так загнулся Скайнет. :)))
О горячий суп наварили
О великий суп наварили
Смешно, но раньше мне не удавалось в горах суп изготовить — выходил нечестивый гибрид рагу и каши.
А секрет оказался прост — на горелке обеспечивается быстрый нагрев и готовность блюда ДО разварки компонент, а вот кашу легко и на рогатине костра сделать.
Что-то вроде, но это даже вечно голодные туристы есть отказывались.
Очень сложно качественно мыть компоненты, когда каждый литр воды несешь на себе. Грязь в пену уходит.
В этот раз, даже ручей не помог — судя по карте, он протекал по городской свалке и группа решила, что не будет в нём ничего мыть, включая посуду и морду.
Да и шесть литров на рыло хватило на всё, включая умывание морды. А остальное и в море нормально моется.
Вид на Агой-Небуг-Ольгинку, северо-запад
ЕМНИП, живой организм к ним абсолютно устойчив, они только в мертвой плоти размножаются. Но не микробиолог, рвать рубашку не стану.
Худо бывает, если выше по течению что-то сдохло, трупные яды куда опасней. Но кипячение это решает.
А так-то конечно, родники намного лучше, чем ручьи, особенно неизвестные.
Потому воду и не пил. Вообще, в прибрежных городках на удивление много сказочно умно устроенных свалок, таким образом, что протекающий через них водосток уходит в море — и даже с учетом направлений прибрежных течений, несет если не в этот, так в соседний город.
А вот лезть в море в бухте Геленджика я бы стал лишь под угрозой расстрела из говномета — да и то подумал бы, ведь разница по субстанции что в бухте, что в говномете — невелика.
Священное число НурглаВпрочем, не знаю, может и правда починенноетоже на 7…
Чувак, процесс гниения — это один из основных процессов, результат которого при употреблении приводит к сильной интоксикации.
Так что я бы на твоём месте реально не называла гнилостные бактерии обычными. И то, что живой организм к ним устойчив — ты где такой бред вычитал? Думаешь, что гнилые продукты утилизируют только из-за непривлекательного вида? Они — рассадник десятков бактерий, грибков и прочего. В среде желудка, даже учитывая его кислотную среду, они неплохо размножаются. И это не говоря о том, что они могут осесть в пищеводе и размножаться в кишечнике, где вообще збс для них.
И да же термическая обработка не всегда помогает избавиться от риска
Я искренне поражена, что есть те, кто пренебрежительно относится к опасности вот этого вот
Степень опасности я оценить точно не могу, потому всегда полагаю, что если не родник — то лучше не жрать в себя, а если ручей — то лучше кипятить.
… Хотя на работающее решение на GLSL я бы с большим любопытсвом поглядел и особенно на то как система тестов корректирует временные лимиты для такого случая )
GLSL/HLSL для хохмы добавил, но если бы кто-то решил на шейдерах — я бы захотел поговорить лично. Так сказать посмотреть своими глазами на
сверхчеловека.