Napisz oprogramowanie, które drukuje na standardowe wyjście, liczbę odpowiedzi i liczbę komentarzy (widocznych i zwiniętych z pytania i odpowiedzi) do tego pytania / strony.
Twój skrypt musi działać przy zamkniętej stronie podczas uruchamiania.
Oczekiwany przykładowy wynik:
A12C40
Gdzie A oznacza odpowiedzi, a C komentarze.
Odpowiedzi:
Perl,
91 9692 znakówNiektóre rzeczy po prostu łamią rozwiązania innych ha ha ha :-P
pokaż 93 więcej komentarzy
href
nt = "99" (ha ha crash @ Fez Vrasta)
a, pokaż 99 pokaż 99 ha ha
href href href ha ha haha :-D
Jezu, właśnie złamałem własną odpowiedź! Odkryłem, że jedna z powyższych sztuczek, która, jak sądzę, nic nie robi, zacznie działać po tym, jak ta odpowiedź nie będzie edytowana przez pewien czas! Twoje rozwiązania będą działać tylko przez pewien czas. Właśnie dlatego widziałeś +1 odpowiedzi w swoich rozwiązaniach. To bomba na czas! Moja odpowiedź jest już na to podatna :-) Aaah, znalazłem sposób, aby uruchomić ją TERAZ ...
źródło
perl -E
. Usuwam mój komentarz. Możesz także usunąć swoje odniesienie do mojej odpowiedzi, ponieważ już go nieXQuery,
169,160, 165Bardziej czytelny (ze spacjami):
BaseX został użyty jako procesor XQuery.
źródło
doc()
funkcji), gdyby ta strona była poprawnym$d//*[@class="comments-link"]/b
to (w tagu <b> pokazana jest liczba ukrytych komentarzy)Python 3, 180
Zakładam, że to pytanie nie będzie zawierało wielu stron odpowiedzi.
źródło
A13C20
. Uwzględnij nawias kątowy w wyrażeniu regularnym i myślę, że powinien być dobry, ponieważ są one usuwane.,sep=''
BASH + AWK
163,144,138,111,110,114,131,132, 105Który jest taki sam jak ten, ale bez przekierowywania do pliku:
Wyjście prądowe
Wyjaśnienie
kędziorPrzenieś adres URL.
-s
wcurl
jest dla milczenia. I-L
podążać za przekierowaniami.Aby przeanalizować plik. Ponieważ niektóre odpowiedzi zawierały kod do łamania innych odpowiedzi, parsowanie zostało zmienione tak, że analizuje od początku wiersza
(^
), aby upewnić się, że nie jest zepsute.-F'[<>]'
ustaw separatory pól jako<
lub>
. W ten sposób tekst może zostać poprawnie przeanalizowany pod kątem „pokaż więcej komentarzy w XXX”./^[\t]*>show <b>/{c+=$4}
na liniach zawierających „obowiązuje ....> show”, dostać 4. pola (na podstawie<
,>
separatory) i dodać wartość do komentarzy licznika./^[ ]*<tr.*s="comm/{++c}
w wierszach zawierających „spacje .../^<td.*rcell">/{++a}
w wierszach zawierających „” zwiększ licznik odpowiedzi.END{print "A"a"C"c}
wydrukować wynik.źródło
m
if
kod:echo "A$(grep -c 'rcell">' m)C$(grep -c 'mment">' f)"
powinno byćecho "A$(grep -c 'rcell">' f)C$(grep -c 'mment">' f)"
, nie?PHP, które faktycznie działa (302 znaków)
W przeciwieństwie do wszystkich innych dotychczasowych odpowiedzi, zwraca poprawną odpowiedź, nawet jeśli pytanie rozlewa się na więcej niż jedną stronę.
źródło
(count($i)-1)
koryguje liczbę, aby nie uwzględniać pytania.[]
zamiastarray()
zainicjować$i
ponad 100 przedmiotów. (Moja własna wersja tego samego w Ruby nie ma tego ograniczenia. Chociaż wprawdzie może wpaść w limity API. ;-))R, 326
Z wcięciem i objaśnieniami:
Przetestowany na tej stronie , daje odpowiednią liczbę komentarzy (w tym ukrytych) na pierwszej stronie i odpowiednią liczbę odpowiedzi, tj
A23C63
.A oto rozwiązanie 482 znaków, które zbierają odpowiednią liczbę komentarzy, jeśli pytanie ostatecznie rozłoży się na kilku stronach:
Zębaty:
Próbowaliśmy na to pytanie i wyprowadzane:
A125C499
.źródło
HTML, 37
Niestety, nastąpiło nadużycie reguły Blatant!
Wyjaśnienie
q0x.eu/1
przekierowuje do: http: //api.stackexchange.com/2.1/questions/20277/comments? site = codegolf & callback = ...gdzie jest callback:
q0x.eu/2
przekierowuje na http: //api.stackexchange.com/2.1/questions/20277/answers? site = codegolf & callback = ...i
q0x.eu/3?n=...
przekierowuje na http: //api.stackexchange.com/2.1/answers/.../comments? site = codegolf & callback = ...Początkowo starałem się to zrobić zgodnie z prawem i nadal mogę spróbować, ale i tak było to zabawne!
źródło
q0x.eu/1
? PS: legalne rozwiązania i tak nie mogą pokonać Perla ;-) (rażące wyzwanie)curl q0x.eu/1
czy coś, ale było zbyt leniwe ...Ruby 175 (liczy się między stronami, używając API zamiast DOM)
To 242 bez skróconego adresu URL:
Poprzednia 291 odpowiedź:
Podziękowania dla Petera Tailora za pomysł użycia interfejsu API i Charlesa za wskazanie lepszego interfejsu API.
źródło
Python ze stosowym 160
Realizacja
Wydajność
Uwaga
Wczoraj zastanawiałem się nad użyciem API stackexchange, ale trochę czasu zajęło mi zrozumienie, jak to działa. Dzisiaj zobaczyłem, że było kilka odpowiedzi na ten sam temat. Aby nieco zmienić moją odpowiedź, pomyślałem o użyciu biblioteki zewnętrznej.
Zrozum również, że inne odpowiedzi, które opierają się na analizie wzorców, takich jak
prawdopodobnie pękną w najbliższym czasie, więc bardziej konkretną odpowiedzią jest poleganie na solidnej metodzie takiej jak ta.
źródło
R 239
Po opublikowaniu mojej odpowiedzi wynik jest następujący:
źródło
F("div","answer")
iF("td","comment-text")
nie działa dla mnie (Error in F("div", "answer") : (list) object cannot be coerced to type 'double'
). Nie powinno domyślny dlaf
byćfunction(x)length(xmlValue(x))
zamiastlength
, lub coś podobnego?xpathSApply(...,length)
powinien zwrócić wektor, a nie listę. Nie jestem pewien, dlaczego miałbyś dostać listę. I nie, naprawdę chcę użyć,length
a niefunction(x)length(xmlValue(x))
: celem jest uzyskanie wektora1
s, jednego dla każdego komentarza lub odpowiedzi.xpathSApply
może przyjmować inne funkcje (jaklength
) niżxmlValue
i podobne to nowość od wersji 3.94 pakietu (jeśli dobrze rozumiem ich dziennik zmian). Być może dlatego nie działało to dla mnie. Tak, wpadłem na pomysł, że chcesz wektor 1s, ale w mojej wersji pakietu mogę to osiągnąć tylkofunction(...
zamiastlength
.Nie mogę uwierzyć, że nikt do tej pory nie wymyślił! Najbardziej bezpośrednie rozwiązanie :-)
jQuery,
116101 znaków (poza zawodami)Być może nie jest to zgodne z zasadami, zachowuję to dla zabawy - nie można pominąć rozwiązania jQuery :) Przynajmniej jako odniesienie do przetestowania twoich skryptów !!! ;-)
Spróbuj uruchomić z konsoli FireBug:
Jeśli masz wolne połączenie, zwiększ limit czasu :-) Dzięki @Fez Vrasta za świetny pomysł kliknięcia linków „pokaż więcej”!
Niektóre inne rzeczy do rozwiązania rozwiązania innych, class = "comment" i bombardowana ha ha ha
źródło
PHP:
184172Wyjaśnienie:
Po raz pierwszy PHP pokonuje inne języki w skryptach golfowych: ')
Kilka dodatkowych znaczników do tego tematu, aby uniknąć wyrażeń regularnych „cheats”:
pokaż 9999 więcej komentarzy
źródło
Węzeł, 403
Uderza w API tylko raz ... prawdopodobnie można go skrócić, ale jestem nowy w Node.
źródło
153151147, C # i CsQueryC # Z CsQuery:
Pełny program:
118 C # i CsQuery w LINQPad lub w Roslyn
Jeśli uruchamianie przez LINQPad jest dozwolone, wówczas:
Produkuje:
Więcej zabawy.
F # z CsQuery, 143:
źródło
NIEPRAWIDŁOWA ODPOWIEDZIALNA ODPOWIEDŹ - TU TYLKO DLA ZABAWY
JavaScript + jQuery - 155
Po prostu wklej go w konsoli. Zakłada, że byłaby tylko jedna strona:
źródło