Вступ
Цей сайт швидко збирає величезний набір фрагментів коду, тому давайте щось зробимо з ним!
Ось файл даних . Він містить 9 066 унікальних мов + фрагменти пар для 113 мов, усі взяті з цього сайту. Формат розділений на вкладки (мова-TAB-фрагмент), всі нові рядки у фрагментах замінені на <LF>
, а всі вкладки замінені на 4 пробіли. Є щонайменше 5 фрагментів для кожної мови.
[оновлення: я змінив файл даних, щоб об'єднати деякі версії Python & RegExp, які я пропустив раніше - посилання вище було оновлено]
Виклик
Напишіть програму або функцію, яка бере фрагмент коду та виводить мову, на якій вона написана (детальніше див. Нижче). Загальний розмір вашого джерела + будь-які потрібні вам дані повинен бути 300 байт або менше, і ваша програма повинна виводити правильну мову, надаючи свій власний вихідний код. Виграє найвища точність (найправильніші відповіді на наборі даних вище).
Правила
- Загальний розмір вашого вихідного коду, ресурсів та будь-яких потрібних прапорів компіляції / виконання не повинен перевищувати 300 байт.
- Ваша відповідь буде перевірена на наборі даних вище; йому буде надано одне із значень "Snippet" як вхідне, а його вихід буде порівнюватися з "правильним" висновком відповідно до набору даних. Це повториться для всіх записів у наборі даних, а остаточна кількість правильних відповідей - ваш результат.
- Ви можете вибрати вхідне кодування - я припускаю UTF-8, тому, якщо вам потрібно інше кодування, вкажіть його у своїй відповіді.
- Вам не потрібно використовувати
<LF>
заміну для нових рядків; якщо ваш запис очікує отримання нових рядків у прямому сенсі (графік 10), вкажіть це у своїй відповіді. - У вашому записі має бути виведена мова, на яку він вважає написаний фрагмент вводу. Щоб уникнути необхідності стискати багато мовних рядків, я дозволю відображення (Якщо ви хочете вивести 3 для "Java", це добре); просто відзначте відображення у своїй відповіді.
- Ви можете мати лише 1 вихідне відображення для кожної мови (тобто, якщо 3 означає "Java", ви також не можете мати 4 значення "Java").
- Якщо вам надано власний вихідний код, ваша програма повинна створити правильну відповідь (повинна виводити мову, на якій вона написана).
- Вам не потрібно підтримувати всі мови в наборі даних, і ви можете підтримувати додаткові мови, якщо ви хочете (наприклад, якщо ваш запис не є однією з мов набору даних).
- Ваша програма повинна бути детермінованою (якщо один і той же вхід двічі повинен давати однаковий результат).
Розв'язування
- Зв'язки будуть вирішені шляхом зменшення набору даних, поки не виграє один запис. Набір даних буде зменшено, видаливши всі фрагменти для найпопулярнішої мови (тобто зв'язки порушені точністю на більш рідкісних мовах). Наприклад, якщо A і B набрати 70% на повний набір даних, всі фрагменти Python будуть видалені. Якщо A і B зараз набрали 60%, CJam буде видалений. Якщо А зараз набирає 50%, а B - 55%, B - переможець.
- Якщо досягається 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] на цьому сайті. З отриманих 10000 відповідей я використав сценарій зламаного python для пошуку коду та назви мови для кожного, а потім відфільтрував будь-яку мову з менш ніж 5 прикладами. Дані не на 100% чисті (я знаю, що деякі фрагменти, що не кодуються), але вони мають бути досить хорошими.
Натхненний цим викликом з початку року: Хто це сказав? 2016 президентські вибори
Також частково пов’язане з Що таке мова?