xkcd - это всеми любимый веб-комикс, и вы будете писать программу, которая принесет нам больше юмора.
Ваша задача в этой задаче - написать программу, которая будет принимать число в качестве входных данных и отображать этот xkcd и его текст заголовка (текст mousover).
вход
Ваша программа примет положительное целое число в качестве входных данных (не обязательно того, для которого существует действительный комикс) и отобразит этот xkcd: например, при вводе 1500 должно отображаться комическое «Upside-Down Map» на xkcd.com/1500, а затем либо напечатайте текст заголовка на консоли, либо отобразите его с изображением.
Due to their proximity across the channel, there's long been tension between North Korea and the United Kingdom of Great Britain and Southern Ireland.
Контрольный пример 2, для n = 859:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Ваша программа также должна функционировать без какого-либо ввода и выполнять ту же задачу для самого последнего xkcd, найденного на xkcd.com, и она всегда должна отображать самый последний, даже когда новый выходит.
Вам не нужно получать изображение непосредственно с xkcd.com, вы можете использовать другую базу данных, если она актуальна и уже существовала до того, как возникла эта проблема. Укороченные URL-адреса, то есть URL-адреса, не имеющие цели, кроме перенаправления в другое место, не допускаются.
Вы можете отображать изображение любым удобным для вас способом, в том числе в браузере. Однако вы не можете напрямую отображать часть другой страницы в iframe или аналогичном. УТОЧНЕНИЕ: вы не можете открыть ранее существующую веб-страницу, если вы хотите использовать браузер, вам нужно создать новую страницу . Вы также должны фактически отобразить изображение - вывод файла изображения не допускается.
Вы можете обрабатывать случай, когда для определенного комикса нет изображения (например, оно является интерактивным или программе было передано число, превышающее количество выпущенных комиксов) любым разумным способом, в том числе выбрасывающим исключение. или распечатка, по крайней мере, односимвольной строки, если она каким-то образом показывает пользователю, что для этого ввода нет изображения.
Вы можете только отобразить изображение и вывести его текст заголовка или вывести сообщение об ошибке для недопустимого комикса. Другие выходные данные не допускаются.
Это соревнование по коду , поэтому выигрывает меньшее количество байтов.
import antigravity
в Python;)n=404
xkcd.com/404 это страница 404.xkcd is everyone's favorite webcomic
[Ответы:
Perl + curl + feh,
868475 байтТребуется
-p
выключатель. Я учел это в подсчете байтов.источник
?
в первой группе матча. Вы можете использовать-p
и$_=$2
вместоprint$2
, но тогда текст заголовка печатается только после закрытия feh. Не уверен, что это верно.-p
но не был уверен, что OP будет чувствовать по этому поводу.PowerShell v3 +
11099107103 байтСпасибо Тимми за помощь в сохранении некоторых байтов с помощью встроенных назначений.
Если никакие аргументы не переданы, тогда
$args
является нулем, и это только получит текущий комикс. Загрузите изображение, сопоставив изображение с альтернативным текстом, в файл в текущем рабочем каталоге скрипта. Затем отобразите его с помощью программы просмотра jpg по умолчанию. Затем альтернативный текст отображается на консоли.iwr
это псевдоним дляInvoke-WebRequest
Если переданное число (или любой неверный ввод по этому вопросу) не совпадает, процесс завершается с ошибкой не менее 404.
источник
AutoIt , 440 байт
Да, это долго, но это стабильно.
Прежде всего, это не использует RegEx для очистки сайта (потому что у меня нет времени проверять это на всех комиксах), а использует API Internet Explorer для итерации по
img
тегам DOM, пока не найдет тег с текстом заголовка.Двоичный поток считывается из URL-адреса изображения и отображается в растровое изображение с помощью GDIPlus. Затем он отображается в симпатичном графическом интерфейсе с авторазмером и реальной всплывающей подсказкой, чтобы он работал почти так же, как веб-сайт.
Вот контрольный пример (
_(859)
):)
источник
Powershell, 93 байта
93-байтовая версия для использования локальной программы просмотра изображений.
Сохраняя 2 байта, удаляя ненужные двойные кавычки, затем используйте другой лот
("http:"+$n.src)
вместо"https://"+$n.src.trim("/")
- посколькуimg
src//
уже включен , и xkcd не требует https.$n=(iwr "xkcd.com/$args").images|?{$_.title};$n.title;saps ("https://"+$n.src.trim("/"))
очень похож на ответ Мэттса PowerShell (вероятно, это должен быть комментарий, но низкая репутация)
Вместо этого это открывает новую вкладку / окно в браузере по умолчанию и другие вещи, сохраняя некоторые байты.
iwr
это псевдоним дляInvoke-WebRequest
saps
это псевдоним, дляStart-Process
которого открывается «это» в контексте по умолчанию.источник
saps
ееiwr
и добавить `-OutF x.jpg; ii x. *` До конца, если вы хотите, чтобы она открывалась в локальной папке по умолчанию просмотрщик изображений.R
358328310298 байтС новыми строками и комментариями:
Скриншоты тестовых случаев:
для х = 1500:
для х пусто:
случай, когда изображение в формате JPEG:
х = 859:
источник
plot.new();rasterImage(...)
.xaxs
иyaxs
в результате все равно будет пропорциональным.PHP, 95 байт
Сохранить как main.php, запустить сервер
Откройте http: // localhost: 8123 / main.php? Id = 1500
источник
Python 2,7,
309299295274 байтаПолная программа. Определенно более пригодный для игры в гольф, но, прочитав комиксы xkcd так долго, я не мог пропустить это (кто знает, поможет ли это в будущем для удобного просмотра xkcd).
Если вход не передан, получает текущий комикс. Если в качестве входных данных передан действительный комический номер, он получает этот комикс. Если введен неверный ввод (не число комиксов в допустимом диапазоне), выдается ошибка.
Любые предложения о том, как уменьшить количество байтов, приветствуются! Вернусь (и добавлю объяснения), когда у меня будет больше времени.
-10 байт благодаря @Dopapp
-21 байт благодаря @Shebang
источник
try:...
иexcept:...
наtry:n=...
иexcept:n=''
, экономя всего 10 байтовtry
заявление? В спецификации программы сказано, что вы всегда получите положительное целое число.raw_input()
? По умолчанию пользователь может нажать[Enter]
иn
в любом случае будет содержать пустую строку. Если вы удалите этот пробный блок, иt=u.urlopen(h+x+n).read() -> t=u.urlopen(h+x+raw_input()).read()
получите его до 274 байтов.https
. Тем не менее, он все еще действителен, потому что он работал во время публикации. Чтобы заставить это работать сейчас, измените строку 3, чтобы начать сh='https://'
+1 байта.PHP, 42 байта
Сохраните в файл и запустите его на выбранном веб-сервере.
источник
JavaScript + HTML, 124 + 18 = 142 байта
Решение кросс-происхождения благодаря ответу Кайидо здесь .
17 байтов (
//crossorigin.me/
) могут быть сохранены, если прокси, необходимый для подключения к xkcd.com, может быть вычтен ( мета-пост об этом ).Тестовый фрагмент
источник
Python 3 + запросы + PIL,
192186 байтОткрывает программу просмотра изображений (в зависимости от того, какая система используется по умолчанию), содержащую комикс, и отправляет текст заголовка на консоль.
источник
Wolfram Language 45 байтов (Mathematica)
Использование с номером:
Использование без номера:
источник