xkcd est le webcomic préféré de tous, et vous allez écrire un programme qui apportera un peu plus d'humour à nous tous.
Votre objectif dans ce défi est d’écrire un programme qui prendra un numéro en entrée et affichera ce xkcd et son titre-texte (texte mousover).
Contribution
Votre programme prendra un entier positif en entrée (pas nécessairement un pour lequel il existe un comique valide) et affichera xkcd: par exemple, une entrée de 1500 doit afficher le dessin "Upside-Down Map" sur xkcd.com/1500, et ensuite, imprimez son titre sur la console ou affichez-le avec l'image.
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.
Cas de test 2, pour n = 859:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Votre programme devrait également pouvoir fonctionner sans aucune entrée et effectuer la même tâche pour le dernier xkcd trouvé sur xkcd.com, et il devrait toujours afficher le plus récent, même lorsqu'un nouveau apparaît.
Vous n'avez pas besoin d'obtenir l'image directement de xkcd.com, vous pouvez utiliser une autre base de données tant qu'elle est à jour et qu'elle existait déjà avant que ce défi ne soit relevé. Les raccourcis d’URL, c’est-à-dire les URL n’ayant d’autre but que de rediriger vers un autre emplacement, ne sont pas autorisés.
Vous pouvez afficher l'image de la manière que vous avez choisie, y compris dans un navigateur. Cependant, vous ne pouvez pas afficher directement une partie d'une autre page dans une iframe ou similaire. CLARIFICATION: vous ne pouvez pas ouvrir une page Web préexistante. Si vous souhaitez utiliser le navigateur, vous devez créer une nouvelle page . Vous devez également afficher une image - la sortie d'un fichier image n'est pas autorisée.
Vous pouvez gérer le cas où il n'y a pas d'image pour une bande dessinée particulière (par exemple, si elle est interactive ou si le programme a reçu un nombre supérieur au nombre de bandes dessinées publiées) de toute manière raisonnable, y compris en lançant une exception. , ou en imprimant une chaîne d'au moins un caractère, tant que cela signifie d'une manière ou d'une autre à l'utilisateur qu'il n'y a pas d'image pour cette entrée.
Vous pouvez uniquement afficher une image et générer son titre-texte ou générer un message d'erreur pour une bande dessinée non valide. Les autres sorties ne sont pas autorisées.
C'est un défi de code-golf , donc le moins d'octets gagne.
import antigravity
en Python;)n=404
xkcd.com/404 est une page 404.xkcd is everyone's favorite webcomic
[Citation nécessaire ]Réponses:
Perl + curl + feh,
868475 octetsNécessite l'
-p
interrupteur. Je l'ai expliqué dans le nombre d'octets.la source
?
du premier groupe de match. Vous pouvez utiliser-p
et$_=$2
au lieu deprint$2
, mais le texte du titre n’est imprimé qu’après la fermeture de feh. Je ne sais pas si c'est valide.-p
mais je ne savais pas comment le PO réagirait.PowerShell v3 +
11099107103 octetsMerci à Timmy d’avoir aidé à économiser des octets en utilisant des assignations en ligne.
Si aucun argument n'est transmis, la valeur
$args
est nulle et la bande dessinée actuelle sera simplement obtenue. Téléchargez l'image, en faisant correspondre celle avec alt text, dans un fichier du répertoire en cours d'exécution du script. Puis affichez-le avec le visualiseur par défaut de jpg. Le texte alternatif est ensuite affiché sur la console.iwr
est un alias pourInvoke-WebRequest
Si le nombre transmis (ou toute entrée non valide à cet égard) ne correspond pas, le processus échoue avec au moins une erreur 404.
la source
AutoIt , 440 octets
Oui, c'est long, mais c'est stable.
Tout d'abord, cela n'utilise pas RegEx pour gratter le site (car je n'ai pas le temps de le tester sur toutes les bandes dessinées), mais utilise plutôt l'API Internet Explorer pour parcourir les
img
balises du DOM jusqu'à ce qu'il en trouve une avec un titre.Le flux binaire est lu à partir de l'URL de l'image et rendu sous forme de bitmap à l'aide de GDIPlus. Ceci est ensuite affiché dans une belle interface graphique au format automatique avec une info-bulle qui lui permet de se comporter presque comme le site Web.
Voici un cas de test (
_(859)
):)
la source
Powershell, 93 octets
Version de 93 octets pour utiliser l'afficheur d'images local.
Sauvegardé 2 octets en supprimant les doubles guillemets inutiles, puis un autre lot en utilisant à la
("http:"+$n.src)
place de"https://"+$n.src.trim("/")
- puisque le fichierimg
src est//
déjà présent , et que xkcd ne nécessite pas https.$n=(iwr "xkcd.com/$args").images|?{$_.title};$n.title;saps ("https://"+$n.src.trim("/"))
extrêmement similaire à la réponse de Matts Powershell, (devrait être probablement un commentaire mais une faible réputation)
Au lieu de cela, cela ouvre un nouvel onglet / fenêtre dans le navigateur par défaut, entre autres, en enregistrant quelques octets.
iwr
est un alias pourInvoke-WebRequest
saps
est un alias pourStart-Process
lequel ouvre 'il' dans le contexte par défaut.la source
saps
pouriwr
et append `-OutF x.jpg;. Ii x *` la fin si vous voulez ouvrir dans le local par défaut Visionneuse d'images.R,
358328310298 octetsAvec de nouvelles lignes et commentaires:
Captures d'écran des cas de test:
pour x = 1500:
pour x vide:
cas où l'image est un jpeg:
x = 859:
la source
plot.new();rasterImage(...)
.xaxs
etyaxs
le résultat serait toujours proportionné.PHP, 95 octets
Enregistrer en tant que main.php, exécutez le serveur
Ouvrez http: // localhost: 8123 / main.php? Id = 1500
la source
Python 2.7,
309299295274 octetsProgramme complet. Certainement plus golfable, mais après avoir lu si longtemps les bandes dessinées de xkcd, je ne pouvais pas laisser passer cela (qui sait si cela sera utile dans le futur pour naviguer facilement dans xkcd).
Si aucune entrée n'est transmise, obtient la bande dessinée actuelle. Si un numéro de bande dessinée valide est passé en entrée, il obtient cette bande dessinée. Si une entrée non valide (et non un chiffre comique dans la plage valide) est transmise, une erreur est générée.
Toutes les suggestions sur la façon de réduire le nombre d'octets sont les bienvenues! Revisiterai (et ajoutera une explication) quand j'aurai plus de temps.
-10 octets grâce à @Dopapp
-21 octets grâce à @Shebang
la source
try:...
etexcept:...
àtry:n=...
etexcept:n=''
, vous permettant d' économiser 10 octets au totaltry
déclaration? La spécification du programme indique que vous obtiendrez toujours un entier positif.raw_input()
? Par défaut, l'utilisateur peut appuyer sur[Enter]
etn
contiendra la chaîne vide de toute façon. Si vous supprimez ce bloc try-except et quet=u.urlopen(h+x+n).read() -> t=u.urlopen(h+x+raw_input()).read()
vous le réduisez à 274 octets.https
. Cependant, il est toujours valide, car cela fonctionnait au moment de la publication. Pour que cela fonctionne maintenant, changez la ligne 3 pour commencer avech='https://'
+1 octet.PHP, 42 octets
Enregistrer dans un fichier et le lancer sur le serveur Web de votre choix
la source
JavaScript + HTML, 124 + 18 = 142 octets
Solution d'origine croisée grâce à la réponse de Kaiido ici .
17 octets (
//crossorigin.me/
) peuvent être sauvegardés si le proxy requis pour se connecter à xkcd.com peut être soustrait ( meta post à ce sujet ).Test Snippet
la source
Python 3 + requêtes + PIL,
192186 octetsOuvre une visionneuse d'images (celle par défaut sur le système sur lequel il est exécuté) contenant la bande dessinée et poste le texte du titre sur la console.
la source
Wolfram Language 45 octets (Mathematica)
Utilisation avec nombre:
Utilisation sans nombre:
la source