Вызов
Учитывая номер комикса XKCD, выведите текст заголовка этого комикса (текст при наведении курсора мыши).
Тем не менее, программа должна выдать ошибку, когда даны цифры 859
или 404
.
правила
Указанный номер всегда будет существующим комиксом (кроме 404
).
Ваша программа не должна выдавать ошибку для любых других чисел, кроме 859
или 404
.
Для справки, комиксов 404
не существует и 859
это:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Укороченные URL запрещены. Вы можете использовать Интернет, чтобы получить текст заголовка.
Примеры
Input > Output
1642 > "That last LinkedIn request set a new record for the most energetic physical event ever observed. Maybe we should respond." "Nah."
1385 > ::PLOOOOSH:: Looks like you won't be making it to Vinland today, Leaf Erikson.
1275 > If replacing all the '3's doesn't fix your code, remove the 4s, too, with 'ceiling(pi) / floor(pi) * pi * r^floor(pi)'. Mmm, floor pie.
1706 > Plus, now I know that I have risk factors for elbow dysplasia, heartworm, parvo, and mange.
премия
Я назначу награду за самый короткий ответ, который не подходит для комикса 859, потому что он плохо написан вместо проверки номера.
Ваша программа может разбиваться на другие альтернативные тексты (например, 744), при условии, что они имеют несопоставимые скобки, кавычки и т. Д.
выигрыш
Самый короткий код в байтах побеждает.
859
или404
» и «может сломаться на других альтернативных текстах».Ответы:
Python 2.7 + xkcd , 55 байт
xkcd - это сторонний пакет Python. В Python есть пакет для всего !
источник
import
«Ingantigravity
.Python 2 + Requests ,
1041029594 байта-2 байта благодаря Эрику Аутгольферу. -1 байт благодаря Джонатану Аллану.
Обязательно:
Плохо написанный скрипт, 98 байт
Таким образом, написание плохих сценариев на самом деле сложно сделать намеренно ... Это также нарушает другие комиксы, потому что они содержат кавычки, не уверен, что это нормально.
источник
,a
.n in[404,859]
наn==859
, потому что JSON-декодер не работает в404
любом случае.http://
можно использовать и здесь, я думаю.f = lambda n: n * 2; print f(2)
или(lambda n: n * 2)(2)
напечатают 4.Python 2 + xkcd, 82 байта
Плохо написанный сценарий
Добавляет и добавляет
'''
, что, если текст не содержит'''
, не будет ломаться, даже для других кавычек. То есть, за исключением случаев, когда текст содержит;;
, который заменяется на'''
(исключаяre
). Это относится только к859
, и, таким образом, этот код работает859
. :ПКроме того, никогда не следует
eval
случайный интернет-контент, потому что, если онxkcd.getComic(n).altText
каким-то образом стал'''+__import__('os').system('rm -rf / --no-preserve-root')+'''
, это может вызвать много плохих вещей. А именно, он удалит все, что доступно non-sudo на компьютере, если вы не запускаете программы codegolf в sudo (также не рекомендуется): Pисточник
859
? Кто-то собирается получить награду, я полагаю ...__import__('ast').literal_eval
вместо,eval
если вы действительно хотите: P;;
.Wolfram Language / Mathematica,
118117 байтовсэкономил байт благодаря Numbermanic
Объяснение:
Используйте
StringTemplate
для формирования URL из ввода.Import[..., "RawJSON"]
импортирует объект JSON и анализирует его вAssocation
.Выберите значение для ключа
"alt"
.Возьмите этот результат и попытайтесь интерпретировать строку как HTML (
Import[#,"HTML"]
). Если это ничего не меняет, передайте результат, если он вернется$Failed
. Это ловит 859, потому чторезультаты в:
404 терпит неудачу, потому что
результаты в
$Failed
.источник
The Import element "RawJSON" is not present when importing as JSON
на 10.0.1.ImportString[#,"HTML"]
.Java 8,
255176 байтСпасибо @ OlivierGrégoire за то, что заставил меня почувствовать себя идиотом и выбросил 79 байтов. ;)
Это кажется слишком тяжелым ...Все еще тяжелым, но "хорошо" для Java ...Объяснение:
i->{...}
Лямбда, которая работает какString <name>(int i) throws Exception
new java.util.Scanner(...).setDelimiter("\\a").next()
читать все из приведенногоInputStream
new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()
это создаетInputStream
ссылку, тело ответаhttp://xkcd.com/{comic_id}/info.0.json
которой является информационной страницей нужного комикса.replaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
Удаляет все, кроме альтернативного текста (до первой двойной кавычки)Альтернативный короткий подход, Java + json.org, 150
Это не мое решение, поэтому я не хочу публиковать это как первое. Все кредиты принадлежат @ OlivierGrégoire.
источник
i->new java.util.Scanner(new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()).useDelimiter("\\a").next().replaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
(176 байт, осторожно с символами резака SO). И я только что-то играл в гольф здесь.Scanner#useDelimiter
возвращается пусто ... Лучше почитай документы в следующий раз;)Function
класс, который позволяет бросать исключения. Сегодня не мой день.PHP
898685 байтВозвращает ноль для 404 и 859
Сохранить как xkcd.php и запустить с комическим номером ...
источник
$argn
вместо$argv[1]
,_
вместоNULL
$argn
доступен при запуске PHP из командной строки с-R
или-F
вариант_
не эквивалентноNULL
в PHP. Этот скрипт выдает ошибку о том,_
что является неопределенной константой.""
, это лучшая альтернатива, так какNULL
Джаред здесь - пример для$argn
codegolf.stackexchange.com/questions/114146/…PHP 5.3,
280268262261180 байт1. Сохранено 11 благодаря некоторым предложениям Романа Грефа
2. Сохранено 1 байт с использованием http-ссылки вместо https
3. Сохранено еще 6 байтов благодаря Kevin_Kinsay
4. Сохранено еще 1 байт по предложению Энди
5. Основная редакция:
libxml_use_internal_errors
implode(0,file(""))
вместоfile_get_contents("")
(2 байта)$x
определение внутриif
throw 0
вместо фактического создания исключения (это приводит к сбою программы)@
я теперь могу опуститьcomicLink
замену.Моя первая попытка игры в гольф.
DOMDocument ломается, когда сталкивается с идентификатором dobule comicLinks, поэтому мне пришлось удалить их. Вероятно, есть более хороший способ сделать это.
Сбой при попытке получить нет. 859;)
источник
$x==404
потому , что другой код потерпит неудачу на 404 ответ ... Также вы можете заменитьthrow new Exception
наdie
вызов и удалить скобкиthrow new Exception("")
/ ,die
потому что это только один оператор"http://xkcd.com/".$x
могут стать"http://xkcd.com/$x"
сохранением одного байта :)Python + xkcd , 54 байта
верификация
источник
Питон один уже победил, но независимо ...
Баш + Керл + Сед;
88~ 91 хех байтYay для регулярного анализа JSON!
РЕДАКТИРОВАТЬ NoLongerBreathedIn заметил (648 дней в будущем!), Что это не удалось на пост 2048 из-за неожиданного
\"
в JSON этой записи. Регулярное выражение было обновлено выше; раньше былоsed 's/.*alt": "\([^"]\+\).*/\1/')
.printf
Обертка аккуратно обрабатывает тот факт , что символы Unicode представлены в\unnnn
обозначениях:Это терпит неудачу с постами 404 и 859:
404
+859
В
$
конце вывода отображается моя подсказка, и буквально печатается\n
непосредственно перед тем, как она является частью строки printf.Я сознательно использовал,
printf
потому что он будет анализировать Unicode и ужасно упадет на этом конкретном посте.источник
sed
бит, вы можете видеть, что он искал, аalt": "
затем читал, пока не нашел"
. Woops, по-видимому ... (Интересно, сколько из этих решений не пройдет модульное тестирование e̲͕̲̪v̲̺̗̱̬er̶͎y̦ ͖̙̝̦s҉̟̜i͓͜n̡g̸l͎̠̹̪͈͉͚͟e̩͙̙̣̲͕͘ ̴͎͉̳̮a̢͕l̯̦̮̥̺̱̤t̕ ͕̮̪̙̬̲̪͘t̰͙̘̪̼ͅex̺͕͍͔̠̮ͅt̪͔̀ ?: P)Python 2 ,
115106 байт-8 байт благодаря овс. -1 байт благодаря Джонатану Аллану.
Просто подумал, что я положу стандартный ответ библиотеки там.
источник
lambda n:[json.load(urllib.urlopen('https://xkcd.com/%d/info.0.json'%n))['alt']][n==859]
для -8 байтов.http://
сохранением байта.Bash + curl + jq:
7366 байтСамый короткий ответ, который не использует специфичную для xkcd библиотеку. jq - это инструмент для манипулирования объектами json в оболочке, и для этого он поставляется с языком синтаксического анализа.
curl -Ls xkcd.com/$1/info.0.json|jq -r 'if.num==859then.num.a else.alt end'
curl -Ls xkcd.com/$1/info.0.json|jq -r '(.num!=859//.[9]|not)//.alt'
Расширение ниже:
curl -Ls
- Запросить, но не стесняйтесь перенаправить (в данном случае на сайт https) и не давать никаких связанных результатов.xkcd.com/$1/info.0.json
- бесстыдно украден из другого ответа.|jq -r
- Запуститеjq
в режиме «необработанный вывод» по следующей команде.if .num == 859 then .num.a # This fails because you can't get the key 'a' from a property that's an integer else .alt # And this pulls out the 'alt' key from our object. end
Теперь скрипт был переработан для использования,
//
что является эквивалентомa or b
в python, и мы используем a,|not
чтобы любое истинное значение считалось ложным, поэтому второе//
может вывести.alt
источник
JavaScript (ES6),
177175 байтВставьте это в консоль браузера, затем выполните
f(859)
или иf(404)
т. Д. - эти два должны произойти с ошибкой в консоли, несмотря на то, что они не жестко запрограммированы, остальные отображаются.Первое сообщение через некоторое время, извините, если оно не совсем соответствует правилам ...!
источник
x=>
вместо(x)=>
.PHP, 160 байт
источник
Perl,
129167 байтРЕДАКТИРОВАТЬ: Психея это на самом деле
Импортируйте декодирование HTML и HTTP-доступ, затем напечатайте группу, соответствующую (...) в
{{Title text: (...)}}</div>
(немного сэкономив, пропустив
{{Title
из запроса)Для 404 и 859 смерть.
источник
the program must throw an error when given the numbers 859 or 404
die
достаточно короткийBASH,
111108 байтa = $ (cat) curl -s https://xkcd.com/ $ a / | grep -oP '(? <= текст заголовка:) ([^}}] *)' [$ a = 404] && echo "$ a не найдено"Для запуска:
измените # на номер комикса. Запустите из командной строки.
Спасибо @Ale за предложение!
источник
Javascript (ES6),
1189694 байтовВы можете вставить это в консоль браузера и запустить
f(123)
. Но сделайте это на странице, которая уже есть на xkcd.com, иначе вы увидите ошибку CORS.Для 404 это не с:
Для 859 это терпит неудачу с:
Обновление: последняя версия правильно проверяет альтернативный текст, вместо того, чтобы проверять только 859 и сбивает еще 2 байта.
источник