xkcd es el webcomic favorito de todos, y estarás escribiendo un programa que nos traerá un poco más de humor a todos.
Su objetivo en este desafío es escribir un programa que tomará un número como entrada y mostrará ese xkcd y su texto de título (texto de mousover).
Entrada
Su programa tomará un entero positivo como entrada (no necesariamente uno para el que exista un cómic válido) y mostrará ese xkcd: por ejemplo, una entrada de 1500 debería mostrar el cómic "Mapa invertido" en xkcd.com/1500, y luego imprima el texto del título en la consola o muéstrelo con la imagen.
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.
Caso de prueba 2, para n = 859:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Su programa también debería poder funcionar sin ninguna entrada, y realizar la misma tarea para el xkcd más reciente encontrado en xkcd.com, y siempre debería mostrar el más reciente, incluso cuando uno nuevo sube.
No es necesario que obtenga la imagen directamente de xkcd.com, puede usar otra base de datos siempre que esté actualizada y ya existiera antes de que este desafío surgiera. Los acortadores de URL, es decir, las URL sin otro propósito que el de redireccionar a otro lugar, no están permitidas.
Puede mostrar la imagen de la forma que elija, incluso en un navegador. Sin embargo, no puede mostrar directamente parte de otra página en un iframe o similar. ACLARACIÓN: no puede abrir una página web preexistente, si desea utilizar el navegador debe crear una nueva página . También debe mostrar una imagen, ya que no está permitido generar un archivo de imagen.
Puede manejar el caso de que no hay una imagen para un cómic en particular (por ejemplo, es interactivo o se le pasó al programa un número mayor que la cantidad de cómics que se han lanzado) de la manera razonable que desee, incluso lanzando una excepción o imprimir una cadena de al menos un solo carácter, siempre que de alguna manera signifique para el usuario que no hay una imagen para esa entrada.
Solo puede mostrar una imagen y generar el texto del título, o generar un mensaje de error para un cómic no válido. Otra salida no está permitida.
Este es un desafío de código de golf , por lo que gana la menor cantidad de bytes.
import antigravity
en Python;)n=404
xkcd.com/404 es una página 404.xkcd is everyone's favorite webcomic
[Cita requerida ]Respuestas:
Perl + curl + feh,
868475 bytesRequiere el
-p
interruptor. He contado esto en el recuento de bytes.fuente
?
en el primer grupo de partidos. Puede usar-p
y en$_=$2
lugar deprint$2
, pero el texto del título se imprime solo después de cerrar feh. No estoy seguro si eso es válido.-p
pero no estaba seguro de cómo se sentiría el OP al respecto.PowerShell v3 +
11099107103 BytesGracias a Timmy por ayudar a guardar algunos bytes mediante el uso de asignaciones en línea.
Si no se pasan argumentos, entonces
$args
es nulo y solo obtendrá el cómic actual. Descargue la imagen, haciendo coincidir la que está con el texto alternativo, en un archivo en el directorio actual del script. Luego muéstrelo con el visor predeterminado de jpg's. El texto alternativo se muestra en la consola.iwr
es un alias paraInvoke-WebRequest
Si el número pasado (o cualquier entrada no válida para ese asunto) no coincide, el proceso falla con al menos un error 404.
fuente
AutoIt , 440 bytes
Sí, es largo, pero es estable.
En primer lugar, esto no usa RegEx para raspar el sitio (porque no tengo tiempo para probar esto en todos los cómics), sino que usa la API de Internet Explorer para recorrer las
img
etiquetas del DOM hasta que encuentre uno con un texto de título.La secuencia binaria se lee desde la URL de la imagen y se procesa en un mapa de bits usando GDIPlus. Esto se muestra en una interfaz gráfica de usuario agradable y de tamaño automático con una información sobre herramientas real para que se comporte casi exactamente como el sitio web.
Aquí hay un caso de prueba (
_(859)
):)
fuente
Powershell, 93 bytes
Versión de 93 bytes para usar el visor de imágenes local.
Ahorró 2 bytes eliminando comillas dobles innecesarias, luego otro lote usando
("http:"+$n.src)
lugar de"https://"+$n.src.trim("/")
, ya que elimg
src//
ya viene con él, y xkcd no requiere https.$n=(iwr "xkcd.com/$args").images|?{$_.title};$n.title;saps ("https://"+$n.src.trim("/"))
extremadamente similar a la respuesta de Matts powershell, (probablemente debería ser un comentario pero poca reputación)
En cambio, esto abre una nueva pestaña / ventana en el navegador predeterminado y otras cosas, guardando algunos bytes.
iwr
es un alias paraInvoke-WebRequest
saps
es un alias paraStart-Process
cual se abre 'it' en el contexto predeterminado.fuente
saps
aiwr
y anexar `x.jpg -OutF;. Ii x *` hasta el final si desea que se abra en el local por defecto Visor de imágenes.R,
358328310298 bytesCon nuevas líneas y comentarios:
Capturas de pantalla de casos de prueba:
para x = 1500:
para x vacío:
caso cuando la imagen es un JPEG:
x = 859:
fuente
plot.new();rasterImage(...)
.xaxs
y,yaxs
como resultado, aún sería proporcionado.PHP, 95 bytes
Guardar como main.php, ejecutar servidor
Abra http: // localhost: 8123 / main.php? Id = 1500
fuente
Python 2.7,
309299295274 bytesPrograma completo Definitivamente más golfable, pero después de haber leído los cómics de xkcd durante tanto tiempo no pude dejar pasar esto (quién sabe si esto será útil en el futuro para navegar fácilmente por xkcd).
Si no se pasa ninguna entrada, obtiene el cómic actual. Si se pasa un número de cómic válido como entrada, se obtiene ese cómic. Si se pasa una entrada no válida (no un cómic de número en el rango válido), arroja un error.
¡Cualquier sugerencia sobre cómo reducir el conteo de bytes es bienvenida! Volveré a visitar (y agregaré una explicación) cuando tenga más tiempo.
-10 bytes gracias a @Dopapp
-21 bytes gracias a @Shebang
fuente
try:...
yexcept:...
paratry:n=...
yexcept:n=''
, ahorrándole un total de 10 bytestry
declaración? La especificación del programa dice que siempre obtendrá un número entero positivo.raw_input()
? Por defecto, el usuario puede presionar[Enter]
yn
contendrá la cadena vacía de todos modos. Si elimina ese bloque try-except yt=u.urlopen(h+x+n).read() -> t=u.urlopen(h+x+raw_input()).read()
lo reduce a 274 bytes.https
. Sin embargo, sigue siendo válido, porque funcionaba en el momento de la publicación. Para que funcione ahora, cambie la línea 3 para comenzar conh='https://'
+1 byte.PHP, 42 bytes
Guarde en un archivo y enciéndalo en el servidor web de su elección
fuente
JavaScript + HTML, 124 + 18 = 142 bytes
Solución de origen cruzado gracias a la respuesta de Kaiido aquí .
//crossorigin.me/
Se pueden guardar 17 bytes ( ) si se puede restar el proxy requerido para conectarse a xkcd.com ( meta publicación sobre esto ).Fragmento de prueba
fuente
Python 3 + Solicitudes + PIL,
192186 bytesAbre un visor de imágenes (lo que sea predeterminado en el sistema en el que se ejecuta) que contiene el cómic y publica el texto del título en la consola.
fuente
Wolfram Language 45 bytes (Mathematica)
Uso con número:
Uso sin número:
fuente