Учитывая ввод строки, состоящей из любого сообщения из чата нашего сайта, взятого из списка, описанного и связанного ниже, выведите либо истинное, либо ложное значение, пытаясь предсказать, было ли это сообщение помечено звездочкой или нет, в 50 байтах или меньше.
Вы можете использовать любые достоверные или ложные значения , но они должны быть идентичны (т. Е. Должно быть только два возможных выхода: один достоверный и один ложный). Входные данные будут предоставлены в виде необработанного HTML-кода с удаленными символами новой строки, и он может содержать не-ASCII символы Unicode. Если вам требуется что-то, кроме UTF-8, укажите это в своем ответе.
Победившим представителем этого задания будет тот, который правильно прогнозирует наибольший процент сообщений чата из списка, указанного ниже. Если два заданных представления имеют одинаковую норму успеха, более короткое представление выиграет.
Пожалуйста, предоставьте инструкции для запуска вашего кода на всем наборе сообщений и правильного расчета процента. В идеале это должен быть небольшой пример кода (не считая ваших 50 байтов), который проходит через положительные тестовые примеры и выводит, сколько из них ваш код получил правильно, а затем делает то же самое для отрицательных тестовых случаев. (Общая оценка может быть рассчитана вручную с помощью (correctPositive + correctNegative) / totalMessages
.)
Чтобы ваш код был достаточно тестируемым, он должен завершиться за 5 минут или меньше для всего списка сообщений чата на разумном современном оборудовании.
Полный список сообщений чата можно найти здесь , и он состоит из 1000 последних помеченных сообщений в качестве достоверных тестовых случаев и 1000 последних не помеченных сообщений в качестве ложных тестовых случаев. Обратите внимание, что в сущности есть два файла; прокрутите примерно на полпути вниз, чтобы найти сообщения без звезд.
источник
O2
Don'?t star
\^
Ответы:
Сетчатка , 50 байт,
71,8%,72,15%Попробовал некоторые регулярные игры в гольф по предложению @ MartinBüttner. Это соответствует 704 помеченным сообщениям и не соответствует 739 помеченным сообщениям.
Это
^.*( ... )
делается для того, чтобы всегда было совпадение 0 или 1, так как Retina выводит количество совпадений по умолчанию. Вы можете оценить программу по входным файлам, предварительно перейдяm`
в многострочный режим, а затем запустиви аналогично для
unstarred.txt
.Анализ / объяснение
Я сгенерировал вышеупомянутые фрагменты (и многие другие), используя программу, затем выбрал те, которые я хотел вручную. Вот некоторая интуиция относительно того, почему вышеупомянутые фрагменты работают:
C
: МатчиPPCG
,@CᴏɴᴏʀO'Bʀɪᴇɴ
E
: Матчи@ETHproductions
,@El'endiaStarman
;
: Потому что тестовые случаи являются HTML, это соответствует<
и>
ಠ-ﭏ
: Соответствует диапазону символов Юникода, наиболее заметно дляಠ_ಠ
и@Doorknob冰
tar
: Соответствует вариациямstar
,@El'endiaStarman
(снова), а также тем,gravatar
что появляется в oneboxes, опубликованных новыми сообщениями ботовol
: Соответствуетrel="nofollow"
много ссылок и oneboxesl.x
: Матчи@AlexA.
,@trichoplax
eo
: В основном соответствуетpeople
, но также три случая для@Geobits
a.u
: В основном соответствуетgraduation
,status
,feature
иabuse
pin
: Совпаденияping
и слова, оканчивающиеся наping
. Также соответствует несколько постов в обсужденииpineapple
, как пример переоснащения.nu
: Соответствует смешанному пакету слов, наиболее распространенным из которых являетсяnumber
o.f
: Матчиgolf
,conf(irm|use)
"$
: Соответствует двойной кавычке в качестве последнего символа, например@phase He means "Jenga."
В
[
этом нет ничего особенного - у меня просто остался персонаж, поэтому я решил использовать его, чтобы соответствовать еще одному случаю.источник
JavaScript ES6, 50 байт, 71,10%
Правильно определяет 670 звезд и 752 звезд.
Теперь преодолеть 70% барьер и победить всех, кроме Retina!
Возвращает,
true
если сообщение содержит одну из следующих вещей:D
,E
,R
илиv
;tar
(обычноstar
);a
иu
с одним символом между ними;l
иx
с одним символом между ними (обычноalex
);eo
илиol
;C
, точка с запятой или аಠ
.Вот еще несколько плодотворных матчей, от которых, похоже, не стоит избавляться от других:
nf
nu
yp
n.m
Это все ближе и ближе к ответу Retina, но я нашел большинство улучшений самостоятельно.
Проверьте это в консоли одной из этих страниц: звездные тексты , тексты без звездочек
Вот альтернативная версия.
/a/.test
технически функция, но не удовлетворяет нашим критериям :Эта оценка составляет 71,90% (697 звезд, 741 без звезд).
Я провел несколько анализов в списках, чтобы увидеть, какие группы регулярных выражений соответствуют сообщениям с наибольшим количеством звездочек и с наименьшим количеством звездочек. Анализы можно найти в этом Гисте . До сих пор я проверял
aa
иa.a
совпадал.a.u
находится на отметке # 50 со счетом 28, но это самый эффективный вариант в своем формате ...источник
/regexp/.test()
? Я думаю, что с этим можно выжать еще несколько случаев.Pyth, 50 байтов, 67,9%
Это хэширует входные данные в одном из 322 сегментов и выбирает логическое значение в зависимости от этого сегмента.
счет
источник
CJam, 45 байтов, 65,55%
Это проверяет, находится ли первый символ в определенном списке или сумма всех кодовых точек больше чем 8 672.
счет
источник
fold
команде, а также фактический ответ.Matlab / Octave, 17 байт 60,15%
Правильно классифицирует 490 сообщений как помеченные, 713 сообщений как непрочитанные
Текущая версия:
Просто проверяю длину.
Старая версия:
Может быть переведен на любой другой язык. Он просто проверяет, содержит ли сообщение слова « звезда» или нет.
score: 59/911/52.5%
Результаты для тестовых случаев с использованием этого кода:
источник
CJam, 32 байта, общий балл 0,5605 (56%).
Корректно идентифицирует 428 помеченных сообщений и 693 помеченных сообщения. Общий балл
(360+730)/2000=0.545
.Не ожидая победы, я посмотрю, как это работает. Выше приведен код для отдельного сообщения, для многократного запуска используется измененная версия, которая возвращает количество помеченных сообщений:
Просто проверьте это с STDIN, являющимся необработанным текстом любого файла. Возвращает true, если сообщение содержит «звездочку» или if
length + 1 mod 4 = 0
.источник
JavaScript ES6, 0,615 = 61,5%
342 правильно определены как помеченные, 888 правильно определены как помеченные,
(342+888)/2000 = 0.615
Проверьте это на этом или этом :
Я все еще могу получить тебя, моя милая!
источник
Сетчатка, 46 байт, 68,55
679 звезд: 692 звезды
Перешли на Retina, чтобы получить еще несколько регулярных выражений ... Все еще не сделано.
источник
C # 6.0 (.NET Framework 4.6), 50 байт, 63,60%
Программа, которую я использовал для тестирования:
источник