Introducción
Recientemente, estaba en el cielo con un grupo de amigos y nos aburrimos y no teníamos nada que hacer, así que "inventamos" un "juego" (algunas personas en los comentarios señalaron que este juego se puede jugar en línea y es muy popular, así que definitivamente no lo inventé, aunque no lo había visto antes). La razón por la que puse la palabra "juego" entre comillas es porque no es un juego de computadora real, sino que se juega en Wikipedia.
Es realmente fácil de jugar: alguien elige un artículo de Wikipedia como objetivo. Asumamos Code Golf para este ejemplo. Todos los jugadores deben comenzar desde un artículo aleatorio (presionando Artículo aleatorio en la barra lateral o ir a esta URL) y deben llegar al "objetivo" lo más rápido posible utilizando solo los artículos vinculados del artículo en el que se encuentran actualmente . Las reglas incluyen:
- La función de búsqueda no está permitida (obviamente)
- Solo puede hacer clic en los enlaces en el texto principal del artículo (específicamente todo el texto dentro
<div id="bodyContent">
) - Si su página aleatoria o cualquier otra página que encuentre no tiene enlaces válidos (enlaces inactivos, bucles, etc.) o no tiene enlaces, puede pasar de nuevo.
El reto
Aquí es donde entras tú: lamentablemente soy bastante malo en este juego, pero también soy un tramposo sucio. Así que quiero que implementen este bot por mí. También soy programador, así que, naturalmente, mi disco duro está lleno de cosas como código, bibliotecas y demás, y solo tengo unos pocos bytes de memoria de sobra. Por lo tanto, este desafío es Code Golf, la respuesta con menos bytes gana.
Detalles de implementacion:
- Por supuesto, no tiene que implementar un bot inteligente que conozca las conexiones entre los temas y detecte automáticamente la ruta óptima. La fuerza bruta es más que suficiente para el propósito de este desafío.
- En el juego real, el tiempo cuenta. Su programa no debería tomar más de 1 hora para encontrar el artículo (esto es para evitar lagunas como los buscadores aleatorios que "eventualmente" encontrarán el objetivo)
- Si no se puede encontrar una ruta hacia el objetivo (por ejemplo, enlaces muertos o un bucle), puede elegir qué hacer de la siguiente lista:
- Salir (la puntuación sigue siendo la misma)
- Obtenga otro artículo al azar e intente nuevamente y no haga nada en los bucles (puntaje - = 10)
- Obtenga otro artículo aleatorio en un enlace muerto o un bucle (detecte bucles automáticamente) (puntaje - = 50)
- (Por "puntaje" me refiero a su número de bytes aquí)
- Se restarán otros 20 bytes adicionales si "traza" la ruta, por lo que imprime el título de cada página individual que visita.
- Se pueden usar bibliotecas de red estándar (para evitar lagunas como "He creado mi propia biblioteca de red que rastrea artículos de Wikipedia")
- Lo único que debe hacer su programa relacionado con la red es enviar una solicitud HTTP para descargar una página de wikipedia
- Si su programa encuentra la página, debería salir, pero de alguna manera indica que terminó (imprimir el carácter "f" o el título de la página es suficiente)
- Se deben evitar las lagunas estándar
Diviértete jugando al golf!
(Esta es mi primera pregunta aquí, así que señale las lagunas y advertencias obvias en los comentarios antes de explotarlas, gracias: D)
Respuestas:
Python 373 -> 303
Lee el destino de Wikipedia desde
input()
(entrada del usuario) y debe estar en el formato de/wiki/dest
. Entonces, algo como/wiki/Code_golf
o/wiki/United_States
. También usa un espacio para las sangrías y enhttp://enwp.org
lugar de la URL completa de Wikipedia para guardar bytes.Se cuelga de vez en cuando, y no puedo entender por qué. ¿Quizás por los límites de velocidad de Wikipedia?
Encontré la página de Wikipedia de los Medias Rojas de Boston en 9 minutos y 20 segundos, y la página de Estados Unidos en menos de 10 segundos, por lo que no debería llevar mucho tiempo encontrar Code Golf ...
fuente
/wiki/Special:Random
url. En consecuencia, después de visitar muchas URL, se comerá toda la RAM.from ... import*
.import mechanize as m
y asignandom.Browser()
a,a
así que cuando llamoa.open()
, en realidad estoy llamandomechanize.Browser().open()
ahora, solo estoy importando todomechanize
y puedo omitir la... as m
parte.