Здравствуйте, Lazytech, Вы писали:
L>Простенькая задача: Merged String Checker | Codewars
L>[Мое решение на JavaScript]
Немного оффтопик, но ты говоришь, что это решение принялось как верное?
Тогда вот совет: если хочешь научится решать подобные околоалгоритмические задачи, то забей на этот сайт.
И в предыдущих темах со ссылками на codewars я видел откровенно слабые проверки, через которые легко проходят плохие решения. Может это, конечно, ты так специфически эти задачи выбираешь, но закономерность всё равно должна настораживать.
В чём тут проблема в твоём решение: оно имеет экспоненциальное время работы. То есть для входных строк длины N может работать за время Ω(2
N) (aka вечность).
| пример таких входных данных |
| s = ("a" * 2 * N) + "uv" # 2N символов "a" за которыми следует "uv"
part1 = ("a" * N) + "x"
part2 = ("a" * N) + "y"
При скромных N == 100 уже будет невозможно дождаться ответа |
| |
Но поинт не в том, что решение плохое (в конце концов, это можно и нетрудно исправить), а в том, что проверяющая система этого не обнаружила.
То есть система говорит что ты молодец, а на самом деле она так говорит потому что даже не потрудилась проверит решение
Из-за этого трудно учится: как можно понять куда двигаться, если нет нормальной обратной связи?
Поэтому для обучения лучше взять задачи, тесты и систему проверки, которые хотя бы как-то проверялись (да, при составлении тестов нужно их тоже проверять, что они обеспечивают адекватное покрытие), например с мероприятий
icpc и родственных.
Для начала можно выбрать любой сайт из
этого списка. Да, везде есть вероятность, что какое-то решение "обманет" систему проверки, которая пропустит какой-то хитрый частный случай, на котором решение на самом деле сбоит. Но прямо такой халтуры на этих системах проверки быть не должно.