एक दोषपूर्ण XKCD ब्राउज़र बनाएँ


75

चुनौती

एक 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) पर टूट सकता है, बशर्ते उनके पास बेजोड़ कोष्ठक, उद्धरण चिह्न आदि हों।

जीतना

बाइट्स में सबसे छोटा कोड जीतता है।


2
चूंकि स्क्रिप्ट-ब्रेकिंग ऑल्ट टेक्स्ट ( 744 देखें ) के साथ अन्य कॉमिक्स हैं , क्या यह ठीक है अगर कोई प्रोग्राम उन पर भी टूटता है?
पूरी तरह से

8
@totallyhuman आपको इसमें थोड़ा-NSFW- चेतावनी जोड़नी चाहिए: P
HyperNeutrino

11
चुनौती में विरोधाभास: "के अलावा कोई अन्य नंबरों के लिए एक त्रुटि फेंक नहीं होना चाहिए 859या 404और" अन्य alt ग्रंथों पर टूट सकता है ""।
aschepler

3
@aschepler उत्तरार्द्ध केवल बाउंटी के लिए है
बीटा डिके

4
@Kzqai अच्छा सवाल है, लेकिन मुझे लगता है कि आप थोड़ा कम करके आंक सकते हैं कि डीडीओएस में कितना ट्रैफ़िक शामिल है और पहले से ही कितना ट्रैफ़िक xkcd.com है। मैं उन उत्तरों की तुलना में यहाँ से उत्पन्न ट्रैफ़िक की अपेक्षा नहीं करूँगा।
ट्राइकोप्लाक्स

जवाबों:


107

पायथन 2.7 + xkcd , 55 बाइट्स

xkcd एक तृतीय-पक्ष पायथन पैकेज है। पायथन में, सब कुछ के लिए एक पैकेज है !

lambda n:[xkcd.getComic(n).altText][n==859]
import xkcd

के लिए 404: urllib2.HTTPError: HTTP Error 404: Not Found

के लिए 859: IndexError: list index out of range


89
पैकेज को इस चुनौती से पहले लिखा गया था और इस चुनौती के लिए विशेष रूप से नहीं लिखा गया था , यह सिर्फ अत्यधिक उपयुक्त होने के लिए समाप्त होता है।
दारोगा १ '

4
वाह, पायथन बस और अधिक आकर्षक हो गया!
नेट


6
संयोग से, अजगर वास्तव में import'आईएनजी' का समर्थन करता है antigravity
फिर भी एक और यूजर

39
क्या अजगर ने यह चुनौती सिर्फ गणितज्ञ को दी थी?
आर्कटिकस

22

पायथन 2 + अनुरोध , 104 102 95 94 बाइट्स

-2 बाइट्स एग्री टू द आउटगॉल्फ। -1 जोनाथन एलन को धन्यवाद।

lambda n:[get('http://xkcd.com/%d/info.0.json'%n).json()['alt']][n==859]
from requests import*

अनिवार्य:

import antigravity

पूरी तरह से लिखी गई स्क्रिप्ट, 98 बाइट्स

इसलिए, खराब स्क्रिप्ट लिखना वास्तव में जानबूझकर करना कठिन है ... यह अन्य कॉमिक्स पर भी टूटता है क्योंकि उनमें उद्धरण होते हैं, निश्चित नहीं कि अगर यह ठीक है।

from requests import*
exec'print "%s"'%get('http://xkcd.com/%d/info.0.json'%input()).json()['alt']

4
मुझे लगता है कि आप हटा सकते हैं ,a
आउटगोल्फ

1
आप बदल सकते हैं n in[404,859]करने के लिए n==859है, क्योंकि JSON विकोडक के लिए विफल रहता है 404वैसे भी।
संगीतज्ञ 523

7
... http://यहाँ भी इस्तेमाल किया जा सकता है, मुझे लगता है।
जोनाथन एलन

1
आप वास्तव में इसे एक पैरामीटर के साथ कैसे चलाते हैं? जैसे, आप एक नाममात्र का मेमना कैसे चलाते हैं?
श्रीजेंडर

1
@ मर्जैंडर पहली पंक्ति एक अनाम लंबोदर है जिसे चलाने के लिए एक चर को सौंपा जा सकता है। उदाहरण के लिए, दोनों f = lambda n: n * 2; print f(2)या (lambda n: n * 2)(2)
छपेंगे

18

पायथन 2 + xkcd, 82 बाइट्स

खराब लिखी हुई पटकथा

lambda n:eval("'''%s'''"%xkcd.getComic(n).altText.replace(';;',"'''"))
import xkcd

लागू होता है और प्रीपेंड करता है ''', जो कि, जब तक कि पाठ शामिल '''नहीं है, तब तक अन्य उद्धरण चिह्नों के लिए भी नहीं टूटेगा। यह है, सिवाय इसके कि यदि पाठ सम्‍मिलित है ;;, जो '''(मिटने re) के साथ बदल जाता है । यह केवल के लिए लागू होता है 859, और इस प्रकार यह कोड टूट जाता है 859। : पी

इसके अलावा, किसी को कभी भी evalइंटरनेट सामग्री को रैंडम नहीं करना चाहिए , क्योंकि अगर xkcd.getComic(n).altTextकिसी तरह बन गया '''+__import__('os').system('rm -rf / --no-preserve-root')+''', तो इससे कई खराब चीजें हो सकती हैं। जब तक आप sudo में कोडगुल्ल प्रोग्राम नहीं चलाते (अनुशंसित नहीं है): P


1
खराब तरीके से लिखा गया और उस टेस्ट केस के लिए फेल हो गया 859,? किसी को एक इनाम मिलने वाला है, मुझे लगता है ...
श्री एक्सकोडर

12
आह - इंटरनेट से यादृच्छिक सामग्री evaling के लिए किनारा! : पी
ल्यूक ब्रिग्स

@LukeBriggs यह सैद्धांतिक रूप से सुरक्षित होना चाहिए ... मेरा मतलब है, मेरा कंप्यूटर विस्फोट नहीं हुआ है ( फिर भी ) इसलिए यह ठीक होना चाहिए, है ना? : P लेकिन वैकल्पिक रूप से आप इसके __import__('ast').literal_evalस्थान पर उपयोग कर सकते हैं evalयदि आप वास्तव में चाहते थे: P
HyperNeutrino

क्या यह 744 पर टूटता है?
ड्रेको 18s

@ Draco18s यह नहीं होना चाहिए, क्योंकि ट्रिपल उद्धरण बेमेल उद्धरण के बारे में परवाह नहीं करते हैं, और वहाँ कोई नहीं है ;;
हाइपरन्यूट्रीनो

11

वोल्फ्राम भाषा / गणितज्ञ, ११a ११ by बाइट्स

संख्यामान के लिए एक बाइट धन्यवाद बचाया

If[ImportString[#,"HTML"]===#,#,$Failed]&@Import[StringTemplate["http://xkcd.com/``/info.0.json"]@#,"RawJSON"]@"alt"&

स्पष्टीकरण:

StringTemplateइनपुट से URL बनाने के लिए उपयोग करें ।

Import[..., "RawJSON"]JSON ऑब्जेक्ट को आयात करता है और इसे एक में पार्स करता है Assocation

कुंजी के लिए मान का चयन करें "alt"

इस परिणाम को लें और स्ट्रिंग को HTML ( Import[#,"HTML"]) के रूप में व्याख्या करने का प्रयास करें । यदि यह कुछ भी नहीं बदलता है तो परिणाम को पास करें, अगर यह वापस लौटता है $Failed। यह 859 कैच का कारण बनता है

ImportString[
 "Brains aside, I wonder how many poorly-written xkcd.com-parsing 
  scripts will break on this title (or ;;\"''{<<[' this mouseover text.\"","HTML"]

का परिणाम:

Brains aside, I wonder how many poorly-written xkcd.com-parsing 
scripts will break on this title (or ;;"''{

404 विफल रहता है क्योंकि

If[
 ImportString[$Failed["alt"], "HTML"] === $Failed["alt"], 
 $Failed["alt"],
 $Failed]

में परिणाम $Failed


आप कौन सा संस्करण उपयोग कर रहे हैं? मुझे The Import element "RawJSON" is not present when importing as JSON10.0.1 पर मिलता है।
जूलियन वुल्फ

@totallyhuman खैर यह शायद 859 के लिए जाँच करने की जरूरत नहीं है। (प्रश्न में इनाम की स्थिति देखें)
बीटा Decay

@ जूलियनवॉल्फ मैं 11.1.0 का उपयोग कर रहा हूं। मुझे लगता है कि "रॉजन्सन" का समर्थन 10.2 में जोड़ा गया था।
16

4
@totallyhuman यह एक स्पष्ट जाँच नहीं करता है, लेकिन यही ImportString[#,"HTML"]थोड़ा सा है।
चीयू

1
@numbermaniac वास्तव में मैं कर सकता हूँ। विश्वास नहीं कर सकता कि मैं चूक गया, धन्यवाद!
जुई

8

जावा 8, 255 176 बाइट्स

मुझे एक बेवकूफ और 79 बाइट्स की तरह महसूस करने के लिए @ ओलिवियरग्रेयर के लिए धन्यवाद। ;)

i->new java.util.Scanner(new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()).useDelimiter("\\a").next().replaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")

यह बहुत भारी लगता है ... अभी भी भारी है, लेकिन जावा के लिए "ठीक है" ...

स्पष्टीकरण:

  • 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("\".*","") ऑल्ट टेक्स्ट को छोड़कर सब कुछ हटा देता है (पहले दोहरे उद्धरण तक)
  • निहितार्थ

वैकल्पिक छोटा दृष्टिकोण, जावा + json.org, 150

i->i==859?new Long(""):new org.json.JSONObject(new org.json.JSONTokener(new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream())).get("alt")

यह मेरा समाधान नहीं है इसलिए मैं इसे पहले पोस्ट नहीं करना चाहता। सभी क्रेडिट @ ओलिवियरग्रेयर के हैं।


1
आपके आयात गायब हैं! । इसके अलावा, इस उत्तर को गोल करने का लगभग शून्य प्रयास है ...
ओलिवियर ग्रेजायर

जोड़ा गया। बस 2 ^ 8 के तहत। कम से कम मेरे प्रोग्राम का आकार एक बाइट में फिट बैठता है :)
रोमन ग्रैफ

i->new java.util.Scanner(new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()).useDelimiter("\\a").next().replaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")(176 बाइट्स, एसओ की टिप्पणी कटर पात्रों के लिए सावधान) और मैं यहां मुश्किल से कुछ भी गढ़ रहा हूं।
ओलिवियर ग्रेगोइरे

ओह! मैंने सोचा था कि Scanner#useDelimiterशून्य ... अगली बार डॉक्स को बेहतर ढंग से पढ़ें;)
रोमन ग्रैफ

1
मैंने अभी देखा कि आप अपनी खुद की Functionकक्षा बना सकते हैं जो आपको अपवाद को फेंकने की अनुमति देती है .. आज का दिन मेरा नहीं।
रोमन ग्रैफ

7

PHP, 89 86 85 बाइट्स

<?=($a=$argv[1])==859?_:@json_decode(file("http://xkcd.com/$a/info.0.json")[0])->alt;

404 और 859 के लिए रिटर्न देता है

Xkcd.php के रूप में सहेजें और कॉमिक नंबर के साथ चलाएं ...

$ php xkcd.php 386

के $argnबजाय का उपयोग करें $argv[1], के _बजायNULL
Jörg Hülsermann

@ JörgHülsermann धन्यवाद! मैं _ के बारे में नहीं जानता था। $ argn हालांकि काम करने के लिए प्रतीत नहीं होता है।
जारेड मेसेरेलिन

php.net/manual/en/features.commandline.options.php $argn उपलब्ध है यदि आप कमांड लाइन से PHP -Rको -Fविकल्प या विकल्प के साथ चलाते हैं
Jörg Hülsermann

_NULLPHP में समतुल्य नहीं है । यह स्क्रिप्ट _अपरिभाषित स्थिर होने के बारे में एक त्रुटि फेंकता है।
एंडी

@Andy यदि किसी सूचना की अनुमति नहीं ""है, तो बेहतर विकल्प है क्योंकि NULLJared यहाँ $argn कोडगुल्फ.स्टैकएक्सचेंज.com
Jörg Hülsermann

5

PHP 5.3, 280 268 262 261 180 बाइट्स


1. रोमन ग्रैफ़ के कुछ सुझावों के लिए 11 धन्यवाद
सहेजे गए। https के बजाय http लिंक का उपयोग करके 1 बाइट को
बचाया। 3. केविन_किंस के लिए एक और 6 बाइट्स सहेजे गए
। 4. एंडी के सुझाव के साथ एक और 1 बाइट बचाया
। 5. एक प्रमुख संशोधन:

  • बदलने के बजाय @ के साथ त्रुटियों को दबा दिया libxml_use_internal_errors
  • के implode(0,file(""))बजाय इस्तेमाल किया file_get_contents("")(2 बाइट्स)
  • ले जाया गया $x परिभाषा को अंदर ले गयाif
  • throw 0वास्तव में अपवाद को फेंकने के बजाय इसका उपयोग करना (यह प्रोग्राम को क्रैश करता है)
  • के साथ @मैं अब comicLinkजगह छोड़ सकते हैं ।


मेरी पहली कोशिश गोल्फिंग पर हुई।

DOMDocument तब टूटता है जब ID ID comicLinks से सामना होता है इसलिए मुझे इन्हें हटाना पड़ा। शायद ऐसा करने का एक अच्छा तरीका है।

जब कोई पाने की कोशिश कर रहा है तो क्रैश। 859;)

<?php if(($x=$argv[1])==859)throw 0;$a=new DOMDocument;$b=@$a->loadHTML(implode(0,file("http://xkcd.com/$x")));echo $a->getElementsByTagName('img')->item(1)->getAttribute('title');

2
PPCG में आपका स्वागत है! मुझे लगता है कि आप परीक्षण को हटा सकते हैं, $x==404क्योंकि अन्य कोड 404 प्रतिक्रिया पर विफल हो जाएगा ... इसके अलावा आप throw new Exceptionएक dieकॉल से प्रतिस्थापित कर सकते हैं और कोष्ठक को चारों ओर से हटा सकते हैं throw new Exception("")/ dieक्योंकि यह केवल एक ही बयान है
रोमन ग्रैफ

1
धन्यवाद! मुझे यकीन नहीं था कि अगर मरो () "थ्रो

1
Libxml_use_internal_errors पर 'सही' के बजाय "1" का उपयोग करें। आप शायद अपवाद के लिए 0 पास कर सकते हैं और एक उद्धरण बराबर बचा सकते हैं। बंद करना?> वैकल्पिक होना चाहिए।
केविन_किंसी

चर को दोहरे उद्धरण चिह्नों के अंदर प्रक्षेपित किया जाता है, जिससे एक बाइट "http://xkcd.com/".$x"http://xkcd.com/$x"
एंडी

BTW, "मेरे" बदसूरत regex हैक के विपरीत "उचित" पार्सिंग तकनीक (एक्सएमएल पार्सर) का उपयोग करने के लिए;
केविन_किसे

5

पायथन + xkcd , 54 बाइट्स

import xkcd
lambda n:xkcd.getComic(*{n}-{859}).altText

सत्यापन

>>> import sys
>>> sys.tracebacklimit = 0
>>>
>>> import xkcd
>>> f = lambda n:xkcd.getComic(*{n}-{859}).altText
>>>
>>> print f(149)
Proper User Policy apparently means Simon Says.
>>>
>>> f(404)
urllib2.HTTPError: HTTP Error 404: Not Found
>>>
>>> f(859)
TypeError: getComic() takes at least 1 argument (0 given)

मैंने केवल इस पर ध्यान दिया है। अच्छा गोल्फ!
बीटा डेके

5

अजगर पहले से ही जीता है, लेकिन परवाह किए बिना ...

बैश + कर्ल + सेड; 88 ~ 91 हेह बाइट्स

printf "$(curl -s https://xkcd.com/2048/info.0.json|sed 's/.*"alt": "//;s/", "img":.*//')\n"

Regex JSON पार्सिंग के लिए याय!

EDIT NoLongerBreathedIn ने देखा (भविष्य में 648 दिन!) कि यह \"प्रविष्टि 20 के JSON में अप्रत्याशित होने के कारण पोस्ट 2048 पर विफल रही । रेगेक्स ऊपर अद्यतन किया गया है; यह हुआ करता था sed 's/.*alt": "\([^"]\+\).*/\1/')

printfआवरण बड़े करीने से तथ्य यह है कि यूनिकोड वर्ण में प्रतिनिधित्व कर रहे हैं संभालती \unnnnअंकन:

$ printf "$(curl -s https://xkcd.com/1538/info.0.json | sed 's/.*"alt": "//;s/", "img":.*//')\n"
To me, trying to understand song lyrics feels like when I see text in a dream but it𝔰 hอᵣd t₀ ᵣeₐd aกd 𝒾 canٖt fཱྀcu༧༦࿐༄

 

यह 404 और 859 पदों के साथ विफल रहता है:

404

$ printf "$(curl -s https://xkcd.com/404/info.0.json | sed 's/.*alt": "\([^"]\+\).*/\1/')\n"
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

859

$ printf "$(curl -s https://xkcd.com/859/info.0.json | sed 's/.*alt": "\([^"]\+\).*/\1/')\n"
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;\n$

$उत्पादन के अंत में मेरी शीघ्र है, और सचमुच मुद्रित\n तुरंत पहले यह printf स्ट्रिंग का हिस्सा है।

मैंने जानबूझकर उपयोग किया printfक्योंकि यह यूनिकोड को पार्स करेगा और इस विशिष्ट पद पर बहुत अधिक गिर जाएगा ।


इसके अलावा 2048 पर बारफ्स। मुझे लगता है कि यह डबल कोट्स पर बारफ्स है?
NoLongerBreathedIn

अच्छा पकड़ा। पोस्ट अपडेट की गई। को देखते हुए sedबिट, आप इसके लिए देख रहा था देख सकते हैं alt": "तो पढ़ने जब तक यह एक पाया "। वाह, जाहिरा तौर पर ... (मुझे आश्चर्य है कि इनमें से कितने समाधान e̲̺̗̱̬v apparentlyer̶͎y̦ ͓͜s̡i͖̙̝̦n҉̟̜g҉̟̜l͎̠̹̪͈͉͚͟e̩͙̙̣̲͕͘ ̴͎͉̳̮a̢͕l̯̦̮̥̺̱̤t̕ ͕̮̪̙̬̲̪͘t̰͙̘̪̼ͅex̺͕͍͔̠̮ͅt̪͔̀ ? P)
i336_

4

पायथन 2 , 115 106 बाइट्स

-8 बाइट्स ओव्स के लिए धन्यवाद। -1 जोनाथन एलन को धन्यवाद।

बस मैंने सोचा कि मैं वहाँ एक मानक पुस्तकालय उत्तर रखूँगा।

lambda n:[json.load(urllib.urlopen('http://xkcd.com/%d/info.0.json'%n))['alt']][n==859]
import urllib,json

1
lambda n:[json.load(urllib.urlopen('https://xkcd.com/%d/info.0.json'%n))['alt']][n==859]-8 बाइट्स के लिए।
अंडा

1
http://एक बाइट को बचाने के साथ काम करना चाहिए ।
जोनाथन एलन

4

बैश + कर्ल + jq: 73 66 बाइट्स

सबसे छोटा उत्तर जो एक 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अजगर के बराबर है , और हम |notकिसी भी सही मूल्य को गलत मानने के लिए उपयोग करते हैं, इसलिए दूसरा //प्रिंट कर सकता है.alt


2

जावास्क्रिप्ट (ईएस 6), 177 175 बाइट्स

p=(x)=>{eval(`console.log("${x.alt}")`)};f=(y)=>{var d=document,e=d.createElement("script");e.src=`//dynamic.xkcd.com/api-0/jsonp/comic/${y}?callback=p`;d.body.appendChild(e)}}

इसे अपने ब्राउज़र कंसोल में पेस्ट करें, फिर निष्पादित करें f(859)या f(404)आदि - उन दोनों को कंसोल में त्रुटि होनी चाहिए, हार्ड कोडित नहीं होने के बावजूद, अन्य प्रदर्शित होते हैं।

थोड़ी देर में पहला पोस्ट, क्षमा करें यदि यह नियमों को पूरा नहीं करता है ...!


के x=>बजाय का उपयोग करें (x)=>
user75200

2

PHP, 160 बाइट्स

<? preg_match_all('/(tle=\")(.+)(\")\sa/',join(0,file('http://xkcd.com/'.$argv[1])),$a);echo(strstr($c=$a[2][0],'Brains asid'))?$b:html_entity_decode($c,3);

रुको ... यह कल्पना नहीं है। फिक्सिंग ...
केविन_किंसी

फिक्स्ड। हालांकि लगभग 50 बाइट्स जोड़ना था: ...:
केविन_किंसी

1
आप इको को हटाकर 7 सीएच को हटा सकते हैं और $ c
असाइनमेंट को रूट के

1
@BetaDecay इनपुट नंबर की जाँच नहीं करने के कारण अतिरिक्त अंक देता है
Einacio

1
@ BetaDecay अच्छी तरह से, एक स्क्रिप्ट जो सामग्री पर निर्भर करती है, मुझे खराब लिखी हुई लगती है। इस तरह से शुरू होने वाला कोई भी अन्य शीर्षक इसे तोड़ देगा। केविन_किंसे की जगह आप ENT_QUOTES को बदल सकते हैं = 3
Einacio

1

पर्ल, 129 167 बाइट्स

use LWP::Simple;use HTML::Entities;print decode_entities($1)if(get("http://www.xkcd.com/$ARGV[0]")=~m/text: ([^<]*)\}\}<\/div>/)

संपादित करें: मानस वास्तव में यह है

use LWP::Simple;use HTML::Entities;$x=$ARGV[0];if($x==404||$x==859){die}else{print decode_entities($1)if(get("http://www.xkcd.com/$x")=~m/text: ([^<]*)\}\}<\/div>/)}

HTML डिकोडिंग और HTTP एक्सेसिंग आयात करें, फिर में (...) से मेल खाते समूह को प्रिंट करें

{{Title text: (...)}}</div>

( {{Title क्वेरी से चूक कर थोड़ी बचत )

404 और 859 के लिए, मृत्यु।


"ठीक से हैंडल 859" से आपका क्या मतलब है?
बीटा डेके

@BetaDecay यह
archaephyrryx

1
the program must throw an error when given the numbers 859 or 404
बीटा दायक

के रूप में परिभाषित "एक त्रुटि फेंक" क्या है?
अर्चेफायर्रीक्स

NVM dieकम है पर्याप्त
archaephyrryx

1

BASH, 111 108 बाइट्स

a = $ (बिल्ली) कर्ल-एस https://xkcd.com/ $ a / | grep -oP '((<= टेक्स्ट टेक्स्ट:) ([^}}] *]' [$ a = 404] && echo "$ एक नहीं मिला"

a=#;curl -s https://xkcd.com/$a/ |grep -oP '(?<=Title text:)([^}}]*)';[ $a = 404 ] && echo "$a not found"


चलाने के लिए:
# कॉमिक की संख्या में परिवर्तन करें। कमांड लाइन से चलाएं।

धन्यवाद @ सुझाव के लिए!


कमांड लाइन से $ 1 का उपयोग करने के बजाय बिल्ली का उपयोग करके मानक इनपुट से पढ़ना क्यों? यह कुछ बाइट्स को बचा लेगा ...
Ale

1

जावास्क्रिप्ट (ईएस 6), 118 96 94 बाइट्स

f=n=>fetch(`//xkcd.com/${n}/info.0.json`).then(x=>x.json()).then(y=>eval(`alert('${y.alt}')`))

आप अपने ब्राउज़र कंसोल में पेस्ट कर सकते हैं और चला सकते हैं f(123)। लेकिन ऐसा उस पेज पर करें जो पहले से ही xkcd.com पर है या फिर आपको एक CORS त्रुटि दिखाई देगी।

404 के लिए, इसके साथ विफल:

निर्विरोध (वादा में) सिंटेक्स एरर: अप्रत्याशित 0 में स्थिति JSON में टोकन <

859 के लिए, इसके साथ विफल:

तर्क सूची के बाद अप्रकाशित (वादे में) वाक्य रचना: गायब)

अद्यतन: अंतिम संस्करण ठीक से 859 के लिए जाँच करने के बजाय पूरी तरह से पाठ की जाँच करता है और अन्य 2 बाइट्स के शेव करता है।


अफसोस की बात है, यह एपोस्ट्रोफी (जैसे 1084) वाले किसी भी टाइटलटैक्स पर विफल रहता है।
22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.