спірітус маргіналіс – Telegram
спірітус маргіналіс
206 subscribers
9.93K photos
3.51K videos
43 files
4.14K links
створив @Pyroarsonist канал, а він йому як раз
канал з музикою - https://news.1rj.ru/str/joinchat/AAAAAE69RH3vkdDapMT3Lw
Download Telegram
#advent_of_code_2024

Day 10
https://adventofcode.com/2024/day/10
Part 1
Класична dfs задачка.
Парсимо матрицю. Знаходимо нулі, для них стартуєм dfs функцію: додаємо в робочий масив координати з метаданими координат початку і для кожних суміжних клітинок перевіряємо, чи можна туди "зайти", таким чином, додаємо нові дані в цей робочий масив. Коли можемо перейти в 9: записуємо дані в мапу.
Після проходження dfs, читаємо дані з мапи, знаходимо унікальні пари гешмапи 0-9 та видаємо це за відповідь.
Part 2
Як бачимо, дизайн першої частини підходить під другу. Замість того, щоб зберегати унікальні пари, тепер будемо накопичувати кількість таких пар: якщо з точки А в точку Б можна пройти 3 способами, то зберігаємо число 3, таким чином, сумуємо всі такі способи і отримуємо результат.

солюшн тут: https://github.com/Pyroarsonist/advent-of-code-2024
😁5
#advent_of_code_2024

Day 11
https://adventofcode.com/2024/day/11
Part 1
Дуже багато тексту, а насправді легка задачка.
Фактично, все що треба написати, так це функцію трансформації одного масиву каменів в інший.
Так і робимо: для кожного каменя в масиві пишемо іфи для перевірки на нуль, перевірки на парність кількості цифр в камені (приводимо його в строку) та останню операцію множення і проводимо таких ітерацій 25 штук (як сказано в задачі), отримуємо результат.
Part 2
Цікава друга частина, умова та ж сама, але кліпаємо очима тепер 75 раз, а не 25 і звичайно часу на обчислення було дуже багато, треба перероблювати наївний алгоритм.
Очевидно, що тут треба заюзати динамічне програмування і кешувати проміжні результати, але яким чином ітеруватися по камінням?
Дуже просто: будемо рахувати кількість каменів для кожного значення рекурсивно, враховуючи кількість кліпань.
Нехай у нас є масив каменів: для кожного з них сумуємо їх кількості каменів (але вже понижуючи кількість кліпань на 1): кожного разу, коли обчислили скільки у каменю є кількість каменів після трансформації, записуємо це в кеш разом з кількістю кліпань. Зрозуміло ж, що для каменя 0 з кліпанням 1 буде кількість каменів 1 (бо масив - [1]), але для такого ж самого каменю 0 з кліпанням 10 буде кількість каменів 39.
Оскільки для кожного каменю ми будемо брати кеш або рекурсивно дізнаватись кількість каменів у трансформованих: будемо мати високу швидкість, в мене вийшло десь 64мс, замість використання 1 частини, де процес проходить більше за 1 хвилину.

солюшн тут: https://github.com/Pyroarsonist/advent-of-code-2024
🔥1
Гострі Тузи
Message
За це я плачу за інтернет
1
😁2
👍6
Forwarded from Паштет 🇺🇦
🌚1