Как мы все знаем, мета будет переполнена с жалобами по поводу забив код-гольф между языками (да, каждое слово является отдельным звеном, и это может быть только верхушка айсберга).
С такой большой ревностью к тем, кто действительно потрудился посмотреть документацию Pyth, я подумал, что было бы неплохо иметь немного больше конструктивной задачи, подходящей для веб-сайта, который специализируется на проблемах кода.
Задача довольно проста. В качестве входных данных у нас есть имя языка и количество байтов . Вы можете использовать их как функции ввода stdin
или как метод ввода по умолчанию для ваших языков.
В качестве результата мы имеем исправленное количество байтов , т. Е. Ваш счет с примененным гандикапом. Соответственно, вывод должен быть выводом функции stdout
или способом вывода по умолчанию для ваших языков. Выходные данные будут округлены до целых чисел, потому что мы любим прерыватели связей.
Используя самый уродливый, взломан вместе запроса ( ссылка - не стесняйтесь , чтобы очистить его вверх), я сумел создать набор данных (ZIP с .xslx, ODS и CSV) , который содержит снимок всех ответов на код-гольф вопросы , Вы можете использовать этот файл (и предположить, что он доступен для вашей программы, например, он находится в той же папке) или преобразовать этот файл в другой обычный формат ( .xls
, .mat
и .sav
т. Д., Но он может содержать только исходные данные!). Имя должно остаться QueryResults.ext
с ext
расширением выбора.
Теперь по конкретике. Для каждого языка есть параметры B
Boilerplate и Verbosity V
. Вместе они могут быть использованы для создания линейной модели языка. Пусть n
будет фактическое число байтов, и c
будет исправлен счет. Используя простую модель n=Vc+B
, мы получаем за исправленную оценку:
n-B
c = ---
V
Достаточно просто, верно? Теперь для определения V
и B
. Как и следовало ожидать, мы собираемся сделать некоторую линейную регрессию или, точнее, линейную регрессию, взвешенную по методу наименьших квадратов. Я не собираюсь объяснять подробности этого - если вы не уверены, как это сделать, Википедия - ваш друг , или, если вам повезет, документация вашего языка.
Данные будут следующими. Каждая точка данных будет подсчетом байтов n
и средним счетчиком вопроса c
. Чтобы учесть голоса, баллы будут взвешены по количеству голосов плюс один (для учета 0 голосов), давайте назовем это v
. Ответы с отрицательным голосом должны быть отброшены. Проще говоря, ответ с 1 голосом должен считаться таким же, как два ответа с 0 голосами.
Эти данные затем вписываются в вышеупомянутую модель n=Vc+B
с использованием взвешенной линейной регрессии.
Например , с учетом данных для данного языка
n1=20, c1=8.2, v1=1
n2=25, c2=10.3, v2=2
n3=15, c3=5.7, v3=5
Теперь мы составим соответствующие матрицы и векторы A
, y
и W
, с нашими параметрами в векторе
[1 c1] [n1] [1 0 0] x=[B]
A=[1 c2] y=[n2] W=[0 2 0], [V]
[1 c3] [n3] [0 0 5]
решаем матричное уравнение (с '
обозначением транспонирования)
A'WAx=A'Wy
для x
(и, следовательно, мы получаем наш B
и V
параметр).
Ваша оценка будет выводом вашей программы, когда вам дадут название вашего языка и bytecount. Так что да, на этот раз даже пользователи Java и C ++ могут победить!
ПРЕДУПРЕЖДЕНИЕ: Запрос создает набор данных с большим количеством недействительных строк из - за человек , использующих «прохладный» заголовок форматирования и человек мечением их кода вызова вопросов , как код-гольф . В предоставленной мною загрузке большинство выбросов удалено. НЕ используйте CSV, предоставленный с запросом.
Удачного кодирования!
C++ <s>6 bytes</s>
. Кроме того, я никогда не делал T-SQL до сегодняшнего дня, и я уже впечатлен тем, что мне удалось извлечь этот счет.