สร้าง XKCD Browser ที่ผิดพลาด


75

ท้าทาย

กำหนดจำนวนการ์ตูน XKCD ส่งออกชื่อข้อความของการ์ตูนนั้น (ข้อความตัวพิมพ์ใหญ่)

แต่โปรแกรมจะต้องโยนความผิดพลาดเมื่อได้รับตัวเลขหรือ859404

กฎระเบียบ

จำนวนที่ให้จะเป็นการ์ตูนที่มีอยู่เสมอ (ยกเว้น404)

โปรแกรมของคุณจะต้องไม่โยนความผิดพลาดสำหรับตัวเลขอื่น ๆ ที่ไม่ใช่หรือ859404

สำหรับการอ้างอิงการ์ตูน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 เพราะเขียนไม่ดีแทนที่จะตรวจสอบหมายเลข

โปรแกรมของคุณอาจแตกต่างจากข้อความ alt อื่น ๆ (เช่น 744) หากมีวงเล็บที่ไม่ตรงกันเครื่องหมายคำพูด ฯลฯ

การชนะ

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


2
เนื่องจากมีหนังสือการ์ตูนเล่มอื่น ๆ ที่มีข้อความ alt แบ่งสคริปต์ (ดู744 ) มันไม่เป็นไรถ้ารายการหยุดพักเช่นกัน?
มนุษย์โดยรวม

8
@tallyallyhuman คุณควรจะเพิ่มคำเตือน NSFW เล็กน้อย: P
HyperNeutrino

11
ความขัดแย้งในการท้าทาย: "ต้องไม่โยนข้อผิดพลาดสำหรับตัวเลขอื่นใดที่ไม่ใช่859หรือ404" และ "อาจแตกในข้อความ alt อื่น ๆ "
aschepler

3
@aschepler ส่วนหลังมีไว้สำหรับเงินรางวัลเท่านั้น
Beta Decay

4
@Kzqai คำถามที่ดี แต่ฉันคิดว่าคุณอาจดูถูกดูแคลนเล็กน้อยเกี่ยวกับปริมาณการใช้งานที่เกี่ยวข้องใน DDOS และปริมาณการใช้งานที่ xkcd.com มีอยู่แล้ว ฉันไม่คาดหวังว่าการเข้าชมที่เกิดขึ้นจากคำตอบที่นี่จะมีนัยสำคัญเมื่อเทียบกับคำตอบใด ๆ
trichoplax

คำตอบ:


107

Python 2.7 + xkcd , 55 ไบต์

xkcdเป็นแพ็คเกจ Python ของบุคคลที่สาม ใน Python มีแพ็คเกจสำหรับทุกสิ่ง !

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
แพคเกจถูกเขียนขึ้นก่อนการท้าทายนี้และไม่ได้ถูกเขียนขึ้นมาโดยเฉพาะสำหรับความท้าทายนี้มันจบลงด้วยการมีความเหมาะสมสูง
Draco18s

4
ว้าว Python น่าดึงดูดยิ่งขึ้น!
Nat


6
หลามสนับสนุนโดยimportอิงกับantigravityจริง ๆ
ยังมีผู้ใช้อื่น

39
Python เป็นเพียง Mathematica ความท้าทายนี้หรือไม่?
Arcturus

22

งูหลาม 2 + จอง , 104 102 95 94 ไบต์

-2 ไบต์ขอบคุณ Erik the Outgolfer -1 ไบต์ขอบคุณ Jonathan Allan

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ได้
Erik the Outgolfer

1
คุณสามารถเปลี่ยนn in[404,859]ไปn==859เพราะถอดรหัส JSON ล้มเหลว404อยู่แล้ว
musicman523

7
... ฉันhttp://สามารถใช้ที่นี่ได้เช่นกัน
Jonathan Allan

1
คุณจะเรียกใช้พารามิเตอร์ได้อย่างไร? เช่นคุณจะเรียกแลมบ์ดานิรนามได้อย่างไร
MrZander

1
@MZZander บรรทัดแรกเป็นแลมบ์ดานิรนามที่สามารถกำหนดให้กับตัวแปรที่จะเรียกใช้ ตัวอย่างเช่นทั้งสองf = lambda n: n * 2; print f(2)หรือ(lambda n: n * 2)(2)จะพิมพ์ 4
มนุษย์

18

Python 2 + xkcd, 82 ไบต์

สคริปต์ที่เขียนไม่ดี

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

ผนวกและเติม'''ซึ่งนอกเหนือจากข้อความที่มี'''จะไม่ทำลายแม้สำหรับเครื่องหมายคำพูดอื่น ๆ นั่นคือยกเว้นถ้าข้อความมี;;ซึ่งจะถูกแทนที่ด้วย'''(กำจัดre) นี้จะใช้สำหรับการและทำให้รหัสนี้แบ่งบน859 859: P

นอกจากนี้หนึ่งไม่ควรevalสุ่มเนื้อหาอินเทอร์เน็ตเพราะถ้าxkcd.getComic(n).altTextอย่างใดกลายเป็น'''+__import__('os').system('rm -rf / --no-preserve-root')+'''มันจะทำให้เกิดสิ่งเลวร้ายมากมายที่จะเกิดขึ้น คือมันจะลบทุกอย่างที่ไม่ใช่ sudo ที่เข้าถึงได้บนคอมพิวเตอร์เว้นแต่คุณจะเรียกใช้โปรแกรม codegolf ใน sudo (ไม่แนะนำด้วย): P


1
เขียนไม่ดีและล้มเหลวสำหรับกรณีทดสอบว่า859? มีใครบางคนกำลังจะได้รับรางวัลฉันคิดว่า ...
นาย Xcoder

12
อ้าการประจบประแจงเนื้อหาแบบสุ่มจากอินเทอร์เน็ต - ไชโย! : P
Luke Briggs

@LukeBriggs มันในทางทฤษฎีควรจะปลอดภัย ... ผมหมายถึงคอมพิวเตอร์ของฉันยังไม่ระเบิด ( เลย ) ดังนั้นจึงควรจะปรับใช่มั้ย? : P แต่คุณสามารถใช้__import__('ast').literal_evalแทนevalถ้าคุณต้องการจริงๆ: P
HyperNeutrino

มันทำลาย 744 หรือไม่?
Draco18s

@ Draco18s ;;มันไม่ควรเพราะคำพูดที่สามไม่สนใจเกี่ยวกับคำพูดที่ไม่ตรงกันและไม่มี
HyperNeutrino

11

ภาษา Wolfram / Mathematica, 118 117 ไบต์

บันทึกไบต์ด้วยตัวเลขแบบแมนนวล

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 JSONบน 10.0.1
Julian Wolf

@Totallyhuman เอ่อมันคงไม่จำเป็นต้องตรวจสอบ 859 (ดูเงื่อนไขรางวัลในคำถาม)
Beta Decay

@JulianWolf ฉันใช้ 11.1.0 ฉันคิดว่ามีการเพิ่มการสนับสนุน "RawJSON" ใน 10.2
chuy

4
@tallyallyhuman มันไม่ได้ตรวจสอบอย่างชัดเจน แต่นั่นคือสิ่งที่ImportString[#,"HTML"]เป็นเรื่องเล็กน้อย
chuy

1
@ ตัวเลขช่างแน่นอนฉันทำได้ ไม่อยากจะเชื่อว่าฉันพลาดไปแล้วขอบคุณ!
chuy

8

Java 8, 255 176 ไบต์

ขอบคุณ @ OlivierGrégoireที่ทำให้ฉันรู้สึกเหมือนคนงี่เง่าและลดลง 79 ไบต์ ;)

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

มันให้ความรู้สึกหนักเกินไป ...ยังหนักอยู่ แต่ "โอเค" สำหรับ 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("\".*","") ลบทุกอย่างยกเว้นข้อความ alt (จนถึงเครื่องหมายคำพูดคู่แรก)
  • ผลตอบแทนโดยปริยาย

วิธีที่สั้นกว่าอย่างอื่น, Java + 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")

นี่ไม่ใช่ทางออกของฉันดังนั้นฉันไม่ต้องการโพสต์สิ่งนี้เป็นอันดับแรก เครดิตทั้งหมดเป็นของ @ OlivierGrégoire


1
การนำเข้าของคุณหายไป! . นอกจากนี้ยังมีเกือบเป็นศูนย์ความพยายามที่จะเล่นกอล์ฟคำตอบนี้ ...
โอลิเวียGrégoire

ที่เพิ่ม ต่ำกว่า 2 ^ 8 อย่างน้อยขนาดของ programm ของฉันพอดีในหนึ่งไบต์ :)
โรมันกราฟ

i->new java.util.Scanner(new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()).useDelimiter("\\a").next().replaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")(176 bytes, ระวังตัวอักขระความคิดเห็นของ SO) และฉันเพิ่งจะเล่นกอล์ฟอะไรที่นี่
Olivier Grégoire

Oh! ฉันคิดว่าScanner#useDelimiterผลตอบแทนเป็นโมฆะ ... ควรอ่านเอกสารในครั้งต่อไป;)
Roman Gräf

1
ฉันเพิ่งสังเกตเห็นว่าคุณสามารถสร้างFunctionชั้นเรียนของคุณเองที่อนุญาตให้คุณโยนข้อยกเว้น .. วันนี้ไม่ใช่วันของฉัน
Roman Gräf

7

PHP, 89 86 85 ไบต์

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

ส่งคืนค่า null สำหรับ 404 และ 859

บันทึกเป็น xkcd.php และเรียกใช้ด้วยหมายเลขการ์ตูน ...

$ php xkcd.php 386

ใช้$argnแทน$argv[1], _แทนNULL
JörgHülsermann

@ JörgHülsermannขอบคุณ! ฉันไม่รู้เกี่ยวกับ _ $ argn ดูเหมือนจะไม่ทำงาน
Jared Mellentine

php.net/manual/en/features.commandline.options.php $argnพร้อมใช้งานถ้าคุณเรียกใช้ PHP จากบรรทัดคำสั่งด้วยตัวเลือก-Rหรือ-Fตัวเลือก
JörgHülsermann

_ไม่เท่ากับNULLใน PHP สคริปต์นี้ส่งข้อผิดพลาดเกี่ยวกับ_การเป็นค่าคงที่ไม่ได้กำหนด
Andy

@Andy หากไม่อนุญาตให้มีการแจ้งเตือนเป็น""ทางเลือกที่ดีกว่าเนื่องจากNULLJared นี่เป็นตัวอย่างสำหรับ$argn codegolf.stackexchange.com/questions/114146/ …
JörgHülsermann

5

PHP 5.3, 280 268 262 261 180 ไบต์


1. บันทึก 11 คำขอบคุณจากคำแนะนำของ Roman Gräf
2. บันทึก 1 ไบต์โดยใช้ลิงก์ http แทน https
3. บันทึกอีก 6 ไบต์ขอบคุณ Kevin_Kinsay
4. บันทึกอีก 1 ไบต์พร้อมคำแนะนำของ Andy
5. การแก้ไขที่สำคัญ:

  • ระงับข้อผิดพลาดด้วย @ แทนการเปลี่ยนแปลง libxml_use_internal_errors
  • ใช้implode(0,file(""))แทนfile_get_contents("")(2 ไบต์)
  • ย้าย$xคำจำกัดความภายในif
  • การใช้งานthrow 0แทนที่จะใช้ข้อผิดพลาดจริง ๆ (ทำให้โปรแกรมขัดข้อง)
  • ด้วย@ตอนนี้ฉันสามารถละเว้นการcomicLinkแทนที่


ความพยายามครั้งแรกของฉันในการเล่นกอล์ฟ

DOMDocument หยุดพักเมื่อพบ dobule 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เพราะมันเป็นเพียงคำสั่งเดียว
Roman Gräf

1
ขอบคุณ! ฉันไม่แน่ใจว่าตาย () จะนับเป็น "โยนข้อผิดพลาด";)
Ezenhis

1
ใช้ "1" แทน 'true' บน libxml_use_internal_errors คุณสามารถส่งผ่าน 0 ถึงข้อยกเว้นและบันทึกการเสนอราคาหนึ่งรายการที่เทียบเท่า ควรปิดตัวเลือก>>
Kevin_Kinsey

ตัวแปรที่จะสอดแทรกอยู่ในเครื่องหมายเพื่อให้"http://xkcd.com/".$xสามารถกลายเป็น"http://xkcd.com/$x"ประหยัดหนึ่งไบต์ :)
แอนดี้

BTW, +1 สำหรับการใช้เทคนิคการ "แยกวิเคราะห์" ที่เหมาะสม (ตัวแยกวิเคราะห์ XML) ซึ่งต่างจากแฮ็ก regex ที่น่าเกลียดของฉัน)
Kevin_Kinsey

5

Python + 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)

ฉันเพิ่งสังเกตเห็นสิ่งนี้ กอล์ฟดี!
Beta Decay

5

Python หนึ่งชนะแล้ว แต่ไม่ว่า ...

bash + curl + sed; 88 ~ 91 hehไบต์

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

Yay สำหรับการแยกวิเคราะห์ JSON ของ regex!

แก้ไข NoLongerBreathedIn สังเกตเห็น (648 วันในอนาคต!) ว่าสิ่งนี้ล้มเหลวในการโพสต์ 2048 เพราะไม่คาดคิด\"ใน JSON ของรายการนั้น regex ได้รับการปรับปรุงด้านบน sed 's/.*alt": "\([^"]\+\).*/\1/')ที่มันเคยเป็น

printfกระดาษห่อเรียบร้อยจัดการความจริงที่ว่าตัวอักษร Unicode จะแสดงใน\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เพราะจะแยกวิเคราะห์ Unicode และล้มลงอย่างมากในบทความนี้


ยัง barfs ที่ 2048 ฉันคิดว่า barfs ในคำพูดสองครั้ง?
NoLongerBreathedIn

รับได้สวย. โพสต์อัพเดทแล้ว กำลังมองหาที่sedบิตคุณสามารถเห็นมันได้รับการมองหาแล้วอ่านจนกว่าจะพบalt": " "ดูเหมือนว่า ... (ฉันสงสัยว่าวิธีแก้ปัญหาเหล่านี้จะล้มเหลวในการทดสอบหน่วยของ e̲͕̲̪v̲̺̗̱̬er̶͎y̦ ͖̙̝̦s҉̟̜i͓͜n̡g̸l͎̠̹̪͈͉͚͟e̩͙̙̣̲͕͘ ̴͎͉̳̮a̢͕l̯̦̮̥̺̱̤t̕ ͕̮̪̙̬̲̪͘t̰͙̘̪̼ͅex̺͕͍͔̠̮ͅt̪͔̀?: P)
i336_

4

Python 2 , 115 106 ไบต์

-8 ไบต์ขอบคุณ ovs -1 ไบต์ขอบคุณ Jonathan Allan

แค่คิดว่าฉันจะเอาคำตอบที่ห้องสมุดมาตรฐาน

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 ไบต์
OVS

1
ควรทำงานกับhttp://การบันทึกไบต์ด้วย
Jonathan Allan

4

Bash + curl + jq: 73 66 bytes

คำตอบสั้น ๆ ที่ไม่ได้ใช้ไลบรารีเฉพาะ 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ในไพ ธ อนและเราใช้ a |notเพื่อทำให้ค่าที่แท้จริงใด ๆ ถูกพิจารณาว่าเป็นเท็จดังนั้นที่สอง//สามารถพิมพ์ได้.alt


2

JavaScript (ES6), 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);

รอ ... นี่ไม่ใช่ข้อกำหนด กำลังแก้ไข ...
Kevin_Kinsey

แก้ไขแล้ว. ต้องเพิ่มประมาณ 50 ไบต์ แต่ ... :(
Kevin_Kinsey

1
คุณสามารถลบ 7 chars เพื่อลบ echo และย้าย $ c ที่กำหนดไว้ใน substr
Einacio

1
@BetaDecay เพราะไม่ตรวจสอบหมายเลขที่ป้อนให้คะแนนพิเศษ
Einacio

1
@BetaDecay ดีสคริปต์ที่ขึ้นอยู่กับเนื้อหาที่ดูเขียนไม่ดีกับฉัน ชื่ออื่น ๆ ที่เริ่มต้นเช่นนั้นจะทำให้แตก Kevin_Kinsey คุณสามารถแทนที่ ENT_QUOTES ด้วยค่า = 3
Einacio

1

Perl, 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 อย่างถูกต้อง"?
Beta Decay

@BetaDecay มันพิมพ์ข้อความ alt จริง
archaephyrryx

1
the program must throw an error when given the numbers 859 or 404
Beta Decay

"โยนข้อผิดพลาด" หมายถึงอะไร
archaephyrryx

Nvm dieสั้นพอ
archaephyrryx

1

BASH, 111 108 ไบต์

a = $ (cat) curl -s https://xkcd.com/ $ a / | grep -oP '(? <= ข้อความชื่อ:) ([^}}] *)' [$ a = 404] && echo "$ a ไม่พบ"

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


วิธีเรียกใช้:
เปลี่ยน # เป็นจำนวนการ์ตูน เรียกใช้จากบรรทัดคำสั่ง

ขอบคุณ @Ale สำหรับคำแนะนำ!


ทำไมการอ่านจากอินพุตมาตรฐานโดยใช้ cat แทนที่จะใช้เพียง $ 1 จากบรรทัดคำสั่ง มันจะช่วยประหยัดบางไบต์ ...
Ale

1

Javascript (ES6), 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 มันล้มเหลวด้วย:

Uncaught (ตามสัญญา) SyntaxError: โทเค็นที่ไม่คาดคิด <ใน JSON ที่ตำแหน่ง 0

สำหรับ 859 มันล้มเหลวด้วย:

Uncaught (ในสัญญา) SyntaxError: หายไป) หลังจากรายการอาร์กิวเมนต์

อัปเดต: เวอร์ชันล่าสุดตรวจสอบข้อความ alt แทนการตรวจสอบเพียงแค่ 859 และโกนอีก 2 ไบต์


น่าเศร้าสิ่งนี้ล้มเหลวใน titletext ใด ๆ ที่มีเครื่องหมายอะโพสโทรฟี (เช่น 1,084)
ETHproductions
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.