SberFight — я так и не прошёл в финал
Сегодня как следует отоспался и решил всё же взяться за перепрохождение задач из SberFight. Когда зашёл на сайт, обнаружил, что уже вывалился из ТОП-250, и несколько расстроился. Но решил, что сейчас перепройду несколько задач, и всё же вернусь. Взялся за задачу №3. Оказалось, что бонусные баллы за её решение дают только если решить за 20 минут.
Писать в этот раз решил не на PHP, а на Python — на нём код значительно короче и набирается быстрее. Но увы, и это не помогло. Хотя набросал решение очень быстро, оно не проходило два теста. Стал думать, в чём дело. Довольно скоро нашёл условие, при котором оно действительно не работало (когда во входных данных большая часть элементов имела примерно одинаковые значения и одно-два сильно отличающихся в большую или меньшую сторону). И тут меня переклинило от стресса, что время идёт, а я не знаю, что делать. И только когда прошло минут тридцать, и я решил «всё, теперь уже ничего не поделаешь», вдруг пришло озарение, как надо решать. Причём решение было ну совсем примитивное, просто нужно было решать задачу итерациями, а не пытаться найти формулу, которая позволила бы посчитать сразу, чем я всё это время пытался заниматься.
В общем, прихожу к выводу, что конкурс, где всё ТАК зависит от времени — это не дело для slow liferа: стресса много, толку мало. (Кстати, первый раз я показал более хорошие результаты именно потому что не знал про ограниченность времени, думал, что там по числу попыток запуска кода результат будет считаться.) Потом ещё глянул в рейтинговую таблицу, у первого игрока в рейтинге — целых 4400 очков. То есть 3600 получено именно бонусами за время, и только 800 — за сами решения. Интересно, кстати, там хоть предусмотрели защиту от накрутки? А то имея две SIM-карты, можно делать так: сохранять решения, сделанные под одним аккаунтом, потом регистрироваться ещё раз с другой SIMки, и выкладывать их, переименовав пару переменных, и только за счёт этого быть в ТОПе.
Писать в этот раз решил не на PHP, а на Python — на нём код значительно короче и набирается быстрее. Но увы, и это не помогло. Хотя набросал решение очень быстро, оно не проходило два теста. Стал думать, в чём дело. Довольно скоро нашёл условие, при котором оно действительно не работало (когда во входных данных большая часть элементов имела примерно одинаковые значения и одно-два сильно отличающихся в большую или меньшую сторону). И тут меня переклинило от стресса, что время идёт, а я не знаю, что делать. И только когда прошло минут тридцать, и я решил «всё, теперь уже ничего не поделаешь», вдруг пришло озарение, как надо решать. Причём решение было ну совсем примитивное, просто нужно было решать задачу итерациями, а не пытаться найти формулу, которая позволила бы посчитать сразу, чем я всё это время пытался заниматься.
В общем, прихожу к выводу, что конкурс, где всё ТАК зависит от времени — это не дело для slow liferа: стресса много, толку мало. (Кстати, первый раз я показал более хорошие результаты именно потому что не знал про ограниченность времени, думал, что там по числу попыток запуска кода результат будет считаться.) Потом ещё глянул в рейтинговую таблицу, у первого игрока в рейтинге — целых 4400 очков. То есть 3600 получено именно бонусами за время, и только 800 — за сами решения. Интересно, кстати, там хоть предусмотрели защиту от накрутки? А то имея две SIM-карты, можно делать так: сохранять решения, сделанные под одним аккаунтом, потом регистрироваться ещё раз с другой SIMки, и выкладывать их, переименовав пару переменных, и только за счёт этого быть в ТОПе.
Вы играете в игру, где ваш персонаж прыгает по заборчикам. Значения в массиве означают, сколько заборчиков персонаж обязан перешагнуть, двигаясь вперед, начиная с этого индекса. Например, в массиве 2, 1, 0 с нулевого индекса нужно прыгнуть на второй индекс, с первого - на второй, с третьего - остаться на месте. Вы можете менять элементы в массиве местами.
Чтобы выиграть, персонажу нужно с нулевого индекса дойти до последнего. Выведите true, если победить в игре возможно, в противном случае - false.
function getResult(fences) { var result = false; var len = fences.length; var res = 0; fences.forEach((element) => { if ( element >= 0 ) { res += element; } }) if ( res >= len-1 && len > 0 ) { result = true; } return result; }