Advent of Code 2022
Jan. 16th, 2024 02:20 pmЯ уже давно, ещё после бессонной ночи у
catpad (ничего личного, просто jetlag) хотел побаловаться с python. До какого-то начального уровня прокачал (достаточно, чтобы детям помогать с домашним заданием из школы — они там тоже python учат), но двигаться дальше уже сложно, нужны какие-то конкретные примеры, вместе с мотивацией ими заниматься. После поста
avva записал себе идею пройти Advent of Code, а тут как раз удачно порвал связки на лыжах, и у меня оказались под рукой насколько свободных дней, компьютер и интернет. Запустил python (Spyder — когда-то давно поставил себе Anaconda, что-то там надо было разобрать с матрицами, не пригодилось, но и не снёс), открыл первый попавшийся справочник по python, открыл ChatGPT (avva не рекомендовал, но мне эта часть как раз показалась самой интересной) — и понеслась!
Чтобы иметь возможность «соревноваться» с упомянутым в посте Питером Норвигом (я не знаю, кто это, Википедию только что прочитал), занялся прошлогодним календарём. Задачки все, в принципе, не сложные, если ты когда-то занимался около-олимпиадным программированием. У меня к ChatGPT были в основном вопросы о структурах данных — примерно описываешь, что ты хочешь сделать, и спрашиваешь, как называется соответствующий тип данных, а потом читаешь документацию о том, как на самом деле работают все эти tuple / set / list / dictionnary. Решил задачу — смотришь на решение Норвига, понимаешь, насколько проще можно было написать, запоминаешь идеи впрок, в следующих задачах пытаешься их использовать.
Разобрался попутно с GitHub. В прошлый раз, когда я на питоне пытался сделать Splendor (а точнее даже платформу для произвольных настольных игр, что-то вроде Tabletopia — была у меня мечта устроить соревнование разных самообучающихся алгоритмов, чтобы находить какие-то новые стратегии в игрушках, но это быстро переросло объём времени, который я согласен выделять на хобби) я уже сделал себе репозиторий, в этот раз разобрался и с клиентом.
Попытался разобраться с jupyter, но что-то пошло не так. Если у кого-то из друзей найдётся время, чтобы провести меня за руку по всему процессу от начала до первого hello world, буду признателен. Хотя, наверное, это как раз самое то, что нужно спрашивать у ChatGPT.
Задачи очень хорошо сделаны. Во-первых, всегда есть какое-то бредовое введение. Танцующие слоны, летающие обезьяны, не работающий передатчик, который ты должен срочно починить. Во-вторых, каждая задача из нескольких частей. Сначала простой пример, на котором тебе объясняют правила. Я сначала про себя ругался: кому они так разжёвывают условия? Пока не наткнулся на задачу (№ 23), в которой я сам не понял условия, и только перечитав 5 раз пример, понял, что я неправильно интерпретировал одно слово в задании. Короче, не надо бояться казаться слишком подробным.
Так вот, на этом примере ты пишешь свой код, отлаживаешь его, убеждаешься в работоспособности, а потом только включаешь данные настоящей задачи. У меня всегда настоящая задача сразу же работала правильно. Один раз (задача № 7) система выдала, что я неправ. Я потерял несколько часов, написав сначала другое решение (ответ тот же). Потом сделав Excel-файл, в котором решил эту же задачу чуть ли не ручками — всё равно ответ тот же. После чего система приняла его — а я понял, что никогда не надо вбивать правильный ответ руками, всегда нужно копировать. Видимо, в первый раз я просто опечатался — а сайт просто говорит, что ты ошибся, не показывая твой вариант ответа (хозяйке на заметку: это очень плохой дизайн).
Так вот, а после этого тебе выдают вторую часть той же задачи. После которого ты обычно говоришь себе, что да, данные можно было бы организовать и по-другому. И то, что годилось для первой части, займёт несколько дней расчёта для второй, если только всё не переписать заново. И ты переписываешь всё заново. Офигенное упражнение — пытаться сразу видеть будущие осложнения в задаче!
( Read more... )
Чтобы иметь возможность «соревноваться» с упомянутым в посте Питером Норвигом (я не знаю, кто это, Википедию только что прочитал), занялся прошлогодним календарём. Задачки все, в принципе, не сложные, если ты когда-то занимался около-олимпиадным программированием. У меня к ChatGPT были в основном вопросы о структурах данных — примерно описываешь, что ты хочешь сделать, и спрашиваешь, как называется соответствующий тип данных, а потом читаешь документацию о том, как на самом деле работают все эти tuple / set / list / dictionnary. Решил задачу — смотришь на решение Норвига, понимаешь, насколько проще можно было написать, запоминаешь идеи впрок, в следующих задачах пытаешься их использовать.
Разобрался попутно с GitHub. В прошлый раз, когда я на питоне пытался сделать Splendor (а точнее даже платформу для произвольных настольных игр, что-то вроде Tabletopia — была у меня мечта устроить соревнование разных самообучающихся алгоритмов, чтобы находить какие-то новые стратегии в игрушках, но это быстро переросло объём времени, который я согласен выделять на хобби) я уже сделал себе репозиторий, в этот раз разобрался и с клиентом.
Попытался разобраться с jupyter, но что-то пошло не так. Если у кого-то из друзей найдётся время, чтобы провести меня за руку по всему процессу от начала до первого hello world, буду признателен. Хотя, наверное, это как раз самое то, что нужно спрашивать у ChatGPT.
Задачи очень хорошо сделаны. Во-первых, всегда есть какое-то бредовое введение. Танцующие слоны, летающие обезьяны, не работающий передатчик, который ты должен срочно починить. Во-вторых, каждая задача из нескольких частей. Сначала простой пример, на котором тебе объясняют правила. Я сначала про себя ругался: кому они так разжёвывают условия? Пока не наткнулся на задачу (№ 23), в которой я сам не понял условия, и только перечитав 5 раз пример, понял, что я неправильно интерпретировал одно слово в задании. Короче, не надо бояться казаться слишком подробным.
Так вот, на этом примере ты пишешь свой код, отлаживаешь его, убеждаешься в работоспособности, а потом только включаешь данные настоящей задачи. У меня всегда настоящая задача сразу же работала правильно. Один раз (задача № 7) система выдала, что я неправ. Я потерял несколько часов, написав сначала другое решение (ответ тот же). Потом сделав Excel-файл, в котором решил эту же задачу чуть ли не ручками — всё равно ответ тот же. После чего система приняла его — а я понял, что никогда не надо вбивать правильный ответ руками, всегда нужно копировать. Видимо, в первый раз я просто опечатался — а сайт просто говорит, что ты ошибся, не показывая твой вариант ответа (хозяйке на заметку: это очень плохой дизайн).
Так вот, а после этого тебе выдают вторую часть той же задачи. После которого ты обычно говоришь себе, что да, данные можно было бы организовать и по-другому. И то, что годилось для первой части, займёт несколько дней расчёта для второй, если только всё не переписать заново. И ты переписываешь всё заново. Офигенное упражнение — пытаться сразу видеть будущие осложнения в задаче!
( Read more... )