Как подходить к решению нетривиальных задач?

Всем привет!
Для практики в JS нашёл для себя довольно интересным ресурс Codewars. Довольно часто заходил туда и решал задачки по уровню профиля, сначала казалось что они все довольно простые и на решение задачи я тратил максимум минут 20... пока я не начал решать задачи ранка 3 kyu. Единственное что я могу решить из 3 kyu, не потратив при этом целый день, это задачи, которые чудом были так высоко оценены, например валидатор поля для игры в морской бой , все же остальное для меня хардкор, сначала я даже не представляю в каком направлении двигаться, часто первой в голову приходит далеко не самая лучшая (а не редко и неработающая) идея, и когда после сабмита решения я смотрю на решения других мне становиться стыдно за свой код...
Можете посоветовать литературу по теме, или лучше просто практиковаться дальше и со временем станет проще?
  • Вопрос задан
  • 3377 просмотров
Пригласить эксперта
Ответы на вопрос 3
Привет.

Всегда использую модель боли:

1) Смотришь задачу
2) Пытаешься её решить
3) Понимаешь, что ты тупой идиот, который ничего не может.
4) Поднимаешь в помощь гугл
5) Поднимаешь в помощь литературу
6) Спрашиваешь ребят на тему: "почему так, а не иначе".
7) Выполняешь задание, осознавая, что ты тупой, раз на решение этой задачи тебе пришлось потратить столько времени.

Повторить до бесконечности, и ты станешь профи.
Ответ написан
iCoderXXI
@iCoderXXI
React.JS/FrontEnd engineer
Сам там балуюсь по мере свободного времени, сил и желания, чисто для поразмять мозги, т.к. в олимпиадах я участвовал давно, последний раз аж в 1998 году. Пруф: https://www.codewars.com/users/iCoderXXI

У меня не всегда получается сразу понять чего хочет автор задачки, приходится перечитывать раз по десять-дцать, вникать, в принципе как и в реальных боевых задачах в жизни. Всегда стараюсь построить в голове работающую модель процесса, так сказать в динамике, входящие и исходящие сигналы (данные), логику, алгоритмы.

Решаю итеративно, добиваясь прохождения тестов. Часто бывают пограничные случаи, которые далеко не сразу становятся очевидны и часто поначалу в ту сторону не думаешь, тут что называется хоть бы завелось вообще, а не то чтобы полетело. потом решение допиливаешь итеративно под каждый не прошедший тест.

Часть задач встречаются, которые ранее никогда не решал. Если не понятно о чем речь, то гуглю суть задачи. стараюсь избегать смотреть в решения, если они где-то встречаются, для меня принципиально решить самостоятельно, пусть не так идеально и красиво.

Когда смотрю решения других бойцов, часто вижу переусложненные, выпендрежные решения. Если бы в моей команде боец стал писать такой код, то он бы однозначно уехал решать индивидуальные задачи, потому что такое читать и понимать весьма непросто. Сам стараюсь писать код компромиссный, с одной стороны достаточно эффективный, с другой стороны понятный даже новичку.

Вообще моё ядро, как программиста, формировалось в условиях жестких ограничений, чего стоит только ограничение по памяти в 64 кб на переменные у паскаля. Конечно я не долго терпел это издевательство, и достаточно быстро разобрался с указателями, кучей, структурами данных, так-что моим программам было доступно до мегабайта и более под данные, хотя конечно логика становилась весьма витиеватая.

Где-то даже сохранился код гипертекстового компилятора и просмотрщика, который я писал в 1997 году по заказу одного юриста. Сейчас оно никому не надо, т.к. есть всякие Консультант+, но по тем временам я считаю был весьма интересный продукт. Кому интересно вот ссылка на гитхаб https://github.com/iCoderXXI/hypertext
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы