Herausforderung
Geben Sie unter Berücksichtigung der Nummer eines XKCD-Comics den Titel des Comics aus (den Mouseover-Text).
Das Programm muss jedoch einen Fehler auslösen, wenn die Zahlen 859
oder angegeben werden 404
.
Regeln
Die angegebene Nummer ist immer ein vorhandener Comic (außer 404
).
Ihr Programm darf für keine anderen Zahlen als 859
oder einen Fehler auslösen 404
.
Als Referenz existiert Comic 404
nicht und 859
ist:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
URL-Shorter sind nicht erlaubt. Sie können das Internet verwenden, um den Titeltext zu erhalten.
Beispiele
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.
Kopfgeld
Ich werde eine Prämie für die kürzeste Antwort vergeben, die auf Comic 859 fehlschlägt, weil sie schlecht geschrieben ist, anstatt nach der Nummer zu suchen.
Ihr Programm kann bei anderen Alternativtexten (z. B. 744) unterbrochen werden, sofern diese nicht übereinstimmende Klammern, Anführungszeichen usw. enthalten.
Gewinnen
Kürzester Code in Bytes gewinnt.
859
oder werfen404
" und "darf auf anderen Alternativtexten brechen".Antworten:
Python 2.7 + xkcd , 55 Bytes
xkcd ist ein Python-Paket eines Drittanbieters. In Python gibt es ein Paket für alles !
quelle
import
'ingantigravity
.Python 2 + Requests ,
1041029594 Bytes-2 Bytes dank Erik dem Outgolfer. -1 Byte danke an Jonathan Allan.
Obligatorisch:
Schlecht geschriebenes Skript, 98 Bytes
Schlechte Skripte zu schreiben ist also absichtlich schwierig ... Dies bricht auch bei anderen Comics ab, da sie Anführungszeichen enthalten und nicht sicher sind, ob das in Ordnung ist.
quelle
,a
.n in[404,859]
zun==859
, weil der JSON - Decoder für nicht404
sowieso.http://
kann auch hier verwendet werden, denke ich.f = lambda n: n * 2; print f(2)
oder(lambda n: n * 2)(2)
4.Python 2 + xkcd, 82 Bytes
Schlecht geschriebenes Skript
Anhängen und Voranstellen
'''
, die, sofern der Text'''
nichts anderes enthält , auch bei anderen Anführungszeichen nicht abbrechen. Das heißt, es sei denn, der Text enthält;;
, der durch'''
(eliminierenre
) ersetzt wird. Dies gilt nur für859
und somit bricht dieser Code weiter859
. : PAußerdem sollte man niemals
eval
zufällige Internetinhalte verwenden, da dies inxkcd.getComic(n).altText
irgendeiner Form'''+__import__('os').system('rm -rf / --no-preserve-root')+'''
dazu führen würde, dass viele schlimme Dinge passieren. Es würde nämlich alles löschen, auf das Nicht-Sudo auf dem Computer zugreifen kann, es sei denn, Sie führen Codegolf-Programme in Sudo aus (ebenfalls nicht empfohlen): Pquelle
859
? Jemand wird Kopfgeld bekommen, nehme ich an ...__import__('ast').literal_eval
anstelle von verwenden,eval
wenn Sie wirklich wollten: P;;
.Wolfram Language / Mathematica,
118117 BytesDank numbermanic wurde ein Byte gespeichert
Erläuterung:
Verwenden Sie
StringTemplate
diese Option , um die URL aus der Eingabe zu bilden.Import[..., "RawJSON"]
Importiert das JSON-Objekt und analysiert es in einAssocation
.Wählen Sie den Wert für den Schlüssel
"alt"
.Nehmen Sie dieses Ergebnis und versuchen Sie, den String als HTML (
Import[#,"HTML"]
) zu interpretieren . Wenn dies nichts ändert, lassen Sie das Ergebnis durch, wenn es zurückkehrt$Failed
. Das fängt 859 an weilErgebnisse in:
404 schlägt fehl, weil
Ergebnisse in
$Failed
.quelle
The Import element "RawJSON" is not present when importing as JSON
auf 10.0.1.ImportString[#,"HTML"]
darum geht es in diesem Teil.Java 8,
255176 BytesVielen Dank an @ OlivierGrégoire, dass ich mich wie ein Idiot gefühlt habe und 79 Bytes weg bin. ;)
Das fühlt sich viel zu schwer an ...Immer noch schwer, aber "okay" für Java ...Erläuterung:
i->{...}
Lambda das funktioniert wieString <name>(int i) throws Exception
new java.util.Scanner(...).setDelimiter("\\a").next()
Lesen Sie alles aus dem gegebenenInputStream
new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()
Dadurch wird einInputStream
Text erstellt, der auf den Antworttext verweist, derhttp://xkcd.com/{comic_id}/info.0.json
die Infoseite des gewünschten Comics enthältreplaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
Entfernt alles außer dem Alt-Text (bis zum ersten doppelten Anführungszeichen)Alternativer kürzerer Ansatz, Java + json.org, 150
Dies ist nicht meine Lösung, daher möchte ich dies nicht als erste veröffentlichen. Alle Credits gehören @ OlivierGrégoire.
quelle
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, vorsichtig mit den Kommentar-Cutter-Zeichen des SO) Und ich habe hier kaum etwas golfen.Scanner#useDelimiter
Rücksendung ist ungültig ... Lies besser das nächste Mal die Dokumentation;)Function
Klasse erstellen können , mit der Sie Exception werfen können. Heute ist nicht mein Tag.PHP,
898685 BytesGibt null für 404 und 859 zurück
Als xkcd.php speichern und mit der Comic-Nummer ausführen ...
quelle
$argn
statt$argv[1]
,_
stattNULL
$argn
ist verfügbar , wenn Sie PHP auf der Kommandozeile mit der Option-R
oder der-F
Option_
ist nicht gleichbedeutend mitNULL
in PHP. Dieses Skript gibt den Fehler aus,_
dass es sich um eine undefinierte Konstante handelt.""
ist, ist eine bessere Alternative, daNULL
Jared hier ein Beispiel für$argn
codegolf.stackexchange.com/questions/114146/…PHP 5.3,
280268262261180 Bytes1. 11 dank einiger Vorschläge von Roman Gräf
gespeichert 2. 1 Byte mithilfe von http-Link anstelle von https
gespeichert 3. Weitere 6 Byte dank Kevin_Kinsay gespeichert
4. Weitere 1 Byte mit Andys Vorschlag gespeichert
5. Eine größere Überarbeitung:
libxml_use_internal_errors
implode(0,file(""))
anstelle vonfile_get_contents("")
(2 Bytes)$x
Definition innerhalb derif
throw 0
anstatt eine Ausnahme auszulösen (das Programm stürzt ab)@
ich jetzt dascomicLink
ersetzen weglassen .Mein erster Versuch, Golf zu spielen.
Das DOMDocument bricht ab, wenn es auf dobule ID comicLinks stößt, daher musste ich diese entfernen. Es gibt wahrscheinlich einen schöneren Weg, das zu tun.
Abstürze beim Versuch, nein zu bekommen. 859;)
quelle
$x==404
der andere Code bei der 404-Antwort fehlschlägt ... Sie können ihn auchthrow new Exception
durch einendie
Aufruf ersetzen und die Klammern umthrow new Exception("")
/ entfernen,die
da es sich nur um eine einzelne Anweisung handelt"http://xkcd.com/".$x
kann"http://xkcd.com/$x"
:)Python + xkcd , 54 Bytes
Nachprüfung
quelle
Die Python hat man schon gewonnen, aber egal ...
bash + curl + sed;
88~ 91 heh BytesYay für Regex-JSON-Parsing!
EDIT NoLongerBreathedIn bemerkt (648 Tage in die Zukunft!) , Dass diese auf Pfosten 2048 scheiterte wegen eines unerwarteten
\"
in diesem Eintrag des JSON. Der reguläre Ausdruck wurde oben aktualisiert. früher war es sosed 's/.*alt": "\([^"]\+\).*/\1/')
.Der
printf
Wrapper handhabt ordentlich die Tatsache, dass Unicode-Zeichen in der\unnnn
Notation dargestellt werden:Dies schlägt mit den Pfosten 404 und 859 fehl:
404
859
Das
$
am Ende der Ausgabe ist meine Eingabeaufforderung und das\n
unmittelbar vor der Ausgabe gedruckte Wort ist Teil der printf-Zeichenfolge.Ich habe absichtlich verwendet,
printf
weil es Unicode analysieren und auf diesen bestimmten Beitrag schrecklich fallen würde .quelle
sed
Bit ansehen, können Sie sehen, dass es gesucht undalt": "
dann gelesen hat, bis es einen gefunden hat"
. Woops, anscheinend ... (Ich frage mich, wie viele dieser Lösungen einen Unit-Test von e ofv̲͕̲̪er̲̺̗̱̬y̶͎ ͖̙̝̦s͖̙̝̦i҉̟̜n͓͜g̡l̸e͎̠̹̪͈͉͚͟ ̴͎͉̳̮a̴͎͉̳̮l̢͕t̯̦̮̥̺̱̤ ͕̮̪̙̬̲̪͘t͕̮̪̙̬̲̪͘ex̰͙̘̪̼ͅt̺͕͍͔̠̮ͅ ?: P nicht bestehen würden)Python 2 ,
115106 Bytes-8 bytes dank ovs. -1 Byte danke an Jonathan Allan.
Ich dachte nur, ich würde eine Standardbibliotheksantwort da draußen veröffentlichen.
quelle
lambda n:[json.load(urllib.urlopen('https://xkcd.com/%d/info.0.json'%n))['alt']][n==859]
für -8 Bytes.http://
zu sparenden Byte funktionieren .Bash + Curl + JQ:
7366 BytesKürzeste Antwort, die keine xkcd-spezifische Bibliothek verwendet. jq ist ein Tool zum Manipulieren von json-Objekten in der Shell und wird mit einer Parsing-Sprache geliefert, die dies ermöglicht.
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'
Erweiterung unten:
curl -Ls
- Fragen Sie nach, aber leiten Sie sie gerne weiter (in diesem Fall zur https-Site), und geben Sie keine nicht verwandten Ausgaben aus.xkcd.com/$1/info.0.json
- Schamlos von einer anderen Antwort gestohlen.|jq -r
- Führen Siejq
den folgenden Befehl im Modus "Raw-Ausgabe" aus.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
Jetzt hat das Skript überarbeitet worden zu verwenden ,
//
welche das Äquivalent ista or b
in Python, und wir verwenden ein|not
jeder wahre Wert machen falsch betrachtet werden, so dass der zweite//
kann drucken.alt
quelle
JavaScript (ES6),
177 bis175 ByteFügen Sie dies in Ihre Browserkonsole ein und führen Sie dann
f(859)
oderf(404)
usw. aus. Diese beiden Fehler sollten in der Konsole auftreten, obwohl sie nicht fest codiert sind. Die anderen werden angezeigt.Erster Beitrag seit einiger Zeit, sorry wenn es nicht ganz den Regeln entspricht ...!
quelle
x=>
anstelle von(x)=>
.PHP, 160 Bytes
quelle
Perl,
129167 BytesEDIT: Psyche ist es eigentlich
Importieren Sie die HTML-Dekodierung und den HTTP-Zugriff und drucken Sie dann die Gruppe aus, die der (...) in entspricht
{{Title text: (...)}}</div>
(Ein wenig sparen durch Weglassen
{{Title
der Abfrage)Für 404 und 859 Tod.
quelle
the program must throw an error when given the numbers 859 or 404
die
ist kurz genugBASH,
111108 Bytesa = $ (cat) curl -s https://xkcd.com/ $ a / | grep -oP '(? <= Titeltext:) ([^}}] *)' [$ a = 404] && echo "$ a nicht gefunden"Zum Ausführen:
Ändern Sie # in Nummer des Comics. Führen Sie von der Befehlszeile aus.
Danke @ Ale für den Vorschlag!
quelle
Javascript (ES6),
1189694 BytesSie können das in Ihre Browserkonsole einfügen und ausführen
f(123)
. Tun Sie dies jedoch auf einer Seite, die sich bereits auf xkcd.com befindet, andernfalls wird ein CORS-Fehler angezeigt.Bei 404 schlägt dies fehl mit:
Bei 859 schlägt dies fehl mit:
Update: Die neueste Version überprüft den Alternativtext ordnungsgemäß, anstatt nur nach 859 und Rasuren von weiteren 2 Bytes zu suchen.
quelle