xkcd ist das beliebteste Webcom von allen, und Sie werden ein Programm schreiben, das uns allen ein bisschen mehr Humor bringt.
Ihr Ziel bei dieser Herausforderung ist es, ein Programm zu schreiben, das eine Zahl als Eingabe verwendet und das xkcd und seinen Titeltext (Mauszeigentext) anzeigt.
Eingang
Ihr Programm nimmt eine positive Ganzzahl als Eingabe (nicht unbedingt eine, für die ein gültiger Comic existiert) und zeigt diese xkcd an. Bei einer Eingabe von 1500 sollte beispielsweise die Comic-Datei "Upside-Down Map" unter xkcd.com/1500 angezeigt werden. und dann entweder den Titel-Text auf der Konsole ausdrucken oder zusammen mit dem Bild anzeigen.
Due to their proximity across the channel, there's long been tension between North Korea and the United Kingdom of Great Britain and Southern Ireland.
Testfall 2 für n = 859:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Ihr Programm sollte auch in der Lage sein, ohne Eingaben zu funktionieren und die gleiche Aufgabe für das neueste xkcd auszuführen, das Sie auf xkcd.com finden. Es sollte immer das neueste Programm anzeigen, selbst wenn ein neues auftaucht.
Sie müssen das Bild nicht direkt von xkcd.com beziehen, sondern können eine andere Datenbank verwenden, solange diese aktuell ist und bereits vor dem Beginn dieser Herausforderung vorhanden war. URL-Shortner, dh URLs, die keinen anderen Zweck haben als die Weiterleitung an einen anderen Ort, sind nicht zulässig.
Sie können das Bild auf beliebige Weise anzeigen, auch in einem Browser. Möglicherweise zeigen Sie jedoch nicht direkt einen Teil einer anderen Seite in einem Iframe oder ähnlichem an. ERKLÄRUNG: Sie können keine bereits vorhandene Webseite öffnen. Wenn Sie den Browser verwenden möchten, müssen Sie eine neue Seite erstellen . Sie müssen auch tatsächlich ein Bild anzeigen - die Ausgabe einer Bilddatei ist nicht zulässig.
Sie können den Fall, dass es kein Bild für einen bestimmten Comic gibt (z. B. ist es interaktiv oder das Programm wurde mit einer höheren Anzahl als der Anzahl der veröffentlichten Comics übergeben), auf eine angemessene Weise behandeln, einschließlich des Auslösens einer Ausnahme oder Ausdrucken einer Zeichenfolge mit mindestens einem Zeichen, sofern dies dem Benutzer irgendwie anzeigt, dass für diese Eingabe kein Bild vorhanden ist.
Sie können nur ein Bild anzeigen und dessen Titel-Text ausgeben oder eine Fehlermeldung für einen ungültigen Comic ausgeben. Andere Ausgaben sind nicht erlaubt.
Dies ist eine Code-Golf- Herausforderung, so dass die wenigsten Bytes gewinnen.
import antigravity
in Python;)n=404
xkcd.com/404 eine 404-Seite ist.xkcd is everyone's favorite webcomic
[Zitieren benötigt ]Antworten:
Perl + Curl + Feh,
868475 BytesBenötigt den
-p
Schalter. Ich habe dies in der Byteanzahl berücksichtigt.quelle
?
in der ersten Matchgruppe brauchen . Sie könnten-p
und$_=$2
anstelle von verwendenprint$2
, aber dann wird der Titeltext erst gedruckt, nachdem feh geschlossen wurde. Ich bin mir nicht sicher, ob das gültig ist.-p
, war mir aber nicht sicher, wie sich das OP dabei anfühlen würde.PowerShell v3 +
11099107103 BytesVielen Dank an Timmy für die Unterstützung beim Speichern einiger Bytes mithilfe von Inline-Zuweisungen.
Wenn keine Argumente übergeben werden,
$args
ist der Wert null und es wird nur der aktuelle Comic abgerufen. Laden Sie das Bild herunter, indem Sie es mit dem Alternativtext abgleichen und in eine Datei im aktuellen Ausführungsverzeichnis des Skripts kopieren. Zeigen Sie es dann mit dem Standard-Viewer für JPGs an. Der Alternativtext wird dann der Konsole angezeigt.iwr
ist ein Alias fürInvoke-WebRequest
Wenn die übergebene Nummer (oder eine ungültige Eingabe) nicht übereinstimmt, schlägt der Prozess mit mindestens einem 404-Fehler fehl.
quelle
AutoIt , 440 Bytes
Ja, es ist lang, aber es ist stabil.
Zunächst wird RegEx nicht zum Durchsuchen der Site verwendet (da ich keine Zeit habe, dies auf allen Comics zu testen), sondern es wird die Internet Explorer-API verwendet, um die
img
Tags des DOM zu durchlaufen, bis ein Eintrag mit einem Titeltext gefunden wird.Der Binärdatenstrom wird aus der Bild-URL gelesen und mit GDIPlus in eine Bitmap gerendert. Diese wird dann in einer ansprechenden grafischen Benutzeroberfläche in automatischer Größe mit einem aktuellen Tooltip angezeigt, damit sie sich fast genau wie die Website verhält.
Hier ist ein Testfall (
_(859)
):)
quelle
Powershell, 93 Bytes
93-Byte-Version zur Verwendung des lokalen Bildbetrachters.
Sparte 2 Bytes durch Entfernen unnötiger Anführungszeichen, dann eine weitere Menge durch Verwenden von
("http:"+$n.src)
anstelle von"https://"+$n.src.trim("/")
-, da derimg
src//
bereits darauf enthalten ist und xkcd kein https benötigt.$n=(iwr "xkcd.com/$args").images|?{$_.title};$n.title;saps ("https://"+$n.src.trim("/"))
Sehr ähnlich zu Matts Powershell-Antwort (sollte wahrscheinlich ein Kommentar sein, aber wenig Ansehen)
Stattdessen wird im Standardbrowser eine neue Registerkarte / ein neues Fenster geöffnet, in dem unter anderem einige Bytes gespart werden.
iwr
ist ein Alias fürInvoke-WebRequest
saps
ist ein Alias, fürStart-Process
den 'es' im Standardkontext geöffnet wird.quelle
saps
zuiwr
"-OutF x.jpg; ii x. *" Wechseln und es an das Ende anhängen, wenn Sie möchten, dass es im Standard-Local geöffnet wird Bildbetrachter.R,
358328310298 BytesMit neuen Zeilen und Kommentaren:
Screenshots von Testfällen:
für x = 1500:
für x leer:
Fall, wenn das Bild ein JPEG ist:
x = 859:
quelle
plot.new();rasterImage(...)
.xaxs
und loszuwerden,yaxs
da das Ergebnis immer noch verhältnismäßig wäre.PHP, 95 Bytes
Speichere als main.php, starte den Server
Öffnen Sie http: // localhost: 8123 / main.php? Id = 1500
quelle
Python 2.7,
309299295274 BytesVolles Programm. Auf jeden Fall besser zum Golfen geeignet, aber nachdem ich xkcd-Comics so lange gelesen hatte, konnte ich das nicht zulassen (wer weiß, ob dies in Zukunft hilfreich sein wird, um xkcd einfach zu durchsuchen).
Wenn keine Eingabe übergeben wird, wird der aktuelle Comic abgerufen. Wenn eine gültige Comic-Nummer als Eingabe übergeben wird, wird dieser Comic abgerufen. Wenn eine ungültige Eingabe (kein Zahlencomic im gültigen Bereich) übergeben wird, wird ein Fehler ausgegeben.
Vorschläge zur Reduzierung der Byteanzahl sind willkommen! Ich werde es noch einmal überprüfen (und eine Erklärung hinzufügen), wenn ich mehr Zeit habe.
-10 Bytes dank @Dopapp
-21 Bytes dank @Shebang
quelle
try:...
undexcept:...
zutry:n=...
und ändern undexcept:n=''
sparen Sie insgesamt 10 Bytestry
Aussage? Die Programmspezifikation besagt, dass Sie immer eine positive Ganzzahl erhalten.raw_input()
? Standardmäßig kann der Benutzer drücken[Enter]
undn
wird die leere Zeichenfolge trotzdem enthalten. Wenn Sie diesen try-except-Block entfernen undt=u.urlopen(h+x+n).read() -> t=u.urlopen(h+x+raw_input()).read()
auf 274 Bytes reduzieren.https
. Es ist jedoch immer noch gültig, da es zum Zeitpunkt der Veröffentlichung funktioniert hat. Damit es jetzt funktioniert, ändern Sie Zeile 3 und beginnen Sie mith='https://'
+1 Byte.PHP, 42 Bytes
Speichern Sie es in einer Datei und starten Sie es auf einem Webserver Ihrer Wahl
quelle
JavaScript + HTML, 124 + 18 = 142 Bytes
Herkunftsübergreifende Lösung dank Kaiidos Antwort hier .
17 Bytes (
//crossorigin.me/
) können gespeichert werden, wenn der für die Verbindung zu xkcd.com erforderliche Proxy abgezogen werden kann ( Meta-Post dazu ).Testschnipsel
quelle
Python 3 + Requests + PIL,
192186 BytesÖffnet einen Bildbetrachter (welcher Standard auf dem System ist, auf dem er ausgeführt wird), der den Comic enthält, und sendet den Titeltext an die Konsole.
quelle
Wolfram-Sprache 45 Bytes (Mathematica)
Verwendung mit Nummer:
Verwendung ohne Nummer:
quelle