Como muitos geeks podem conhecer a maioria das páginas (95% eu acho) na wikipedia acabam por levar a filosofia assim:
Clique no primeiro link não itálico ou entre parênteses, para outro artigo normal: (ou seja, não Arquivo: ou Especial :, mas coisas como Wikipedia: estão OK) e repita esse procedimento até que você atinja a filosofia.
O script deve:
- Pegue uma primeira página como entrada
- Imprima o nome de cada artigo que ele recebe
- E imprima quantos artigos foram necessários para chegar à Filosofia e, se não for o caso.
Você começa com 1000 pontos e perde um para cada personagem no código, pontos de bônus por:
Detectando artigos em loop e parando: +50
Detectando artigos em loop e solicitando se o usuário deve ir para o próximo link no artigo: +170
Permitindo um padrão na verificação anterior como um argumento de linha de comando ou similar: +140
Maior pontuação ganha.
code-challenge
AlphaModder
fonte
fonte
Respostas:
Ruby, 1000 -
303299337 - 50373 - 170382 - 170 - 140379 - 170 - 140 caracteres =697701713797928931Tenho certeza de que há muitas melhorias a serem feitas.
(Isso requer Nokogiri)
Exemplo de execução:
Exemplo um onde eu tive que ir para um link diferente
Truques que usei:
p a
para obter apenas links não itálicos, porque todos os links no artigo real que não estão em itálico estão sempre em elementos de parágrafo na Wikipedia.fonte
"BASH " - (Se não estiver enganado: 1000 - 397 + 170 + 140 = 913 pontos)"BASH" - (Se não estiver enganado: 1000 - 386 + 170 + 140 = 924 pontos)"BASH" - (Se não estiver enganado: 1000 - 381 + 170 + 140 = 929 pontos)
O BASH está entre aspas de propósito, pois é uma mistura de ferramentas usadas nos shells * nix, mas agrupadas em um script bash.
Editar 1:
http://
comocurl
padrão para isso.href=
jogo em âncoras paraf=
como<a>
não tem quaisquer outros normais atributos terminando emf
. (É uma possibilidade de tags personalizadas. Não vi nenhuma até agora.)!Phil
vez deNoPhil
. Este é um peculiar pouco como se também poderia dizer, por exemplo!
,0
,N
,!P
ou similar.-s
oncurl
pode ser removida para reduzir em mais três bytes, mas isso produziria uma saída confusa. Não tenho certeza se isso é um problema.Usando peculiaridades, o código terminaria em 379 bytes, 931 pontos.
Eu também poderia implementar @plannapus uso de correspondência (espero) caixa de navegação , adicionando
(p|ul).*?<(\1)
adicionando seis bytes (subtrair seis pontos).Edição 2:
Usando
${#c[@]}
para imprimir graus de separação em vez de$i
contador.Usando peculiaridades, o código terminaria em 374 bytes, 936 pontos.
Convoco Cthulhu e opto por uma solução regexp + bash / shell / * nix.
Roubado:
<p>
truque de @Doorknob of Snow .Implementado:
Requisitos:
bash
v.?grep
com-P
suporte (PCRE).sed
curl
cut
Uso:
Código embutido. Copiar para arquivo.
chmod +x filename
. Executar a./script /wiki/…
partir do shell bash.Código expandido e explicado:
fonte
JavaScript 726 (444 caracteres [556] + 170)
Agora aprecio que isso possa não ser válido como um bookmarklet, mas gostei de mexer nele de qualquer maneira.
Uso: Navegue até a página da qual você deseja iniciar e execute o seguinte no console:
Para JavaScript, a saída é a seguinte:
Esta solução pressupõe que você deseja pular para o próximo link em um loop que está sendo detectado, mas se você alterar o
true
botão no finalfalse
, aparecerá uma caixa de confirmação (bastante irritante ...), sem saber se isso se qualifica para o bônus secundário ou não. Eu vou assumir que não.Recuado:
Então, originalmente, eu perdi a parte de ignorar itens em parênteses, acrescentando que o tornava muito mais prolixo, por isso espero reduzir a função de filtro (ou, espero, substituí-la completamente).
Trabalhando no Chrome e no Firefox (testado no Firefox 26)
fonte
C # - 813 caracteres
Pontuação: 1000-813 + 50 + 170 + 140 = 547 :(
Nenhuma biblioteca externa. Detecção de loop .
O primeiro argumento é o artigo de origem, o segundo é o artigo de destino.
Versão Golfed:
Versão inteligente:
Exemplo de execução, de "Sky" a "Philosophy":
fonte
Scala (294 caracteres => 1000-294 + 140 = 846 pontos)
A solução atualizada que pega automaticamente o próximo link se já tiver sido consumido. Obrigado pelos 140 pontos de bônus.
Lógica: Escolha o primeiro link "/ wiki" que não tenha um ":" (ele ignora os links "Arquivo:"). Enxágue e repita com recursão retornando a contagem + 1 todas as vezes. Eu mantenho uma lista de todas as saídas anteriores à mão para que o programa não entre em um loop infinito.
Expressão regular: Eu tenho 2 formas da expressão regular.
"<p>.*?\"/wiki/([^:]*?)\".*?/p>"
que encontra links nas<p>
tags"p>.*?/wiki/([^:]*?)\""
que é uma tag um pouco mais experimental que provou funcionar, mas fornece resultados diferentes porque, às vezes, pega links na barra de informações do lado direito. Como artigos regulares, acredito que ainda seja válido. Se for julgado que não, o OP (ou outra pessoa) pode me deixar um comentário e eu posso atualizar minha solução para um melhor registro.Vou usar a segunda expressão regular até encontrar um caso de teste em que ele não funcione ou o OP mencione que pegar links na barra lateral não é permitido (na minha opinião, as barras de informações ainda fazem parte de o artigo propriamente dito; mais um resumo).
Fonte Minificada:
Fonte legível:
Saída de amostra:
Entrada
Saída
fonte
args(0)
para obter o primeiro argumento, se livrar de seusobject
emain
definições, e eu acho que você pode remover o:Int
também. pastebin.com/YqywKcG8: Int
. Não sabia que você estava fazendo uma ligação recursiva. Também o meu pastebin foi retirado de sua antiga fonte legível, mas os mesmos conceitos se aplicam.:Int
lá. Ainda hoje, também adicionarei uma forma legível da solução de 333 caracteres que tenho. Obrigado pelas sugestões @KChalouxobject Q extends App { ... }
é totalmente desnecessária se você executar o código com o intérprete em vez de compilar com o scalac. Apenas execute comscala <filename> [args..]
R, 379 caracteres; 1000-379 + 170 = 791 pontos
Versão que pergunta aos usuários como proceder quando o loop é detectado
Com recuos e comentários:
Exemplo de execução:
R, 325 caracteres; ??? pontos
Versão que, por padrão, obtém o primeiro link não redundante (ou seja, sem loop).
fonte