Défi
Étant donné le numéro d’une bande dessinée XKCD, éditez le titre de cette bande dessinée (le texte survolé).
Cependant, le programme doit jeter une erreur quand on leur donne les chiffres 859
ou 404
.
Règles
Le numéro donné sera toujours une bande dessinée existante (sauf 404
).
Votre programme ne doit pas générer d'erreur pour les autres nombres que 859
ou 404
.
Pour référence, la bande dessinée 404
n'existe pas et 859
est:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Les raccourcisseurs d'URL sont interdits. Vous pouvez utiliser Internet pour obtenir le texte du titre.
Exemples
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.
Prime
J'attribuerai une prime à la réponse la plus courte qui échouera sur la bande dessinée 859 car elle est mal écrite au lieu de rechercher le numéro.
Votre programme peut se casser sur d’autres textes alternatifs (tels que 744) à condition qu’ils aient des parenthèses, des guillemets, etc. sans égaux.
Gagnant
Le code le plus court en octets gagne.
859
ou404
"et" peut se briser sur d'autres textes alternatifs ".Réponses:
Python 2.7 + xkcd , 55 octets
xkcd est un package Python tiers. En Python, il y a un paquet pour tout !
la source
import
'ingantigravity
.Python 2 + Requests ,
1041029594 octets-2 octets grâce à Erik l'Outgolfer. -1 octet grâce à Jonathan Allan.
Obligatoire:
Script mal écrit, 98 octets
Donc, écrire de mauvais scripts est en réalité difficile à faire intentionnellement ... Cela se répercute également sur d’autres bandes dessinées, car ils contiennent des guillemets, il n’est pas certain que ce soit correct.
la source
,a
.n in[404,859]
àn==859
, car le décodeur JSON échoue de404
toute façon.http://
peut être utilisé ici aussi, je pense.f = lambda n: n * 2; print f(2)
ou(lambda n: n * 2)(2)
imprimeront 4.Python 2 + xkcd, 82 octets
Script mal écrit
Ajoute et ajoute
'''
, qui, sauf si le texte en contient'''
, ne se cassera pas, même pour les autres guillemets. C’est-à-dire, sauf si le texte contient;;
, qui est remplacé par'''
(éliminationre
). Ceci ne s'applique que pour859
, et donc ce code se casse859
. : PEn outre, on ne doit jamais le
eval
contenu Internet au hasard, parce que si enxkcd.getComic(n).altText
quelque sorte devenu'''+__import__('os').system('rm -rf / --no-preserve-root')+'''
, il causerait beaucoup de mauvaises choses à se produire. À savoir, cela supprimerait tout ce qui est accessible de manière non-sudo sur l'ordinateur, sauf si vous exécutez des programmes codegolf dans sudo (également déconseillé): Pla source
859
? Quelqu'un va recevoir une prime, je suppose ...__import__('ast').literal_eval
à la place deeval
si vous voulez vraiment: P;;
.Wolfram Language / Mathematica,
118117 octetsenregistré un octet grâce à numbermanic
Explication:
Utilisez
StringTemplate
pour former l'URL à partir de l'entrée.Import[..., "RawJSON"]
importe l'objet JSON et le analyse dans un fichierAssocation
.Sélectionnez la valeur pour la clé
"alt"
.Prenez ce résultat et essayez d'interpréter la chaîne en tant que HTML (
Import[#,"HTML"]
). Si cela ne change rien, le résultat est répercuté, s'il revient$Failed
. Cela attrape 859 parce querésulte en:
404 échoue parce que
résultats en
$Failed
.la source
The Import element "RawJSON" is not present when importing as JSON
le 10.0.1.ImportString[#,"HTML"]
consiste le problème.Java 8,
255176 octetsMerci à @ OlivierGrégoire de me faire sentir comme un idiot et 79 octets de moins. ;)
Cela semble trop lourd ...Toujours lourd, mais "d'accord" pour Java ...Explication:
i->{...}
Lambda qui fonctionne commeString <name>(int i) throws Exception
new java.util.Scanner(...).setDelimiter("\\a").next()
tout lire du donnéInputStream
new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()
cela crée unInputStream
qui référence le corps de la réponsehttp://xkcd.com/{comic_id}/info.0.json
qui est la page d'information de la bande dessinée souhaitéereplaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
Supprime tout sauf le texte alternatif (jusqu'à la première citation double)Autre approche plus courte, Java + json.org, 150
Ce n'est pas ma solution, donc je ne veux pas poster ceci en premier. Tous les crédits appartiennent à @ OlivierGrégoire.
la source
i->new java.util.Scanner(new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()).useDelimiter("\\a").next().replaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
(176 octets, attention aux personnages de cutter des commentaires du SO) Et j'ai à peine joué au golf ici.Scanner#useDelimiter
rien ne revenait ... Mieux vaut lire la documentation la prochaine fois;)Function
classe qui vous permet de lancer Exception. Aujourd'hui n'est pas mon jour.PHP,
898685 octetsRetourne null pour 404 et 859
Enregistrer sous xkcd.php et exécuter avec le numéro de bande dessinée ...
la source
$argn
au lieu de$argv[1]
,_
au lieu deNULL
$argn
est disponible si vous exécutez PHP à partir de la ligne de commande avec-R
l'-F
option ou_
n'est pas équivalent àNULL
en PHP. Ce script génère une erreur indiquant_
qu’il s’agit d’une constante non définie.""
constitue une meilleure alternative, carNULL
Jared en donne un exemple pour$argn
codegolf.stackexchange.com/questions/114146/…PHP 5.3,
280268262261180 octets1. Enregistré 11 grâce à certaines suggestions de Roman Gräf
2. Enregistré 1 octet en utilisant un lien http au lieu de https
3. Enregistré 6 octets supplémentaires grâce à Kevin_Kinsay
4. Enregistré un autre octet avec la suggestion d'Andy
5. Une révision majeure:
libxml_use_internal_errors
implode(0,file(""))
place defile_get_contents("")
(2 octets)$x
définition à l'intérieur duif
throw 0
au lieu de lancer une exception (cela bloque le programme)@
je peux maintenant omettre lecomicLink
remplacer.Mon premier essai sur le golf.
Le DOMDocument se brise lorsqu’il rencontre des liens comicLinks avec un ID de dobule, il a donc fallu que je les supprime. Il y a probablement une meilleure façon de le faire.
Crashes en essayant d'obtenir non. 859;)
la source
$x==404
parce que l'autre code échouera sur la réponse 404 ... Vous pouvez également remplacerthrow new Exception
par undie
appel et supprimer les crochets autourthrow new Exception("")
/die
car il ne s'agit que d'une seule déclaration"http://xkcd.com/".$x
peuvent donc devenir des"http://xkcd.com/$x"
économies d'un octet :)Python + xkcd , 54 octets
Vérification
la source
Le Python a déjà gagné, mais peu importe ...
bash + curl + sed;
88~ 91 heh octetsOui pour l'analyse JSON regex!
EDIT NoLongerBreathedIn a remarqué (dans 648 jours dans le futur!) Que cela avait échoué après 2048 en raison d’un imprévu
\"
dans le code JSON de cette entrée. La regex a été mise à jour ci-dessus; c'était l'habitudesed 's/.*alt": "\([^"]\+\).*/\1/')
.Le
printf
wrapper gère parfaitement le fait que les caractères Unicode sont représentés dans la\unnnn
notation:Cela échoue avec les messages 404 et 859:
404
859
Le
$
à la fin de la sortie est mon invite, et le littéralement imprimé\n
juste avant qu'il fasse partie de la chaîne printf.J'ai délibérément utilisé
printf
parce qu'il analyserait Unicode et tomberait terriblement sur ce poste spécifique.la source
sed
morceau, vous pouvez voir qu’il cherchaitalt": "
puis lisait jusqu’à ce qu’il en trouve un"
. Woops, apparemment ... (Je me demande combien de ces solutions échoueraient à un test unitaire de ev̲̺̗̱̬er̶͎y̦ ͖̙̝̦s҉̟̜i͓͜n̡g̸l͎̠̹̪͈͉͚͟e̩͙̙̣̲͕͘ a̢͕l̯̦̮̥̺̱̤t̕ ͕̮̪̙̬̲̪͘t̰͙̘̪̼ͅex̺͕͍͔̠̮ͅt̪͔̀ ?: P)Python 2 ,
115 à106 octets-8 octets grâce aux ovs. -1 octet grâce à Jonathan Allan.
Je pensais juste que je mettrais une réponse de bibliothèque standard là-bas.
la source
lambda n:[json.load(urllib.urlopen('https://xkcd.com/%d/info.0.json'%n))['alt']][n==859]
pour -8 octets.http://
trop sauver un octet.Bash + curl + jq:
7366 octetsLa réponse la plus courte qui n'utilise pas une bibliothèque spécifique à xkcd. jq est un outil de manipulation d'objets json dans le shell, et il est livré avec un langage d'analyse pour le faire.
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'
Expansion ci-dessous:
curl -Ls
- Requête, mais n'hésitez pas à rediriger (dans ce cas, vers le site https) et à ne pas générer de sortie non liée.xkcd.com/$1/info.0.json
- Volé sans vergogne d'une autre réponse.|jq -r
- Exécuterjq
en mode "sortie brute" sur la commande suivante.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
Maintenant, le script a été retravaillé pour utiliser
//
l'équivalent dea or b
python, et nous utilisons un|not
pour faire en sorte que toute valeur vraie soit considérée comme fausse, de sorte que la seconde//
puisse imprimer.alt
la source
JavaScript (ES6),
177175 octetsCollez-le dans la console de votre navigateur, puis exécutez
f(859)
ouf(404)
etc. - ces deux-là devraient se tromper dans la console, même s'ils ne sont pas codés en dur, les autres s'affichent.Première publication depuis un moment, désolée si elle ne respecte pas les règles ...!
la source
x=>
au lieu de(x)=>
.PHP, 160 octets
la source
Perl,
129167 octetsEDIT: Psyché c'est en fait
Importez le décodage HTML et l'accès HTTP, puis imprimez le groupe correspondant au (...) dans
{{Title text: (...)}}</div>
(économiser un peu en omettant
{{Title
de la requête)Pour 404 et 859, la mort.
la source
the program must throw an error when given the numbers 859 or 404
die
est assez courtBASH,
111108 octetsa = $ (cat) curl -s https://xkcd.com/ $ a / | grep -oP '(? <= texte du titre:) ([^}}] *)' [$ a = 404] && echo "$ a introuvable"Pour exécuter:
remplacez # par le nombre de bandes dessinées. Exécuter en ligne de commande.
Merci @Ale pour la suggestion!
la source
Javascript (ES6),
1189694 octetsVous pouvez le coller dans la console de votre navigateur et le lancer
f(123)
. Mais faites-le sur une page qui se trouve déjà sur xkcd.com ou vous verrez une erreur CORS.Pour 404, cela échoue avec:
Pour 859, il échoue avec:
Mise à jour: la dernière version vérifie correctement le texte de remplacement au lieu de rechercher uniquement 859 et supprime 2 autres octets.
la source