Как мы все знаем, мета будет переполнена с жалобами по поводу забив код-гольф между языками (да, каждое слово является отдельным звеном, и это может быть только верхушка айсберга).
С такой большой ревностью к тем, кто действительно потрудился посмотреть документацию 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 до сегодняшнего дня, и я уже впечатлен тем, что мне удалось извлечь этот счет.Ответы:
Mathematica, 244,719 (245 байт)
Прецедент
А как насчет других языков?
Альтернативная модель :
log(c)=log((n-B)/V)
Одна примечательная особенность Code Golf (и, возможно, других проблем кодирования) заключается в том, что распределение длин программ имеет тенденцию к экспоненциальному распределению (в отличие от равномерного распределения). Следовательно, модель с
log(n)=log(Vc+B)
большей вероятностью уравновешивает влияние между точками с большимиc
и маленькимиc
.Как мы видим на графиках ниже, распределение точек подходит для подгонки в логарифмическом масштабе.
Результаты новой модели
Мы нашли два исключительных языка - Ruby with
V=0.724
и Retina withV=1.322
, и критерий популярности языка игры в гольф - имеющий большой отрицательный шаблон.источник
csv
.Python3, 765,19 (765) байт
Вероятно, здесь есть место для игры в гольф. Требуется NumPy для матричных вещей. Читает из стандартного ввода, отформатированный следующим образом: [lang] [bytes / n]. Останавливается при отправке q.
Полученные результаты
Я мог сделать что-то не так в какой-то момент; Я получаю другие результаты, чем ответ Mathematica:
источник