Я очень случайный игрок в код и не часто вижу сообщения, пока они не появятся на боковой панели «Горячие сетевые вопросы» в StackOverflow. Обычно я опаздываю к игре, и поскольку единственный язык, который я знаю, это Python, я не вижу смысла отвечать, поскольку уже есть несколько ответов Python. Ваша задача - выяснить, стоит ли мне отвечать на вопрос.
Входные данные:
- Ваш код (функция или программа) будет принимать один входной параметр
i
Выход:
- Значение True или Falsey для идентификатора вопроса
i
. Выведите Truthy, если у вопроса более 5 ответов, более 3 баллов и один или менее ответов в Python (без различия между версиями).
Правила / Разъяснение:
- Формат ввода может быть любым разумным (стандартный, файл, командная строка), но должен быть указан в вашем ответе. Типы данных и начальные / конечные пробелы не имеют значения.
- Предположим, что идентификатор вопроса действителен для
codegolf.stackexchange.com
. - Игнорировать требования к конкретному языку. (т. е. если вопрос встречает голоса и ответы и не имеет ответов Python, потому что это только Java, это все равно приводит к Истине).
- Ответ квалифицируется как ответ Python, если «python» (без учета регистра) встречается где-либо до первой новой строки поста.
- Это код гольф, поэтому выигрывает самый короткий код в байтах.
Примеры случаев *
id = 79082 => True
id = 78591 => False (less than 5 answers, also hella hard)
id = 78410 => True
id = 76428 => False (greater than 1 Python answer)
id = 78298 => False (not high enough question score)
* Проверено на момент публикации, возможно, изменилось
code-golf
internet
classification
wnnmaw
источник
источник
Ответы:
05AB1E ,
167160159158156154143 байтаБлин, почти как обычный язык ...Дерьмо ...
дольшебьет ответ Ruby на 1 байт.Теперь дольше, чем ответ Руби, аааа! ,Я, наверное, должен идти спать прямо сейчас.
Спасибо @wnnmaw за сохранение 1 байта и спасибо @R. Кап за сохранение еще 2 байта!
Код:
Или с большей читабельностью:
Объяснение:
Прежде всего, здесь сжимается много текста, что переводится в старый добрый Python. Несжатая версия:
Эта часть:
фактически выводит значение стека, копирует его в URL и извлекает все данные HTML. Данные HTML помещаются поверх стека с помощью
#.append(f.read())
.Подсчитаем количество ответов , посчитаем количество вхождений
class="answer"
.Чтобы подсчитать количество голосов, мы просто разделяем данные на «полезные и понятные» и сохраняем только цифры
[0:99]
использования®"useful and clear"¡`99£þ
. Это количество голосов.В конце концов, нам нужно проверять каждый ответ, если текст
"Python"
существует до заключительного текста заголовка. Чтобы получить ответы на все вопросы, мы просто разделили данныеclass="post-text"
и снова разделили каждый из них<
. Мы удаляем первые два элемента, чтобы получить часть, в которой отображается язык, и проверяем, находится ли строчная версия в этой строке.Итак, теперь наш стек выглядит так для id =
79273
:Это также можно увидеть при
-d
включенном флаге ebug в интерпретаторе.Итак, это просто вопрос обработки данных:
Использует кодировку CP-1252 . Вы можете скачать переводчик здесь .
источник
;)
ppcg.lol/q/id
сжатия?Python 3.5,
280272260242240 байт:( Спасибо Аднану за трюк с использованием
*
оператора в сравнениях, в результате чего 2 сохраненных байта! )Достаточно просто. Использует встроенную
urllib
библиотеку Python для перехода на сайт вопроса, а затем использует регулярные выражения, чтобы найти количество голосов, количество ответов и количество конкретных ответов Python в декодированном тексте, возвращаемом с веб-сайта. Наконец, эти значения сравниваются с условиями, необходимыми для возвратаtruthy
значения, и, если они удовлетворяют всем условиям, тоTrue
возвращается. В противном случаеFalse
есть.Единственное, что меня может беспокоить здесь, это то, что регулярные выражения дают много общего с точки зрения количества конкретных ответов Python для сохранения байтов, так что иногда это может быть немного неточным, хотя, вероятно, этого достаточно для цели этого вызова. Однако, если вы хотите гораздо более точный, я добавил один ниже, хотя он длиннее, чем выше. Показанный ниже размер в настоящее время составляет 298 байт, поскольку он использует гораздо более длинное регулярное выражение - которое вы не могли знать, сколько времени я потратил на его обнаружение - для подсчета ответов Python, чем моя первоначальная функция для точности. Это должно сработать примерно для 80-90% всех тестовых случаев.
Но как насчет этих вопросов с несколькими страницами ответов? Ни один из вышеперечисленных не будет работать очень хорошо в этой ситуации, если, скажем, 1 ответ Python находится на первой странице, а другой на второй. Что ж, я взял на себя смелость решить эту проблему, создав другую версию моей функции (показанной ниже), которая проверяет каждую страницу ответов, если существует несколько, на наличие ответов Python, и это хорошо сработало во многих тестовых примерах. бросил на это. Ну, без дальнейших церемоний, вот новая и обновленная функция:
Довольно долго, не правда ли? На самом деле я не собирался много заниматься код-гольфом, хотя, если хочешь, я могу немного поиграть в гольф. В противном случае я люблю это, и не может быть счастливее. О, я чуть не забыл, как дополнительный бонус, он также выводит общее количество ответов Python на вопрос, общее количество голосов на вопрос и общее количество ответов на вопрос, если вопрос
id
соответствует вопросу с более чем 1 страницей ответов. В противном случае, если вопрос состоит только из одной страницы ответов, он просто выводитtruthy/falsy
значение. Я действительно немного увлекся этим вызовом.Каждый из них принимает вопрос
id
в виде строки .Я бы поставил
Try It Online!
ссылку здесь для каждой функции, но , к сожалению, ни ,repl.it
ниIdeone
разрешить извлечение ресурсов с помощью языка Pythonurllib
библиотеки.источник
http://codegolf.stackexchange.com/q/
чтобы получить вопрос. Такжеhttp://
обязательно?unknown url type
ошибку.ppcg.lol/q/id
тоже работаетЮлия, 275 байт
Это функция, которая принимает целое число и возвращает логическое значение. Он подключается к API Stack Exchange, и при каждом запуске функции выполняется 2 запроса API, поэтому не запускайте его слишком много раз, иначе вы исчерпаете квоту в 300 запросов в день.
Ungolfed:
источник
ppcg.lol
краткой ссылки на все, что касается Codegolf, версии API просто не хватилоРакетка, 339 байт
До сих пор в гольфе многое есть.
источник
Ruby + HTTParty ,
170146145142139138 + 11 (-rhttparty
флаг) =181157156153150149 байтЯ не думаю, что есть какие-то крайние случаи, которые могли бы привести к поломке моих шаблонов регулярных выражений, я надеюсь ...
Обновлен по короткой ссылке, предоставленной @WashingtonGuedes и обнаружил, что HTTParty не жалуется, если я начну с
//
вместоhttp://
.Обновлено для немного более безопасных регулярных выражений. В любом случае я сохранил байты, обнаружив, что объекты ответа HTTParty наследуются от String, что означает, что мне даже не нужно использовать их
.body
при сопоставлении с регулярным выражением!@manatwork указал на случайное добавление персонажа, которое я оставил, и ради гольфа,
i
теперь должно быть принято как Строка.Обновлены регулярные выражения.
Одинаковой длины-1 байт, вырезая парен.Дополнительные примечания:
"post-text"
, с которым мы соответствовалиst.*xt"
. Более безопасная версия добавила бы пробел после этого, но мы жертвуем этим ради гольфа.net/http
модулей из-за правильной обработки перенаправления для данного URL."up*?\d
была самая короткая последовательность, которую я нашел, которая соответствовала количеству голосов. Нам нужен только первый, так что, к счастью, ответы не влияют на это.источник
ppcg.lol/q/#{i}
тоже работаетppcg.ga/q#{i}
может быть? (Я не знаю Руби)ppcg.lol/q#{i}
что применимо я думаю? (такa/#b
же, какa#b
)"
Губит/"e-c.*?(\d+)/
регулярное выражение. Кстати, требование скажет о входе , что «типы данных (...) не имеет значения.» Так что лучше передать параметр как я строка, так что вы можете заменить замену с конкатенацией:"//ppcg.lol/q/"+i
.Groovy,
179161157Благодаря Timtech 17 символов сохранены.
Ключевое слово def также не обязательно.
источник