Комментарии 19
Чтобы мыслить, как программист, сначала желательно научиться мыслить хотя бы чуть-чуть как математик.
Вот пример: сейчас на https://www.codingame.com идёт контест: https://www.codingame.com/contests/mean-max. Один из ключевых моментов: освоить законы движения объектов с учётом сопротивления среды (трение), в условиях дискретного движения (по шагам/тикам). Можно просчитывать некоторое дерево вариантов движения с различными векторами ускорения — но это вариант не очень, т.к. процессорное время сильно ограничено. А можно состаить математическую модель и вывести ряд математических формул, описывающих данное движение в различных вариантах: один юнит (дестроер) должен просто достигнуть некоторой точки (разрушить танкер тараном), другой юнит (лутер) должен достигнуть этой же точки, но с нулевой скоростью в конце пути — задачка посложнее, третий юнит должен просто нарезать круги на максимально возможной скорости (генерировать ресурс "ярости", нужный для абилок) избегая столкновений (диаграмма Вороного в помощь? хотя можно и наоборот: преграждать дорогу вражеским лутерам, просчитывая траекторию их движения, но это уже детали выбора стратегии)… Да, несколько лет назад mail.ru group проводил контест "Russian AI cup", связанный с гоночной тематикой — там данная тема тоже рулила...
Да, несколько лет назад mail.ru group проводил контест «Russian AI cup», связанный с гоночной тематикой — там данная тема тоже рулила...
Вот только тогда все кто был в топе пользовались перебором возможных стратегий, а не рассчётом одной оптимальной.
Чтобы мыслить, как программист, сначала желательно научиться мыслить хотя бы чуть-чуть как математик.
Вот и ответ на вопрос, почему программистам нужно ВУЗовское образование и математика в частности.
Я не программист, но мне до этого очень далеко, интересно к кому я тогда вообще отношусь;-)
Я, как программист, не стал бы пользоваться предложенным подходом. Крайне тяжёлый и багообразующий.
Полагаю, порядок ходов должен быть такой?
11111 — начальная позиция
10101 — перевезли козу туда
11101 — приехали обратно
10001 — перевезли волка туда
11011 — привезли козу обратно
10010 — увезли капусту
11010 — приехали обратно
10000 — увезли козу
При этом "допустимые позиции" — это
11000, 11101, 11010. Явно не хватает 11011 (когда коза, капуста и перевозчик на стартовом берегу, никто никого не съест) или 11110, по выбору.
На лицо баг в рассуждениях.
И ход рассуждений, и использования битов и даже примеры напоминают книгу к языку который был создан в МВТУ им. Баумана. Там в качестве задач рассматривались обработки очереди к парикмахеру, работа порта с танкерами и распиловка бревен. Фишка была в том, что этот язык был "заточен" под решения подобных задач. Книгу прочитал с удовольствием, а языком пользоваться не пришлось и названия не помню. Это было в конце 90-х.
Мне рассказали что за решение оптимизационной задачи по распиловки бревен немцы создателю выплачивали вознаграждение.
Может кто из выпускников Бауманки вспомнит об этом.
Я, конечно, извиняюсь, но если Вы читали комментарии к статье, на которую отвечаете, то не могли не заметить изящного решения Dr_Dash, а также скрипт vaniacer, которые делают именно то, для чего предназначены машины — автоматизируют решение задачи, снижая нагрузку на человека. Конечно, полезен любой опыт, но иногда лишь как пример "как не надо". Приведенное решение не экономит ни время, ни ресурсы, и притом даже не упрощает его поддержку/сопровождение по сравнению с указанными выше.
Если озвучить данную подсказку в самом начале то задача решается тупым перебором. Благо дело «летальных» исходов всего два: коза и капуста, коза и волк.
Чтобы научиться мыслить как программист, надо научиться мыслить как не программист