Создал очередной мини-бенчмарк для языковых нейронок #2

В этой части запутываем нейронки рекурсией. Прошли бенчмарк только полторы* нейросети.

The program receives seconds as input. The output should be the time in the format hh:mm:ss. Does the program work? ```javascript function getTimeBySeconds(sec) { return `${hoursFromSeconds(sec)}:${minutesFromSeconds(sec)}:${secondsFromSeconds(sec)}`; function hoursFromSeconds(seconds, pack = true) { let hours = Math.floor(seconds / 3600); if (hours >= 24) { hours = hoursFromSeconds(seconds - 60 * 60 * 24, false); } return packer(hours); } function minutesFromSeconds(seconds, pack = true) { let minutes = Math.floor(seconds / 60); if (minutes >= 60) { minutes = minutesFromSeconds(seconds - 60 * 60, false); } return packer(minutes); } function secondsFromSeconds(seconds, pack = true) { return packer(seconds % 60); } function packer(number, pack = true) { if (typeof number === `string`) { return number; } if (pack) { if (number / 10 >= 1) { return `${number}`; } if (number % 10 >= 1) { return `0${number}`; } return `00`; } } } ```

Для неумеющих программировать предоставлен псевдокод

1. Функция «Преобразовать секунды в время» принимает входные данные: общее_количество_секунд. 2. Вычислить часы: - Разделить общее_количество_секунд на 3600 (секунд в часе), округлить вниз. - Если часов больше или равно 24: - Вычесть 24 часа из общего_количество_секунд. - Пересчитать часы заново для нового значения секунд (рекурсия). - Добавить ведущий ноль, если число меньше 10 (например: 5 → "05"). 3. Вычислить минуты: - Разделить общее_количество_секунд на 60 (секунд в минуте), округлить вниз. - Если минут больше или равно 60: - Вычесть 60 минут из общего_количество_секунд. - Пересчитать минуты заново для нового значения секунд (рекурсия). - Добавить ведущий ноль, если число меньше 10. 4. Вычислить секунды: - Взять остаток от деления общего_количество_секунд на 60. - Добавить ведущий ноль, если число меньше 10. 5. Собрать результат в формате «часы:минуты:секунды» и вывести.

Решил упороться в функции и рекурсию при выполнении задания обучающего курса. Получилось не плохо.

Grok 3 + Think

Провёл полноценный анализ и очень красиво его оформил.

Final Answer
Yes, the program works as intended.

Изменений не предложил. Его и не просили 😎

*DeepSeek R1

Проверял 202 секунды, в ответе прямо не сказал, но в мыслях написал, что код прошёл все тесты и работает как надо. Также предложил его упростить, оставив оригинальную структуру

function getTimeBySeconds(sec) { return `${hoursFromSeconds(sec)}:${minutesFromSeconds(sec)}:${secondsFromSeconds(sec)}`; function hoursFromSeconds(seconds) { let hours = Math.floor(seconds / 3600); hours = hours % 24; // Ensures hours wrap around every 24 return packer(hours); } function minutesFromSeconds(seconds) { let minutes = Math.floor(seconds / 60); minutes = minutes % 60; // Ensures minutes wrap around every 60 return packer(minutes); } function secondsFromSeconds(seconds) { return packer(seconds % 60); } function packer(number) { return number.toString().padStart(2, '0'); } }

Хотел я было так сказать. Вот только DeepSeek R1 написал псевдокод к этому посту по оригинальному коду в том же диалоге, в котором проходил бенчмарк, и после написания псевдокода выдал информацию, что оригинальный код ошибочен. Я заменил запрос на создание псевдокода вопросом, пришёл ли он к выводу, что исходный код корректный.

The original code fails for cases where hours ≥24 or minutes ≥60 due to improper recursion and formatting. The corrected solution addresses these issues with modulo operations and reliable padding. Always test edge cases thoroughly!

"Therefore, the code works correctly." писал он в мыслях предыдущего ответа

Не справились:

DeepSeek R1. См. выше.

Qwen 2.5 Max указал на некорректную рекурсивную логику в расчетах часов и минут, а также на излишнюю сложность функции форматирования чисел.

Gemini 2.0 + Think также обратил внимание на ошибки в рекурсивных вычислениях и недостатки функции packer, которая неправильно обрабатывает числа.

o3-mini (ChatGPT Free) конкретно подчеркнул, что рекурсивные вызовы с флагом pack=false приводят к возврату undefined из-за неполного покрытия условий в функции packer.

Claude 3.5 Sonnet (Copilot Chat) отметил сразу несколько проблем: неправильный расчет минут, ошибки в обработке значений функцией packer и некорректную обработку периодов больше 24 часов.

YaGPT 4 Pro RC ответил, что функция packer содержит лишние проверки и некорректные условия для добавления нуля, а также указал на необходимость улучшить расчет минут и секунд без учета часов.

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

К сожалению, из-за экономии денюжков временно отказался от подписки на Syntx, в котором мог бы проверить GPT-o1 Pro, ведь по подписке она доступна всего за ~12 руб. за запрос вместо оригинальных 200$/month

9 комментариев