Введение
Этот сайт быстро создает огромный набор фрагментов кода, поэтому давайте с этим что-нибудь сделаем!
Вот файл данных . Он содержит 9 066 уникальных пар «язык + фрагмент» для 113 языков, взятых с этого сайта. Формат разделен табуляцией (language-TAB-snippet), все новые строки в фрагментах заменены на <LF>
, а все вкладки заменены на 4 пробела. Для каждого языка есть как минимум 5 фрагментов.
[обновление: я внес небольшое изменение в файл данных, чтобы объединить некоторые версии Python и RegExp, которые я пропустил раньше - ссылка выше была обновлена]
Вызов
Напишите программу или функцию, которая берет фрагмент кода и выводит язык, на котором написано (подробности см. Ниже). Общий размер вашего источника + любые данные, которые вам требуются, должны составлять 300 байт или меньше, и ваша программа должна выводить правильный язык, когда ей предоставляется собственный исходный код. Высочайшая точность (наиболее правильные ответы в наборе данных выше) побеждает.
правила
- Общий размер вашего исходного кода, ресурсов и любых необходимых флагов компиляции / времени выполнения не должен превышать 300 байт.
- Ваш ответ будет проверен на соответствие указанному выше набору данных; ему будет дано одно из значений «фрагмента» в качестве входных данных, и его выходные данные будут сравниваться с «правильными» выходными данными в соответствии с набором данных. Это будет повторяться для всех записей в наборе данных, и последним числом правильных ответов будет ваш счет.
- Вы можете выбрать входную кодировку - я предполагаю UTF-8, поэтому, если вам нужна другая кодировка, укажите ее в своем ответе.
- Вам не нужно использовать
<LF>
замену для новых строк; если ваша запись ожидает получения новых строк в виде буквальных новых строк (символ 10), укажите это в своем ответе. - Ваша запись должна выводить язык, на котором она думает, что входной фрагмент написан. Чтобы избежать необходимости сжимать множество языковых строк, я разрешу сопоставления (если вы хотите вывести 3 для «Java», это нормально); просто отметьте соответствия в своем ответе.
- Вы можете иметь только 1 выходное отображение для каждого языка (то есть, если 3 означает «Java», вы также не можете иметь 4, означающее «Java»).
- Когда у вас есть собственный исходный код, ваша программа должна дать правильный ответ (вывести язык, на котором она написана).
- Вам не нужно поддерживать все языки в наборе данных, и вы можете поддерживать дополнительные языки, если хотите (например, если ваша запись не на одном из языков в наборе данных).
- Ваша программа должна быть детерминированной (при условии, что один и тот же ввод дважды должен давать один и тот же вывод).
Ничьи
- Связи будут решаться путем уменьшения набора данных до тех пор, пока не победит одна запись. Набор данных будет сокращен путем удаления всех фрагментов для самого популярного языка (т. Е. Связи на более редких языках прерываются). Например, если A и B набрали 70% для полного набора данных, все фрагменты Python будут удалены. Если A и B теперь набрали 60%, CJam будет удален. Если теперь А набирает 50%, а В набирает 55%, победителем становится В.
- Если достигается 100% -ная точность, связи будут решаться с использованием второго (слепого) набора данных, содержащего больше образцов для тех же языков.
Пример 1
Скрипт Python:
print("python")
Этот скрипт успешно создает «python», когда ему присваивается собственный исходный код, поэтому он действителен. В наборе данных он набрал 1008/9066 = 11,1%
Пример 2
Функция JavaScript:
function f(s){return /function/.test(s)?1:2}
С отображениями 1 → javascript, 2 → python. Опять же, он успешно производит 1 («javascript») для своего собственного источника, и в наборе данных он набирает 1092/9066 = 12,0%
Откуда поступили данные?
Я создал запрос SEDE, чтобы извлечь примеры из задач [code-golf] на этом сайте. Из полученных 10 000 ответов я использовал взломанный скрипт Python, чтобы найти код и название языка для каждого, а затем отфильтровал любой язык с менее чем 5 примерами. Данные не на 100% чистые (я знаю, что есть некоторые фрагменты без кода), но они должны быть достаточно хорошими.
Вдохновленный этим вызовом в начале года: кто это сказал? Президентские выборы 2016
Также частично связано с тем , что язык?