Como muchos geeks pueden saber, la mayoría de las páginas (95% creo) en wikipedia eventualmente conducen a una filosofía como esta:
Haga clic en el primer enlace que no está en cursiva o entre paréntesis y que está a otro artículo normal: (es decir, no Archivo: o Especial :, pero cosas como Wikipedia: están bien) y repita en ese hasta que llegue a la filosofía.
El guión debe:
- Tome una primera página como entrada
- Imprima el nombre de cada artículo que llegue a
- E imprima cuántos artículos le llevó llegar a Filosofía, y si no lo dijo.
Empiezas con 1000 puntos y pierdes uno por cada personaje en el código. Puntos de bonificación por:
Detectar artículos en bucle y detenerse: +50
Detectando artículos en bucle y solicitando si el usuario debe ir al siguiente enlace del artículo: +170
Permitiendo un valor predeterminado en la verificación anterior como un argumento de línea de comando o similar: +140
La puntuación más alta gana.
fuente
Respuestas:
Rubí, 1000 -
303299337 - 50373 - 170382 - 170 - 140379 - 170 - 140 caracteres =697701713797928931Estoy seguro de que hay muchas mejoras por hacer.
(Esto requiere Nokogiri)
Ejemplo de ejecución:
Muestra uno donde tuve que ir a un enlace diferente
Trucos que utilicé:
p a
para obtener solo enlaces que no están en cursiva, porque todos los enlaces en el artículo real que no están en cursiva siempre están en elementos de párrafo en Wikipedia.fuente
"BASH " - (Si no está equivocado: 1000 - 397 + 170 + 140 = 913 puntos)"BASH" - (Si no está equivocado: 1000 - 386 + 170 + 140 = 924 puntos)"BASH" - (Si no se equivoca: 1000 - 381 + 170 + 140 = 929 puntos)
BASH está entre comillas a propósito ya que esta es una mezcla de herramientas utilizadas en shells * nix pero envueltas en un script bash.
Editar 1:
http://
porcurl
defecto a esto.href=
partido en los anclajes def=
que<a>
no tiene ningún otro normales atributos que termina enf
. (Es una posibilidad de etiquetas personalizadas. No he visto ninguna hasta ahora).!Phil
lugar deNoPhil
. Éste es un peculiar tan También se podría decir, por ejemplo!
,0
,N
,!P
o similar.-s
oncurl
podría eliminarse para reducir en tres bytes más, pero eso produciría un resultado desordenado. No estoy seguro si eso es un problema.Usando peculiaridades, el código terminaría en 379 bytes, 931 puntos.
También podría aplicar @plannapus uso de coincidencia (con suerte) caja de navegación mediante la adición de
(p|ul).*?<(\1)
la adición de seis bytes (restando seis puntos).Edición 2:
Utilizando
${#c[@]}
para imprimir grados de separación en lugar de$i
contador.Usando peculiaridades, el código terminaría en 374 bytes, 936 puntos.
Invoco a Cthulhu y busco una solución regexp + bash / shell / * nix.
Robado:
<p>
truco de @Doorknob of Snow .Implementado:
Requisitos:
bash
v.?grep
con-P
soporte (PCRE).sed
curl
cut
Uso:
Código en línea. Copiar a archivo.
chmod +x filename
. Ejecutado por./script /wiki/…
bash shell.Código ampliado y explicado:
fuente
JavaScript 726 (444 caracteres [556] + 170)
Ahora aprecio que esto podría no ser válido como marcador, pero he disfrutado jugando de todos modos.
Uso: navegue a la página desde la que desea comenzar y ejecute lo siguiente en la consola:
Para JavaScript, el resultado es el siguiente:
Esta solución supondrá que desea saltar al siguiente enlace en un bucle que se está detectando, pero si cambia
true
al finalfalse
, aparecerá un cuadro de confirmación (bastante molesto ...) no estoy seguro de si eso califica para el bonificación secundaria o no. Asumo que no.Sangrado:
Así que originalmente me perdí la parte de ignorar los elementos en los padres, agregando que lo hacía mucho más prolijo, así que espero jugar esa función de filtro (o con suerte reemplazarla por completo).
Trabajando en Chrome y Firefox (probado en Firefox 26)
fuente
C # - 813 caracteres
Puntuación: 1000-813 + 50 + 170 + 140 = 547 :(
No hay bibliotecas externas. Detección de bucle .
El primer argumento es el artículo fuente, el segundo es el artículo objetivo.
Versión de golf:
Versión inteligible:
Ejemplo ejecutado, de "Cielo" a "Filosofía":
fuente
Scala (294 caracteres => 1000-294 + 140 = 846 puntos)
La solución actualizada que toma automáticamente el siguiente enlace si ya se ha consumido uno. Gracias por los 140 puntos extra.
Lógica: seleccione el primer enlace "/ wiki" que no tenga un ":" (por lo que ignora los enlaces "Archivo:"). Enjuague y repita con recursión devolviendo el conteo + 1 cada vez. Mantengo una lista de todas las salidas anteriores a mano para que el programa no entre en un bucle infinito.
Expresión regular: tengo 2 formas de la expresión regular.
"<p>.*?\"/wiki/([^:]*?)\".*?/p>"
que encuentra enlaces dentro de las<p>
etiquetas"p>.*?/wiki/([^:]*?)\""
que es una etiqueta un poco más experimental que ha demostrado funcionar pero proporciona resultados diferentes porque, a veces, recoge enlaces de la barra de información del lado derecho. Estos son artículos regulares, así que creo que todavía es válido. Si se determina que no lo es, el OP (o alguien más) puede dejarme un comentario y puedo actualizar mi solución a un mejor registro.Voy a usar la segunda expresión regular hasta que encuentre un caso de prueba en el que no funciona o el OP menciona que no está permitido recoger enlaces de la barra lateral (en mi opinión, las barras de información todavía son parte de el artículo en sí mismo; más de un resumen).
Fuente Minificada:
Fuente legible:
Salida de muestra:
Entrada
Salida
fuente
args(0)
de conseguir el primer argumento, deshacerse de susobject
ymain
definiciones, y creo que se puede quitar el:Int
también. pastebin.com/YqywKcG8: Int
. No me di cuenta de que estabas haciendo una llamada recursiva. También mi pastebin fue tomado de su antigua fuente legible, pero se aplican los mismos conceptos.:Int
allí. Más tarde hoy, también agregaré una forma legible de la solución 333 char que tengo. Gracias por las sugerencias @KChalouxobject Q extends App { ... }
es totalmente innecesaria si ejecuta el código con el intérprete en lugar de compilar con scalac. Solo corre conscala <filename> [args..]
R, 379 caracteres; 1000-379 + 170 = 791 puntos
Versión que pregunta a los usuarios cómo proceder cuando se detecta un bucle
Con muescas y comentarios:
Ejemplo de ejecución:
R, 325 caracteres; ??? puntos
Versión que, por defecto, toma el primer enlace no redundante (es decir, sin bucle).
fuente