O xkcd é o webcomic favorito de todos, e você estará escrevendo um programa que trará um pouco mais de humor para todos nós.
Seu objetivo neste desafio é escrever um programa que terá um número como entrada e exibirá o xkcd e seu texto do título (texto do mouse).
Entrada
Seu programa pegará um número inteiro positivo como entrada (não necessariamente um para o qual exista um quadrinho válido) e exibirá o xkcd: por exemplo, uma entrada de 1500 deve exibir o "Mapa de cabeça para baixo" do quadrinho em xkcd.com/1500, e, em seguida, imprima o título do texto no console ou exiba-o com a imagem.
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 teste 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."
Seu programa também deve poder funcionar sem nenhuma entrada e executar a mesma tarefa para o xkcd mais recente encontrado em xkcd.com, e sempre deve exibir o mais recente, mesmo quando um novo é iniciado.
Você não precisa obter a imagem diretamente do xkcd.com, pode usar outro banco de dados, desde que esteja atualizado e já exista antes que esse desafio ocorra. Os encurtadores de URL, ou seja, URLs com nenhum outro objetivo além de redirecionar para outro lugar, não são permitidos.
Você pode exibir a imagem da maneira que escolher, inclusive em um navegador. No entanto, você não pode exibir diretamente parte de outra página em um iframe ou similar. ESCLARECIMENTO: você não pode abrir uma página da web preexistente, se desejar usar o navegador, precisará criar uma nova página . Você também deve realmente exibir uma imagem - não é permitido produzir um arquivo de imagem.
Você pode lidar com o caso de que não há uma imagem para um determinado quadrinho (por exemplo, é interativo ou foi passado um número maior do que a quantidade de quadrinhos que foram lançados) da maneira que você desejar, incluindo uma exceção , ou imprimir uma sequência de pelo menos um caractere, desde que de alguma forma signifique ao usuário que não existe uma imagem para essa entrada.
Você só pode exibir uma imagem e exibir o texto do título ou enviar uma mensagem de erro para um quadrinho inválido. Outra saída não é permitida.
Este é um desafio de código-golfe , portanto, o menor número de bytes vence.
import antigravity
em Python;)n=404
xkcd.com/404 é uma página 404.xkcd is everyone's favorite webcomic
[Citação necessário ]Respostas:
Perl + ondulação + feh,
868475 bytesRequer a
-p
troca. Eu expliquei isso na contagem de bytes.fonte
?
grupo do primeiro jogo. Você pode usar-p
e, em$_=$2
vez deprint$2
, mas o texto do título é impresso somente após o fechamento do feh. Não tenho certeza se isso é válido.-p
mas não tinha certeza de como seria o OP.PowerShell v3 +
11099107103 bytesAgradecemos a Timmy por ajudar a economizar alguns bytes usando atribuições em linha.
Se nenhum argumento for passado,
$args
será nulo e ele obterá o quadrinho atual. Faça o download da imagem, combinando a imagem com o texto alternativo, em um arquivo no diretório em execução atual do script. Em seguida, exiba-o com o visualizador padrão de jpg. O texto alternativo é exibido no console.iwr
é um apelido paraInvoke-WebRequest
Se o número passado (ou qualquer entrada inválida) não corresponder, o processo falhará com pelo menos um erro 404.
fonte
AutoIt , 440 bytes
Sim, é longo, mas é estável.
Primeiro, isso não usa o RegEx para raspar o site (porque não tenho tempo para testá-lo em todos os quadrinhos), mas usa a API do Internet Explorer para percorrer as
img
tags do DOM até encontrar uma com o texto do título.O fluxo binário é lido a partir da URL da imagem e renderizado em um bitmap usando GDIPlus. Isso é exibido em uma interface gráfica agradável e de tamanho automático, com uma dica de ferramenta real para que ele se comporte quase exatamente como o site.
Aqui está um caso de teste (
_(859)
):)
fonte
Powershell, 93 bytes
Versão de 93 bytes para usar o visualizador de imagens local.
Economizou 2 bytes removendo aspas duplas desnecessárias e outro lote usando em
("http:"+$n.src)
vez de"https://"+$n.src.trim("/")
- já que oimg
src//
já vem com ele e o xkcd não requer https.$n=(iwr "xkcd.com/$args").images|?{$_.title};$n.title;saps ("https://"+$n.src.trim("/"))
extremamente semelhante à resposta do PowerShell de Matts, (provavelmente deve ser um comentário, mas com baixa reputação)
Em vez disso, isso abre uma nova guia / janela no navegador padrão e outras coisas, economizando alguns bytes.
iwr
é um apelido paraInvoke-WebRequest
saps
é um alias para oStart-Process
qual abre 'it' no contexto padrão.fonte
saps
paraiwr
e acrescentar `x.jpg -OutF;. Ii x *` até o fim, se você quer que ele abra no local padrão visualizador de imagens.R,
358328310298 bytesCom novas linhas e comentários:
Capturas de tela dos casos de teste:
para x = 1500:
para x vazio:
caso em que a imagem é um JPEG:
x = 859:
fonte
plot.new();rasterImage(...)
.xaxs
eyaxs
como o resultado ainda será proporcional.PHP, 95 bytes
Salve como main.php, execute o servidor
Abra http: // localhost: 8123 / main.php? Id = 1500
fonte
Python 2.7,
309299295274 bytesPrograma completo. Definitivamente mais jogável, mas depois de ler os quadrinhos do xkcd por tanto tempo, não pude deixar isso passar (quem sabe se isso será útil no futuro para navegar facilmente pelo xkcd).
Se nenhuma entrada for passada, obtém o quadrinho atual. Se um número em quadrinhos válido for passado como entrada, ele será obtido. Se uma entrada inválida (não um número em quadrinhos no intervalo válido) for passada, gera um erro.
Quaisquer sugestões sobre como reduzir a contagem de bytes são bem-vindas! Vou revisitar (e adicionar explicação) quando tiver mais tempo.
-10 bytes graças a @Dopapp
-21 bytes graças a @Shebang
fonte
try:...
eexcept:...
paratry:n=...
eexcept:n=''
, poupando-lhe 10 bytes no totaltry
declaração? A especificação do programa diz que você sempre obterá um número inteiro positivo.raw_input()
? Por padrão, o usuário pode pressionar[Enter]
en
conterá a string vazia de qualquer maneira. Se você remover esse bloco try-except et=u.urlopen(h+x+n).read() -> t=u.urlopen(h+x+raw_input()).read()
o reduzirá para 274 bytes.https
. No entanto, ainda é válido, porque funcionou no momento da postagem. Para que funcione agora, altere a linha 3 para começar comh='https://'
+1 byte.PHP, 42 bytes
Salve em um arquivo e inicie-o no servidor da sua escolha
fonte
JavaScript + HTML, 124 + 18 = 142 bytes
Solução de origem cruzada, graças à resposta do Kaiido aqui .
//crossorigin.me/
Podem ser salvos 17 bytes ( ) se o proxy necessário para se conectar ao xkcd.com puder ser subtraído ( meta post sobre isso ).Snippet de teste
fonte
Python 3 + Solicitações + PIL,
192186 bytesAbre um visualizador de imagens (o que for padrão no sistema em que está sendo executado) contendo os quadrinhos e publica o texto do título no console.
fonte
Wolfram Language 45 bytes (Mathematica)
Uso com número:
Uso sem número:
fonte