Бенчмарк · coding
LiveCodeBench
LiveCodeBench оценивает, насколько хорошо большие языковые модели решают задачи competitive programming, используя задания, которые непрерывно собираются с недавних соревнований, чтобы избежать загрязнения обучающими данными. Ключевая метрика — pass@1, доля задач, решённых правильно с первой попытки модели.
Подробнее
- Пример
- Типичный элемент — задача в стиле программистского соревнования: например, по массиву целых чисел написать функцию, возвращающую длину наибольшей строго возрастающей подпоследовательности, — которую модель должна решить, сгенерировав работающий код.
- Метрика
- Каждое сгенерированное решение запускается на тестах задачи; pass@1 — это доля задач, для которых первая отправка модели проходит все тесты.
- Приёмка
- Решение принимается автоматически, когда сгенерированный код проходит все скрытые и открытые тесты этой задачи — ни ручной оценки, ни точного совпадения текста не требуется.
- Почему важно
- Поскольку задачи берутся из соревнований, вышедших уже после окончания обучения модели, LiveCodeBench измеряет настоящее умение рассуждать и писать код, а не заученные ответы, что делает его надёжным и устойчивым к загрязнению показателем навыков программирования.
Разбор примера
Задача
Стиль спортивного программирования (stdin/stdout). Даны n целых чисел; посчитайте количество пар (i, j) с i < j, для которых nums[i] + nums[j] чётно. Ввод: в первой строке n, во второй — n целых чисел через пробел; выведите количество.
Решение
import sys
def main():
data = sys.stdin.read().split()
n = int(data[0])
nums = list(map(int, data[1:1 + n]))
odd = sum(x % 2 for x in nums)
even = n - odd
print(odd * (odd - 1) // 2 + even * (even - 1) // 2)
main()
Разбор
Сумма чётна тогда и только тогда, когда оба слагаемых одной чётности, поэтому ответ равен C(evens, 2) + C(odds, 2); подсчёт чётностей выполняется за O(n). LiveCodeBench запускает программу модели на скрытых юнит-тестах и оценивает её по pass@1 — засчитывается, только если проходят все тесты.