Не нужно учиться решать бредовые задачи!
Нужно учиться:
1. Понимать последовательность шагов/действий для получения ожидаемого результата реальной задачи.
2. Применять оптимизацию к найденному алгоритму, используя википедию и/или любые другие источники с открытыми алгоритмами, методами, способами.
3. К найденной оптимизации применить оптимальные функции из выбранного инструмента разработки (языка программирования).
(только здесь мы начинаем писать код!)
4. Оптимизировать производительность полученного кода (рефакторинг).