একটি ত্রুটিযুক্ত এক্সকেসিডি ব্রাউজার তৈরি করুন


75

চ্যালেঞ্জ

একটি এক্সকেসিডি কমিকের নম্বর দেওয়া, সেই কমিকের শিরোনাম পাঠ্যকে আউটপুট (মাউসওভার পাঠ্য)।

তবে অনুষ্ঠানটি কি যখন সংখ্যার দেওয়া একটি ত্রুটি নিক্ষেপ আবশ্যক 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."

ইউআরএল শর্টনারগুলি অনুমোদিত নয়। শিরোনামের পাঠ্য পেতে আপনি ইন্টারনেট ব্যবহার করতে পারেন।

উদাহরণ

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 এ ব্যর্থ হয় কারণ এটি সংখ্যাটির জন্য অনুসন্ধানের পরিবর্তে খারাপ লেখা হয়।

আপনার প্রোগ্রামটি অন্য আল পাঠগুলিতে বিভক্ত হতে পারে (যেমন 4৪৪) তাদের সাথে মেলে না এমন প্রথম বন্ধনী, উদ্ধৃতি চিহ্ন ইত্যাদি providing

জয়লাভ

বাইটস মধ্যে সংক্ষিপ্ত কোড।


2
যেহেতু স্ক্রিপ্ট-ব্রেকিং ওয়েল পাঠ্যগুলির সাথে অন্যান্য কমিক রয়েছে (দেখুন 744 ), কোনও প্রোগ্রামও যদি সেগুলি ভেঙে যায় তবে তা ঠিক?
সম্পূর্ণরূপে

8
@ টোটালিহুমান আপনার এতে সামান্য-এনএসএফডাব্লু-সতর্কতা যুক্ত করা উচিত ছিল: পি
হাইপার নিউট্রিনো

11
প্রতিদ্বন্দ্বিতায় দ্বন্দ্ব: "ছাড়া অন্য সংখ্যার জন্য একটি ত্রুটি নিক্ষেপ না 859বা 404এবং" অন্যান্য Alt গ্রন্থে উপর ভঙ্গ করতে পারে ""।
aschepler

3
@ এস্পেপলার পরেরটি কেবল অনুগ্রহের জন্য
বিটা

4
@ কেজকাই ভাল প্রশ্ন, তবে আমি মনে করি আপনি কোনও ডিডিওএসে কতটা ট্র্যাফিক জড়িত, এবং ইতিমধ্যে xkcd.com কতটা ট্র্যাফিক জড়িত তা আপনি কিছুটা হ্রাস পেয়েছেন be আমি উত্তরগুলি থেকে উত্পন্ন ট্র্যাফিকের যে কোনওটির তুলনায় তা উল্লেখযোগ্য হবে আশা করব না।
ট্রাইকোপ্লাক্স

উত্তর:


107

পাইথন 2.7 + এক্সকেসিডি , 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
প্যাকেজটি এই চ্যালেঞ্জের আগে লেখা হয়েছিল এবং বিশেষভাবে এই চ্যালেঞ্জের জন্য লেখা হয়নি , এটি কেবলমাত্র অত্যন্ত উপযুক্ত হয়ে শেষ হয় ।
ড্রাকো 18s

4
বাহ, পাইথন আরও আকর্ষণীয় হয়ে উঠেছে!
নাট


6
কাকতালীয়ভাবে, পাইথন প্রকৃতপক্ষে import'আইএনজি'কে সমর্থন করে antigravity
তবুও অন্য একজন ব্যবহারকারী

39
পাইথন কি কেবল গণিতকে এই চ্যালেঞ্জ জানায়?
আর্কটরাস

22

পাইথন 2 + অনুরোধ , 104 102 95 94 বাইট

-২ বাইটস এরিক দি আউটগলফারকে ধন্যবাদ। -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যাইহোক ব্যর্থ হয়।
musicman523

7
... http://এখানেও ব্যবহার করা যেতে পারে, আমার ধারণা।
জোনাথন অ্যালান

1
আপনি কীভাবে এটি প্যারামিটার দিয়ে চালাবেন? লাইক, আপনি কীভাবে নামহীন লাম্বদা চালাবেন?
মিঃজান্ডার

1
@ মিঃজান্ডার প্রথম লাইনটি একটি বেনাম ল্যাম্বডা যা চালানোর জন্য একটি ভেরিয়েবলকে বরাদ্দ করা যেতে পারে। উদাহরণস্বরূপ, উভয় f = lambda n: n * 2; print f(2)বা (lambda n: n * 2)(2)4 মুদ্রণ করবে
সম্পূর্ণরূপে

18

পাইথন 2 + এক্সকেসিডি, 82 বাইট

দুর্বল লিখিত স্ক্রিপ্ট

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

সংযোজন এবং প্রিপেন্ডস ''', যা পাঠ্য '''না থাকলে, ভাঙবে না, এমনকি অন্যান্য উদ্ধৃতি চিহ্নগুলির জন্য। এটি হ'ল পাঠ্যটিতে রয়েছে ;;যা বাদ দিয়ে '''(মুছে ফেলা re)। এটি কেবলমাত্র এর জন্য প্রযোজ্য 859এবং সুতরাং এই কোডটি ব্রেক হয় 859। : P: P

এছাড়াও, কারওর মতো evalএলোমেলোভাবে ইন্টারনেট সামগ্রী থাকা উচিত নয় , কারণ যদি xkcd.getComic(n).altTextকোনওরকম হয়ে '''+__import__('os').system('rm -rf / --no-preserve-root')+'''যায় তবে এটি অনেকগুলি খারাপ জিনিস ঘটায়। যেমন আপনি কম্পিউটারে নন-সুডোর মাধ্যমে অ্যাক্সেসযোগ্য সমস্ত কিছু মুছে ফেলা হবে, যদি না আপনি সুডোতে কোডগল্ফ প্রোগ্রাম পরিচালনা করেন (প্রস্তাবিত নয়): পি


1
দুর্বলভাবে লিখিত এবং সেই পরীক্ষার ক্ষেত্রে ব্যর্থ হয় , 859? কেউ অনুগ্রহ পেতে চলেছে, আমি মনে করি ...
মিঃ এক্সকডার

12
ইন্টারনেট থেকে এলোমেলো কন্টেন্ট বিভক্ত করার জন্য আহা - ব্রাভো! : পি
লূক ব্রিগস 0

@ লুকব্রিগস এটি তাত্ত্বিকভাবে নিরাপদ হওয়া উচিত ... মানে আমার কম্পিউটারটি এখনও বিস্ফোরিত হয়নি ( তাই) সুতরাং এটি ঠিক আছে, তাই না? : পি তবে বিকল্প হিসাবে আপনি যদি সত্যিই চাইতেন তবে আপনি তার __import__('ast').literal_evalজায়গায় ব্যবহার করতে পারেন eval: পি
হাইপার নিউট্রিনো

এটি কি 744 এ ভেঙে যায়?
ড্রাকো 18s

@ Draco18s এটা উচিত নয়, কারণ ট্রিপল কোট মেলেনি কোট যত্ন সম্পর্কে না, এবং সেখানে কোন ;;
হাইপারনিউটারিনো

11

ওল্ফ্রাম ভাষা / গণিত, 118 117 বাইট

সংখ্যাজনিতকে একটি বাইট ধন্যবাদ সংরক্ষণ করে

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

ব্যাখ্যা:

StringTemplateইনপুট থেকে URL গঠন করতে ব্যবহার করুন।

Import[..., "RawJSON"]JSON অবজেক্টটি আমদানি করে এবং এটিকে পার্স করে Assocation

কীটির জন্য মানটি নির্বাচন করুন "alt"

এই ফলাফলটি নিন এবং স্ট্রিংটিকে এইচটিএমএল ( 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. জন্য চেক (প্রশ্নে খয়রাত শর্ত দেখুন) করার দরকার নেই
বিটা ক্ষয়

@ জুলিয়ানওল্ফ আমি ১১.১.০ ব্যবহার করছি। আমি মনে করি 10.2 তে "RawJSON" সমর্থন যুক্ত হয়েছিল।
chuy

4
@ টোটালিহুমান এটি একটি সুস্পষ্ট চেক করে না, তবে ImportString[#,"HTML"]কিছুটা এটাই।
chuy

1
পছন্দ করুন বিশ্বাস করতে পারছি না যে আমি মিস করেছি, ধন্যবাদ!
chuy

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

পিএইচপি, 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

@ জার্গহেলসারম্যান ধন্যবাদ! আমি _ সম্পর্কে জানতাম না। gn আরগান যদিও কাজ করছে বলে মনে হচ্ছে না।
জ্যারেড মেলান্টাইন

php.net/manual/en/features.commandline.options.php $argn উপলভ্য যদি আপনি কমান্ড লাইন থেকে পিএইচপি -Rবা -Fবিকল্পের
সাহায্যে চালনা করেন

_NULLপিএইচপি এর সমতুল্য নয় । এই স্ক্রিপ্টটি _একটি সংজ্ঞায়িত ধ্রুবক হওয়া সম্পর্কে ত্রুটি ছুড়ে ফেলে ।
অ্যান্ডি

@ অ্যান্ডি যদি কোনও নোটিশ অনুমোদিত না হয় তবে এর ""চেয়ে ভাল বিকল্প NULLহ'ল এখানে জারেড $argn কোডগলফের
জার্গ হালসারম্যান

5

পিএইচপি 5.3, 280 268 262 261 180 বাইট


রোমান গ্রাফের কিছু পরামর্শের জন্য ১১ টি ধন্যবাদ
সংরক্ষিত ২. https এর পরিবর্তে HTTP লিঙ্কটি ব্যবহার করে 1 বাইট সংরক্ষণ করা হয়েছে
3. কেভিন_কিনসে ধন্যবাদ আরও 6 বাইট সংরক্ষণ করেছেন
4. অ্যান্ডির পরামর্শের সাথে আরও 1 বাইট সংরক্ষণ করা হয়েছে
5. একটি বড় সংশোধন:

  • @ পরিবর্তে পরিবর্তিত ত্রুটিগুলি দমন করে libxml_use_internal_errors
  • ব্যবহৃত implode(0,file(""))পরিবর্তে file_get_contents("")(2 বাইটস)
  • $xভিতরে সংজ্ঞা স্থানান্তরিতif
  • throw 0আসলে একটি ব্যতিক্রম ছোঁড়ার পরিবর্তে ব্যবহার করা (এটি প্রোগ্রামটি ক্র্যাশ করে)
  • সঙ্গে @আমি এখন বাদ পারেন comicLinkপ্রতিস্থাপন করুন।


গল্ফ করার আমার প্রথম চেষ্টা

ডোমডোকামেন্ট বিরতি দেয় যখন ডাবুল আইডি কমিকলিংকের মুখোমুখি হয় তাই আমাকে এগুলি সরিয়ে ফেলতে হয়েছিল। এটি করার একটি দুর্দান্ত উপায় সম্ভবত আছে।

নম্বর পাওয়ার চেষ্টা করার সময় ক্র্যাশ হয়। 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
পিপিসিজিতে আপনাকে স্বাগতম! আমি মনে করি আপনি $x==404404 প্রতিক্রিয়াতে অন্য কোডটি ব্যর্থ হবে কিনা আপনি পরীক্ষাটি সরিয়ে ফেলতে পারেন ... এছাড়াও আপনি throw new Exceptionএকটি dieকল দ্বারা প্রতিস্থাপন করতে পারেন এবং চারপাশের বন্ধনীগুলি সরাতে পারেন throw new Exception("")/ dieকারণ এটি কেবলমাত্র একটি বিবৃতি
রোমান গ্রাফ

1
ধন্যবাদ! আমি নিশ্চিত ছিলাম না যে মারা () "ত্রুটি নিক্ষেপ" হিসাবে গণনা করবে;)
এজেনিস

1
LibxML_use_intern_erferences এ 'সত্য' এর পরিবর্তে "1" ব্যবহার করুন। আপনি সম্ভবত ব্যতিক্রম 0 এ পাস করতে পারেন এবং একটি মূল্য সমতুল্য সংরক্ষণ করতে পারেন। বন্ধ?> Alচ্ছিক হওয়া উচিত।
কেভিন_কিনসে

ভেরিয়েবল উদ্ধৃতি চিহ্ন ভিতরে ইন্টারপোলেট, তাই "http://xkcd.com/".$xহতে পারে "http://xkcd.com/$x"এক বাইট সংরক্ষণ :)
অ্যান্ডি

আমার কুৎসিত
রেগেক্স

5

পাইথন + এক্সকেসিডি , 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"

রিজেেক্স জেএসএন পার্সিংয়ের জন্য হ্যাঁ!

সম্পাদনা NoLongerBreathedIn লক্ষ্য করেছেন (ভবিষ্যতে 648 দিন!) \"যে এন্ট্রি এর 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": "তখন এটি না পাওয়া অবধি পড়া "। ওফস, আপাতদৃষ্টিতে ... (আমি অবাক হয়ে দেখি যে এই সমাধানগুলির মধ্যে কতগুলিই ইভাজারিওজিলিটিজিলিটিস ইন্টিজিটের ইউনিট পরীক্ষায় ব্যর্থ হবে ?: পি)
i336_

4

পাইথন 2 , 115 106 বাইট

-8 বাইট ovs ধন্যবাদ। -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 বাইট জন্য।
ovs

1
http://খুব বেশি বাইট সাশ্রয় করে কাজ করা উচিত।
জোনাথন অ্যালান

4

বাশ + কার্ল + জকি: 73 66 বাইট

একটি সংক্ষিপ্ত উত্তর যা কোনও xkcd- নির্দিষ্ট লাইব্রেরি ব্যবহার করে না। জেকিউ শেলের মধ্যে জসন অবজেক্টগুলি পরিচালনা করার জন্য একটি সরঞ্জাম এবং এটি করার জন্য এটি পার্সিংয়ের ভাষাতে সম্পূর্ণ আসে।

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

জাভাস্ক্রিপ্ট (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)=>
ব্যবহারকারী 75200

2

পিএইচপি, 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
প্রতিধ্বনিটি সরিয়ে আপনি সাতটি অক্ষর মুছে ফেলতে পারেন এবং সাবস্ট্রারের অভ্যন্তরে assign সি বরাদ্দ করতে পারেন
আইনসিও

1
@ বেটাডেকে কারণ ইনপুট নম্বরটি পরীক্ষা না করা অতিরিক্ত পয়েন্ট দেয়
আইনাসিও

1
@ বেটাডেহে ওয়েল, একটি লিপি যা সামগ্রীতে নির্ভর করে তা আমার কাছে খারাপ লেখা থাকে। এর মতো শুরু হওয়া অন্য কোনও শিরোনাম এটি ভেঙে দেবে। কেভিন_কিনসে আপনি ENT_QUOTES এর মান = 3 দ্বারা প্রতিস্থাপন করতে পারেন
আইনাসিও

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>/)}

এইচটিএমএল ডিকোডিং এবং এইচটিটিপি অ্যাক্সেসিং আমদানি করুন, তারপরে (...) এর সাথে মিলে থাকা গ্রুপটি মুদ্রণ করুন

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

( {{Title ক্যোয়ারী বাদ দিয়ে কিছুটা সাশ্রয় করে )

404 এবং 859 এর জন্য, মৃত্যু।


"859 সঠিকভাবে পরিচালনা করে" বলতে কী বোঝ?
বিটা ক্ষয়

@ বেটাডেএ এটি প্রকৃত আল-টেক্সট প্রিন্ট করে
30-30

1
the program must throw an error when given the numbers 859 or 404
বিটা ক্ষয়

"ত্রুটি নিক্ষেপ" কি হিসাবে সংজ্ঞায়িত করা হয়?
archaephyrryx

এনভিএম dieযথেষ্ট সংক্ষিপ্ত
archaephyrryx

1

বেস, 111 108 বাইট

a = $ (বিড়াল) কার্ল -s https://xkcd.com/ $ a / | গ্রেপ -ओপি '(? <<শিরোনাম পাঠ্য:) ([^}}] *)' [$ a = 404] && প্রতিধ্বন "found একটি পাওয়া যায় না"

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


চালানোর জন্য:
কমিকের সংখ্যায় # পরিবর্তন করুন। কমান্ড লাইন থেকে চালান।

পরামর্শের জন্য সমস্ত @ ধন্যবাদ!


কমান্ড লাইন থেকে $ 1 ব্যবহারের পরিবর্তে কেন বিড়াল ব্যবহার করে স্ট্যান্ডার্ড ইনপুট থেকে পড়া? এটি কিছু বাইট সংরক্ষণ করতে পারে ...
এলে

1

জাভাস্ক্রিপ্ট (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 এ থাকা একটি পৃষ্ঠায় এটি করুন বা অন্যথায় আপনি একটি কর্ন ত্রুটি দেখতে পাবেন।

404 এর জন্য এটি এতে ব্যর্থ হয়:

আনকচড (প্রতিশ্রুতিতে) সিনট্যাক্স এরির: অপ্রত্যাশিত টোকেন <জেএসএনে 0 পজিশনে

859 এর জন্য এটি এতে ব্যর্থ হয়:

আর্গুমেন্ট তালিকার পরে আনকচড (প্রতিশ্রুতিতে) সিনট্যাক্সেরর: নিখোঁজ

আপডেট: সর্বশেষতম সংস্করণটি ঠিক 859 পরীক্ষা করার পরিবর্তে ওয়েল টেক্সটটি সঠিকভাবে পরীক্ষা করে এবং আরও 2 বাইট শেভ করে।


দুঃখের বিষয়, এটি কোনও অ্যাডাস্ট্রোফ (উদাহরণস্বরূপ 1084) ধারণকারী কোনও শিরোনামে ব্যর্থ।
ETH প্রোডাকশনগুলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.