Неотвеченные вопросы PPCG

9

У этого дорогого сайта StackExchange так много проблем и так много хороших ответов. Но как насчет проблем, которые никогда не были решены ?

задача

Напишите программу или функцию, которая будет печатать псевдослучайный открытый запрос без ответа (как, например, вопрос с ровно нулевым ответом) от PPCG. Все возможные проблемы должны создаваться с одинаковой вероятностью.

вход

  • Вход не будет принят.

Вывод

  • Должны быть только заголовок, теги и ссылка, которые должны быть разделены переводом строки.
    • Название должно быть точно таким же, как в вызове.
    • Теги не имеют строгого формата вывода, но должны включать все теги.
    • Ссылка может включать или не включать question-nameпосле идентификатора вопроса и должна привести к вызову.
  • Может или не может быть переведен в удобочитаемый формат.
    • & в &
  • Лидирующие и конечные пробелы разрешены.

Примеры

Encode a steganographic encoder into a package
code-challenge,unicode,steganography
/codegolf/65159/encode-a-steganographic-encoder-into-a-package

Simple predictive keyboard CG
code-golf
/codegolf/76196/simple-predictive-keyboard-cg

счет

Как это , кратчайший ответ в байтах выигрывает.

totallyhuman
источник
8
Я очень устал от проблем с обменом API-стека .
Rɪᴋᴇʀ
3
@Riker Хм ... спасибо за ваш отзыв? Я действительно не знаю, почему вы бы понизили голосование по этой причине, но я полагаю, вам больше власти.
полностью человек
6
Я не понизил за это. Я понизил голосование, потому что я думаю, что вопрос скучен. Кроме того, должны ли закрытые вопросы иметь одинаковую вероятность вывода?
Rɪᴋᴇʀ
1
Хотя я не чувствую себя так сильно, как @Riker, в последнее время, похоже, возникло много проблем, связанных с API; настолько, что мне удалось заблокировать себя от использования API в течение ~ 21 часа !
Лохматый
4
Интересно, что этот тест будет показан во время тестирования, но как только я отвечу, он больше не будет отображаться в тестировании.
HyperNeutrino

Ответы:

7

JavaScript + HTML, 271 250 232 байта

Очевидно, вы можете использовать Dates в качестве псевдослучайных чисел. Я украл это из ответа Шегги .

(Использует только около 4 вашей квоты)

q=[]
g=f=>fetch('//api.stackexchange.com/questions/unanswered?site=codegolf&page='+f).then(r=>r.json().then(j=>(q=[...q,...j.items])^j.has_more?g(f+1):document.write(`<pre>${(q=q[new Date%q.length]).title}
${q.tags}
`+q.link)))
g(1)

Он создает массив q, затем вызывает g(1), который выбирает первую страницу результатов и добавляет ее к q. Затем, если запрос говорит это has_more, то он вызывает g(f+1), который выбирает следующую страницу, пока не достигнет конца и не запишет в HTML-документ (который автоматически откроет ответ)

Если нас не волнуют все оставшиеся без ответа вопросы, только самые последние 30 (используется только 1 ваша квота):

JavaScript + HTML, 213 196 179 байт

fetch`//api.stackexchange.com/questions/unanswered?site=codegolf`.then(r=>r.json().then(j=>document.write(`<pre>${(j=j.items[new Date%j.items.length]).title}
${j.tags}
`+j.link)))

Artyer
источник
Извините, @Artyer, я был так сосредоточен на том, чтобы поработать над своим собственным ответом, я никогда не заметил, что вы избили меня до удара через несколько минут. Я рад удалить мой ответ, если вы чувствуете, что он похож на ваш.
Лохматый
@ Шэгги Все в порядке. Я также написал второй ответ в то же время, когда вы написали свой ответ, так что это счастливое совпадение, что они оказались похожими.
Artyer
Вы можете сэкономить несколько байков путем жесткого кодирования количества страниц, которые нужно получить. Вместо j.has_more?g(f+1), попробуйте++f<5?g(f)
Shaggy
Вы также можете заменить q=q.concat(j.items)на q=[...q,...j.items]. Похоже, Tags: это необязательно, так что вы можете отказаться от этого тоже. И нет необходимости join q.tags, он будет приведен в строку при соединении со строкой. Наконец, использование литерала шаблона для финала также должно сэкономить вам несколько байтов.
Лохматый
@ Shaggy К сожалению, я выполнил свою квоту. Это сбрасывается через 425 секунд, хотя.
Artyer
6

Python + запросы + json + random + html, 249 239 байт

import requests as r,json,random as R,html
j=R.choice(json.loads(r.get('http://api.stackexchange.com/questions/no-answers?site=codegolf').text)['items'])
print('\n'.join([html.unescape(j['title']),'Tags: '+', '.join(j['tags']),j['link']]))

Получилось дольше, чем хотелось бы.

-10 байт благодаря @totallyhuman, использующему, R.choiceа не R.shuffleпринимающему первый элемент.

HyperNeutrino
источник
Можете ли вы сохранить несколько байтов с помощью random.shuffle?
полностью человек
... подожди, а еще лучше random.choice()?
полностью человек
1
@totallyhuman Изменение имени inpurt не имеет никакого значения для bytecount: P Но спасибо за .choice()!
HyperNeutrino
Вам не нужна библиотека JSon, используйте r.get(url).json()вместо этого
овса
Это не учитывает has_more. Это только случайный выбор из первых 30.
Artyer
0

Баш 255 232 байта

a="api.stackexchange.com/questions/";b="?site=codegolf";c=$(w3m $a"unanswered"$b"&filter=total"|tr -cd 0-9);w3m $a"no-answers"$b"&pagesize=1&page="$((RANDOM%c))|jq -r ".items[0]|.title,(.tags|join(\", \")),.link"|recode html..utf-8

Похоже, неправильные результаты возвращаются для итогов за отсутствие ответов / без ответа. Общая идея - получить общее количество, чем получить случайную страницу с одним элементом.

Баш 174 153 байта

w3m api.stackexchange.com/questions/no-answers?site=codegolf|jq -r ".items[$RANDOM%(.items|length)]|.title,(.tags|join(\", \")),.link"|recode html..utf-8

Он выбирает один случайный вопрос из последних 30, а не из всех вопросов. Работает из командной строки. Требуется скручивание w3m, jq и перекодирование.

результат:

Tips for golfing in Charcoal
code-golf, tips
/codegolf/117269/tips-for-golfing-in-charcoal
user1516873
источник
Я уверен, что вам нужно выбрать из всех. Но добро пожаловать в PPCG в любом случае!
NoOneIsHere