Wprowadzenie
Ostatnio jeździłem na skypie z grupą przyjaciół i znudziliśmy się i nie mieliśmy nic do roboty, więc „wymyśliliśmy” „grę” (niektórzy w komentarzach zauważyli, że można grać w tę grę online i jest ona bardzo popularna, więc zdecydowanie nie wymyśliłem tego, chociaż nie widziałem go wcześniej). Powodem, dla którego umieszczam słowo „gra” w cudzysłowie, jest to, że nie jest to rzeczywista gra komputerowa, ale gra się w Wikipedii.
Gra jest naprawdę łatwa: ktoś wybiera jako cel artykuł w Wikipedii. Załóżmy Code Golf dla tego przykładu. Wszyscy gracze muszą wtedy zacząć od losowego artykułu (naciskając Losowy artykuł na pasku bocznym lub przechodząc do tego adresu URL) i muszą dotrzeć do „celu” tak szybko, jak to możliwe, używając tylko połączonych artykułów z artykułu, w którym aktualnie jesteś . Zasady obejmują:
- Funkcja wyszukiwania jest niedozwolona (oczywiście)
- Możesz klikać tylko linki w głównym tekście artykułu (w szczególności w całym tekście
<div id="bodyContent">
) - Jeśli twoja losowa strona lub jakakolwiek inna strona, na którą napotkasz, nie ma prawidłowych linków (martwe linki, pętle itp.) Lub nie ma żadnych linków, możesz rzucić je ponownie.
Wyzwanie
Oto, gdzie wchodzisz: niestety jestem całkiem zły w tej grze, ale jestem też brudnym oszustem. Więc chcę, żebyś zaimplementował dla mnie tego bota. Jestem również programistą, więc oczywiście mój dysk twardy jest pełen rzeczy takich jak kod, biblioteki i tym podobne, i mam tylko kilka bajtów pamięci do stracenia. Dlatego wyzwaniem jest Code Golf, wygrana z najmniej bajtami .
Szczegóły dotyczące wdrożenia:
- Oczywiście nie musisz wdrażać inteligentnego bota, który zna połączenia między tematami i automatycznie wykrywa optymalną trasę. Brutalne zmuszanie to więcej niż wystarczające do tego wyzwania
- W rzeczywistej grze liczy się czas. Twój program nie powinien zająć więcej niż 1 godzinę, aby znaleźć artykuł (ma to na celu uniknięcie luk, takich jak przypadkowi użytkownicy, którzy „w końcu” znajdą cel)
- Jeśli nie można znaleźć ścieżki do celu (np. Martwe linki lub pętla), możesz wybrać, co robić z poniższej listy:
- Wyjdź (wynik pozostaje taki sam)
- Zdobądź kolejny losowy artykuł i spróbuj ponownie i nic nie rób na pętlach (wynik - = 10)
- Zdobądź kolejny losowy artykuł na temat martwego łącza lub pętli (automatyczne wykrywanie pętli) (wynik - = 50)
- (Przez „wynik” mam na myśli liczbę bajtów tutaj)
- Kolejne 20 bajtów bonusowych zostanie odjęte, jeśli „prześledzisz” trasę, więc wydrukujesz tytuł każdej odwiedzanej strony.
- Można użyć standardowych bibliotek sieciowych (aby uniknąć luk, takich jak „Stworzyłem własną bibliotekę sieciową, która indeksuje artykuły z Wikipedii”)
- Jedyne, co powinien zrobić Twój program związany z siecią, to wysłać żądanie HTTP, aby pobrać stronę wikipedii
- Jeśli twój program znajdzie stronę, powinien wyjść, ale jakoś zasygnalizować, że się skończył (wystarczy wydrukować znak „f” lub tytuł strony)
- Należy unikać standardowych luk
Miłej zabawy w golfa!
(To jest moje pierwsze pytanie tutaj, więc proszę wskazać oczywiste luki i zastrzeżenia w komentarzach przed ich wykorzystaniem - dzięki: D)
Odpowiedzi:
Python 373 -> 303
Odczytuje miejsce docelowe Wikipedii z
input()
(dane wejściowe użytkownika) i powinno być w formacie/wiki/dest
. Coś w stylu/wiki/Code_golf
lub/wiki/United_States
. Używa również jednego miejsca na wcięcia ihttp://enwp.org
zamiast pełnego adresu URL Wikipedii, aby zapisać bajty.Zawiesza się co jakiś czas i nie mogę zrozumieć, dlaczego. Być może z powodu ograniczeń cenowych w Wikipedii?
Znalazłem stronę Wikipedii Boston Red Sox w 9 minut 20 sekund, a stronę Stanów Zjednoczonych w mniej niż 10 sekund, więc znalezienie Code Golf nie powinno zająć zbyt długo ...
źródło
/wiki/Special:Random
URL. W związku z tym po odwiedzeniu wielu adresów URL zużyje całą pamięć RAM.from ... import*
.import mechanize as m
i przypisaniem.Browser()
doa
tak gdy zgłoszęa.open()
jestem w efekcie dzwonimechanize.Browser().open()
teraz jestem po prostu przywozu wszystkichmechanize
i dostać się pominąć... as m
część.