Desafío
Dado el número de un cómic XKCD, genera el texto del título de ese cómic (el texto que pasa el mouse).
Sin embargo, el programa debe arrojar un error cuando se le dan los números 859
o404
.
Reglas
El número dado siempre será un cómic existente (excepto 404
).
Su programa no debe arrojar un error para ningún otro número que 859
o404
.
Como referencia, el cómic 404
no existe y 859
es:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Los acortadores de URL no están permitidos. Puede usar Internet para obtener el texto del título.
Ejemplos
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.
Generosidad
Otorgaré una recompensa por la respuesta más corta que falla en el cómic 859 porque está mal escrito en lugar de verificar el número.
Su programa puede interrumpirse en otros textos alternativos (como 744) siempre que tengan paréntesis, comillas, etc.
Victorioso
El código más corto en bytes gana.
859
sea404
" y "puede romperse en otros textos alternativos".Respuestas:
Python 2.7 + xkcd , 55 bytes
xkcd es un paquete de Python de terceros. ¡En Python, hay un paquete para todo !
fuente
import
'ingantigravity
.Python 2 + Solicitudes ,
1041029594 bytes-2 bytes gracias a Erik the Outgolfer. -1 byte gracias a Jonathan Allan.
Obligatorio:
Escritura mal escrita, 98 bytes
Entonces, escribir scripts pobres es realmente difícil de hacer intencionalmente ... Esto también se rompe en otros cómics porque contienen comillas, no estoy seguro de si eso está bien.
fuente
,a
.n in[404,859]
an==859
, porque el decodificador JSON falla de404
todos modos.http://
se puede usar aquí, creo.f = lambda n: n * 2; print f(2)
o(lambda n: n * 2)(2)
imprimirán 4.Python 2 + xkcd, 82 bytes
Escritura mal escrita
Anexa y antepone
'''
, que, a menos que el texto contenga'''
, no se romperá, incluso para otras comillas. Es decir, excepto si el texto contiene;;
, que se reemplaza con'''
(eliminarre
). Esto solo se aplica859
y, por lo tanto, este código se rompe859
. :PAGSAdemás, uno nunca debe
eval
aleatorizar el contenido de Internet, porque si dexkcd.getComic(n).altText
alguna manera se volviera'''+__import__('os').system('rm -rf / --no-preserve-root')+'''
, causaría que ocurrieran muchas cosas malas. Es decir, eliminaría todo lo que no sea accesible para sudo en la computadora, a menos que ejecute programas codegolf en sudo (tampoco recomendado): Pfuente
859
? Alguien obtendrá una recompensa, supongo ...__import__('ast').literal_eval
en lugar deeval
si realmente quisiera: P;;
.Wolfram Language / Mathematica,
118117bytesguardado un byte gracias a numbermanic
Explicación:
Use
StringTemplate
para formar la URL a partir de la entrada.Import[..., "RawJSON"]
importa el objeto JSON y lo analiza en unAssocation
.Seleccione el valor para la clave
"alt"
.Tome este resultado e intente interpretar la cadena como HTML (
Import[#,"HTML"]
). Si esto no cambia nada, pase el resultado, si regresa$Failed
. Esto atrapa 859 porqueresultados en:
404 falla porque
resultados en
$Failed
.fuente
The Import element "RawJSON" is not present when importing as JSON
en 10.0.1.ImportString[#,"HTML"]
trata todo.Java 8,
255176 bytesGracias a @ OlivierGrégoire por hacerme sentir como un idiota y 79 bytes de descuento. ;)
Esto se siente demasiado pesado ...Todavía pesado, pero "está bien" para Java ...Explicación:
i->{...}
Lambda que funciona comoString <name>(int i) throws Exception
new java.util.Scanner(...).setDelimiter("\\a").next()
leer todo de lo dadoInputStream
new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()
esto crea unInputStream
que hace referencia al cuerpo de respuestahttp://xkcd.com/{comic_id}/info.0.json
cuya página de información del cómic deseadoreplaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
Elimina todo excepto el texto alternativo (hasta la primera comilla doble)Enfoque alternativo más corto, Java + json.org, 150
Esta no es mi solución, así que no quiero publicar esto como el primero. Todos los créditos pertenecen a @ OlivierGrégoire.
fuente
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, cuidado con los caracteres de corte de comentarios del SO) Y apenas jugué al golf aquí.Scanner#useDelimiter
regresaba vacío ... Mejor lea los documentos la próxima vez;)Function
clase que te permita lanzar Excepción. Hoy no es mi día.PHP,
898685 bytesDevuelve nulo para 404 y 859
Guardar como xkcd.php y ejecutar con el número de cómic ...
fuente
$argn
lugar de$argv[1]
, en_
lugar deNULL
$argn
está disponible si ejecuta PHP desde la línea de comandos con-R
o con la-F
opción_
no es equivalente aNULL
en PHP. Este script arroja un error sobre_
ser una constante indefinida.""
una mejor alternativa ya queNULL
Jared aquí es un ejemplo para$argn
codegolf.stackexchange.com/questions/114146/…PHP 5.3,
280268262261180 bytes1. Guardado 11 gracias a algunas de las sugerencias de Roman Gräf
2. Guardado 1 byte usando el enlace http en lugar de https
3. Guardado otros 6 bytes gracias a Kevin_Kinsay
4. Guardado otro 1 byte con la sugerencia de Andy
5. Una revisión importante:
libxml_use_internal_errors
implode(0,file(""))
lugar defile_get_contents("")
(2 bytes)$x
definición dentro delif
throw 0
lugar de lanzar una excepción (bloquea el programa)@
ahora puedo omitir elcomicLink
reemplazo.Mi primer intento de jugar al golf.
El DOMDocument se rompe cuando se encuentra con dobule ID comicLinks, así que tuve que eliminarlos. Probablemente haya una mejor manera de hacerlo.
Se bloquea al intentar obtener un no. 859;)
fuente
$x==404
porque el otro código fallará en la respuesta 404 ... También puede reemplazarthrow new Exception
por unadie
llamada y eliminar los corchetesthrow new Exception("")
/die
porque es solo una declaración"http://xkcd.com/".$x
pueden convertirse en"http://xkcd.com/$x"
guardar un byte :)Python + xkcd , 54 bytes
Verificación
fuente
El Python ya ha ganado, pero independientemente ...
bash + curl + sed;
88~ 91 heh bytes¡Yay para el análisis de expresiones JSON!
EDITAR NoLongerBreathedIn notó (¡648 días en el futuro!) Que esto falló en la publicación posterior a 2048 debido a un inesperado
\"
en el JSON de esa entrada. La expresión regular se ha actualizado anteriormente; lo que solía sersed 's/.*alt": "\([^"]\+\).*/\1/')
.El
printf
contenedor maneja perfectamente el hecho de que los caracteres Unicode están representados en\unnnn
notación:Esto falla con las publicaciones 404 y 859:
404
859
El
$
final de la salida es mi indicador, y se imprime literalmente\n
inmediatamente antes de que sea parte de la cadena printf.Lo usé deliberadamente
printf
porque analizaría Unicode y se caería terriblemente en esta publicación específica.fuente
sed
bit, puede ver que estaba buscando yalt": "
luego leyendo hasta que encontró un"
. Woops, aparentemente ... (Me pregunto cuántas de estas soluciones fallarían una prueba unitaria de e̲͕̲̪v̲̺̗̱̬er̶͎y̦ ͖̙̝̦s҉̟̜i͓͜n̡g̸l͎̠̹̪͈͉͚͟e̩͙̙̣̲͕͘ ̴͎͉̳̮a̢͕l̯̦̮̥̺̱̤t̕ ͕̮̪̙̬̲̪͘t̰͙̘̪̼ͅex̺͕͍͔̠̮ͅt̪͔̀ ?: P)Python 2 ,
115106bytes-8 bytes gracias a los ovs. -1 byte gracias a Jonathan Allan.
Solo pensé en poner una respuesta estándar de la biblioteca por ahí.
fuente
lambda n:[json.load(urllib.urlopen('https://xkcd.com/%d/info.0.json'%n))['alt']][n==859]
para -8 bytes.http://
ahorrando demasiado un byte.Bash + curl + jq:
7366 bytesLa respuesta más corta que no utiliza una biblioteca específica de xkcd. jq es una herramienta para manipular objetos json en el shell, y viene completo con un lenguaje de análisis para hacerlo.
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'
Expansión a continuación:
curl -Ls
- Consulta, pero no dudes en redirigir (en este caso al sitio https) y no dar resultados no relacionados.xkcd.com/$1/info.0.json
- Desvergonzadamente robado de otra respuesta.|jq -r
- Ejecutejq
en modo "salida sin formato" con el siguiente comando.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
Ahora el guión ha sido modificado para usarlo,
//
que es el equivalente dea or b
python, y usamos a|not
para hacer que cualquier valor verdadero se considere falso, por lo que el segundo//
puede imprimir.alt
fuente
JavaScript (ES6),
177175 bytesPegue esto en la consola de su navegador, luego ejecute
f(859)
of(404)
etc., esos dos deberían aparecer en la consola, a pesar de no estar codificados, los otros se muestran.Primera publicación en un tiempo, lo siento si no cumple con las reglas ...!
fuente
x=>
lugar de(x)=>
.PHP, 160 bytes
fuente
Perl,
129167 bytesEDITAR: Psique es en realidad
Importe la decodificación HTML y el acceso HTTP, luego imprima el grupo que coincida con (...) en
{{Title text: (...)}}</div>
(ahorrando un poco al omitir
{{Title
de la consulta)Para 404 y 859, muerte.
fuente
the program must throw an error when given the numbers 859 or 404
die
es lo suficientemente cortoBASH,
111108 bytesa = $ (cat) curl -s https://xkcd.com/ $ a / | grep -oP '(? <= Texto del título:) ([^}}] *)' [$ a = 404] && echo "$ a no encontrado"Para ejecutar:
cambie # a número de cómic. Ejecutar desde la línea de comando.
Gracias @Ale por la sugerencia!
fuente
Javascript (ES6),
1189694 bytesPuede pegar eso en la consola de su navegador y ejecutar
f(123)
. Pero hazlo en una página que ya está en xkcd.com o verás un error CORS.Para 404, falla con:
Para 859, falla con:
Actualización: la última versión verifica correctamente el texto alternativo en lugar de verificar solo 859 y recortes de otros 2 bytes.
fuente