Ponieważ wielu maniaków może wiedzieć, że większość stron (jak sądzę 95%) na Wikipedii ostatecznie prowadzi do filozofii:
Kliknij pierwszy link nie kursywą lub w nawiasach, który prowadzi do innego normalnego artykułu: (tzn. Nie Plik: lub Specjalny :, ale takie rzeczy jak Wikipedia: są w porządku) i powtarzaj to, dopóki nie osiągniesz filozofii.
Skrypt musi:
- Weź pierwszą stronę jako dane wejściowe
- Wydrukuj nazwę każdego artykułu, do którego trafi
- I wydrukuj, ile artykułów zajęło dotarcie do filozofii, a jeśli tak nie było.
Zaczynasz z 1000 punktów i tracisz po jednym dla każdej postaci w kodzie, Punkty bonusowe za:
Wykrywanie zapętlonych artykułów i zatrzymywanie: +50
Wykrywanie zapętlonych artykułów i pytanie, czy użytkownik powinien przejść do następnego linku do artykułu: +170
Zezwalanie na domyślną poprzednią kontrolę jako argument wiersza polecenia lub podobny: +140
Najwyższy wynik wygrywa.
code-challenge
AlphaModder
źródło
źródło
Odpowiedzi:
Rubinowy, 1000 -
303299337 - 50373 - 170382 - 170 - 140379 - 170 - 140 znaków =6977017137979928931Jestem pewien, że należy wprowadzić wiele ulepszeń.
(Wymaga to Nokogiri)
Przykładowy przebieg:
Przykładowy, w którym musiałem przejść do innego linku
Sztuczki, których użyłem:
p a
aby uzyskać tylko linki nie kursywą, ponieważ wszystkie linki w rzeczywistym artykule, które nie są kursywą, zawsze znajdują się w elementach akapitu w Wikipedii.źródło
„BASH ” - (jeśli się nie myli: 1000 - 397 + 170 + 140 = 913 punktów)„BASH” - (jeśli się nie myli: 1000 - 386 + 170 + 140 = 924 punktów)„BASH” - (jeśli się nie myli: 1000 - 381 + 170 + 140 = 929 punktów)
BASH jest celowo cytowany, ponieważ jest to mieszanka narzędzi używanych w powłokach * nix, ale zawartych w skrypcie bash.
Edycja 1:
http://
jakocurl
domyślne.href=
dopasowanie kotwic naf=
as<a>
, które nie mają żadnych innych normalnych atrybutów kończących się naf
. (Istnieje możliwość niestandardowych tagów. Jak dotąd nie widziałem.)!Phil
Zamiast tego ustaw komunikat wyjścia na „nie znaleziono ”NoPhil
. Ten jest nieco ekscentryczne, jak można by też powiedzieć, na przykład!
,0
,N
,!P
lub podobny.-s
wł.curl
Można usunąć, aby zmniejszyć o kolejne trzy bajty, ale to dałoby bałagan. Nie jestem pewien, czy to jest problem.Używając dziwactw, kod kończy się na 379 bajtach, 931 punktach.
Mogłem również wdrożyć @plannapus wykorzystanie dopasowującego (miejmy nadzieję) oknie nawigacji dodając
(p|ul).*?<(\1)
dodając sześć bajtów (odjęcie sześciu punktów).Edycja 2:
Używanie
${#c[@]}
do drukowania stopni separacji zamiast$i
licznika.Używając dziwactw, kod kończy się na 374 bajtach, 936 punktach.
Wzywam Cthulhu i szukam rozwiązania regexp + bash / shell / * nix.
Skradziony:
<p>
sztuczki z @Doorknob of Snow .Wdrożone:
Wymagania:
bash
v.?grep
z-P
obsługą (PCRE).sed
curl
cut
Stosowanie:
Kod wewnętrzny Skopiuj do pliku.
chmod +x filename
. Uruchom./script /wiki/…
z powłoki bash.Rozszerzony i wyjaśniony kod:
źródło
JavaScript 726 (444 znaków [556] + 170)
Teraz doceniam to, że może to nie być poprawne jako skryptozakładka, ale i tak mi się podobało.
Sposób użycia: Przejdź do strony, od której chcesz zacząć, i uruchom następujące polecenie w konsoli:
W przypadku JavaScript dane wyjściowe są następujące:
To rozwiązanie zakłada, że chcesz przejść do następnego łącza w wykrywanej pętli, ale jeśli zmienisz
true
na końcu,false
pojawi się okno potwierdzenia (dość irytujące ...), nie jestem pewien, czy to kwalifikuje się do dodatkowa premia czy nie. Zakładam, że nie.Zębaty:
Więc początkowo brakowało mi części o ignorowaniu przedmiotów w parenach, dodając, że to sprawiło, że stało się to znacznie bardziej skomplikowane, więc mam nadzieję, że zagram w tę funkcję filtra (lub mam nadzieję, że całkowicie ją zastąpię).
Działa zarówno w Chrome, jak i Firefox (testowane w Firefox 26)
źródło
C # - 813 znaków
Wynik: 1000-813 + 50 + 170 + 140 = 547 :(
Brak bibliotek zewnętrznych. Wykrywanie pętli .
Pierwszy argument to artykuł źródłowy, drugi to artykuł docelowy.
Wersja golfowa:
Wersja zrozumiała:
Przykładowy przebieg, od „Sky” do „Philosophy”:
źródło
Scala (294 znaków => 1000-294 + 140 = 846 punktów)
Zaktualizowane rozwiązanie, które automatycznie pobiera następny link, jeśli został już wykorzystany. Dzięki za 140 punktów bonusowych.
Logika: wybierz pierwszy link „/ wiki”, który nie zawiera „:” (więc ignoruje linki „Plik:”). Opłucz i powtórz z rekurencją zwracając liczbę + 1 za każdym razem. Trzymam pod ręką listę wszystkich poprzednich wyjść, więc program nie przechodzi w nieskończoną pętlę.
Wyrażenie regularne: Mam 2 formy wyrażenia regularnego.
"<p>.*?\"/wiki/([^:]*?)\".*?/p>"
który znajduje linki w<p>
tagach"p>.*?/wiki/([^:]*?)\""
który jest nieco bardziej eksperymentalnym tagiem, który okazał się działać, ale zapewnia różne wyniki, ponieważ czasami pobiera linki z paska informacyjnego po prawej stronie. Są to zwykłe artykuły, więc uważam, że nadal są aktualne. Jeśli okaże się, że tak nie jest, OP (lub ktoś inny) może zostawić mi komentarz, a ja mogę zaktualizować moje rozwiązanie do lepszego reg-ex.Będę używać drugiego wyrażenia regularnego, dopóki nie znajdę przypadku testowego, w którym nie działa lub OP wspomina, że zbieranie linków z paska bocznego jest niedozwolone (moim zdaniem paski informacyjne są nadal częścią sam artykuł; więcej streszczenia).
Zminimalizowane źródło:
Czytelne źródło:
Przykładowe dane wyjściowe:
Wkład
Wydajność
źródło
args(0)
aby uzyskać pierwszy argument, pozbyć się definicjiobject
imain
definicji, i myślę, że możesz też usunąć:Int
. pastebin.com/YqywKcG8: Int
. Nie zdawałem sobie sprawy, że wykonujesz rekurencyjne połączenie. Również mój kod źródłowy został pobrany z twojego starego źródła czytelnego, ale obowiązują te same pojęcia.:Int
tam. Później dzisiaj dodam również czytelną formę rozwiązania 333 znaków, które mam. Dzięki za sugestie @KChalouxobject Q extends App { ... }
jest całkowicie niepotrzebne, jeśli uruchamiasz kod za pomocą interpretera, a nie kompiluje się ze skalacem. Po prostu biegnij zscala <filename> [args..]
R, 379 znaków; 1000-379 + 170 = 791 punktów
Wersja, która pyta użytkowników, jak postępować po wykryciu pętli
Z wcięciami i komentarzami:
Przykładowy przebieg:
R, 325 znaków; ??? zwrotnica
Wersja, która domyślnie pobiera pierwsze nie redundantne łącze (tzn. Nie zapętla).
źródło