Ile odpowiedzi ma to pytanie?


16

Napisz program lub funkcję, która wypisze całkowitą liczbę odpowiedzi na to pytanie. Twoje rozwiązanie powinno nadal działać w miarę dodawania kolejnych odpowiedzi.

Języki działające w przeglądarce mogą być uruchamiane z konsoli js na tej stronie. W przeciwnym razie prawdopodobnie będziesz musiał pobrać tę stronę. Rozwiązania wielojęzyczne, np wget. Przeglądanie strony i analizowanie jej przy użyciu, grepsą w porządku. Wystarczy podsumować wiersz poleceń i wszystkie użyte źródła.

To jest kod golfowy; najkrótsza odpowiedź w bajtach wygrywa.

EDYTOWAĆ:

Pozwólmy, aby maksymalnie jeden adres URL tej strony się nie liczył, ani jako dane wejściowe, ani w źródle. Brak skracaczy adresów URL, brak danych zapisywanych jako parametry pobierania itp. Liczby wokół adresu URL, w razie potrzeby, nadal się liczą. Pobieranie adresu URL również jest w porządku. Jeśli chcesz usunąć część adresu URL, np. /how-many-answers...Możesz, ale prawdopodobnie to ci nie pomoże.


Prawdopodobnie jest już za późno na wypowiedzenie się w tej sprawie, ale czy liczba powinna uwzględniać usunięte odpowiedzi?
Dennis

2
@ Dennis Nie widzę usuniętych odpowiedzi, więc powiedziałbym, że nikt nie musi się o nie martwić. Policz je, jeśli chcesz. Nie policzę ich, ponieważ ich nie widzę.
Filip Haglund,

Czy funkcja może zaakceptować adres URL jako dane wejściowe? Czy dane wejściowe liczą się do bajtecount?
JungHwan Min

2
@FilipHaglund, myślę, że najrozsądniej byłoby odjąć liczbę bajtów URL-a w kodzie odjąć od całkowitej liczby lub podać jako dane wejściowe, ponieważ uniemożliwia to języki, które nie działają w przeglądarce mieć szansę na wygraną
Daniel

1
To (chociaż w niektórych językach przyjmowanie danych wejściowych może wymagać jeszcze więcej bajtów) lub pozwala na odejmowanie tylko wtedy, gdy URL http://...pojawia się dosłownie w kodzie źródłowym.
Dennis

Odpowiedzi:


14

JavaScript + jQuery, 23 bajty

_=>+$("h2>span").text()

Czy nie może się to nie udać, jeśli h2>spanw treści znajduje się wyzwanie?
Martin Ender

3
Może warto dodać to do odpowiedzi. :)
Martin Ender

1
Czy można to uruchomić („fragment kodu uruchomienia”)?
RudolfJelin

13
Zauważ, że używa to jQuery, który nie jest czystym JavaScriptem (tzn. Nie powinien być oznaczony jako „JavaScript”). Korzystanie z biblioteki dołączonej do języka powinno przynajmniej zostać wyraźnie określone. Nie sprzeciwiam się używaniu jQuery, po prostu należy to stwierdzić.
Makyen

1
@Makyen Sieć StackOverflow korzysta z jQuery. Pytanie brzmi: „Języki działające w przeglądarce mogą być uruchamiane z konsoli js na tej stronie”. jQuery nie musi być ładowany, ponieważ już był. Być może dlatego jQuery nie jest określony.
Ismael Miguel

4

Mathematica, 33 bajty

Length@Import[#,"Data"][[4,2]]-1&

Dane wejściowe to adres URL tej strony.


4

Python 2, 120 bajtów, 79 bez adresu URL

Nie mogę powiedzieć, że Python został stworzony do tego wyzwania.

import urllib
print[l for l in urllib.urlopen("http://codegolf.stackexchange.com/q/96298")if"answerCount"in l][0][83:-9]

Niestety import wbudowany ma tę samą długość :(

Jakakolwiek pomoc w grze w golfa byłaby bardzo mile widziana!

Jeśli jako dane wejściowe można przyjąć adres URL (aż 41 bajtów - ponad 1/3 mojej liczby bajtów), to ma on 82 bajty:

import urllib
lambda u:[l for l in urllib.urlopen(u)if"answerCount"in l][0][83:-9]

1
Spróbuj użyć requestsbiblioteki
noɥʇʎԀʎzɐɹƆ

Myślę, że ukośnik można pominąć ...?
TheInitializer

@TheInitializer, o tak, dzięki!
Daniel

Jeśli zmienisz wiersz import urllibna import urllib as u, możesz zapisać 3 bajty
sonrad10

@ sonrad10, jak to? Ostatecznie ma taką samą długość, nie?
Daniel

3

JavaScript, 67 bajtów

alert($(".answers-subheader").children().first().children().html())

To spojrzenie jest o wiele za długie


3

JavaScript (ES5), 46 44 40 38 33 bajtów

_=>parseInt($('#answers').text())

5 bajtów zaoszczędzonych dzięki Ismael Miguel

Uwaga: Jest to dość powolne i nie będzie działać, jeśli masz skrypt użytkownika PPCG-Design.


Nie różni się to zbytnio od innej odpowiedzi Javascript . W rzeczywistości jest to po prostu niezoptymalizowana wersja.
Ismael Miguel

@ IsmaelMiguel 1. Został napisany przed drugim i 2. Używa elementu przed ukrytym, którego używa druga odpowiedź.
Tylko ASCII,

Słusznie. Ale możesz użyć parseInt($('#answers').text()), który zadziała. To oszczędza ci kilka bajtów.
Ismael Miguel

3

CJam, 15 bajtów

lg"2>"/1=A>S/0=

Oczekuje, że adres URL tej strony zostanie wprowadzony.

Jak to działa

l                e# Read a line (the URL) from STDIN.
 g               e# Fetch the resource the URL points to.
  "2>"/          e# Split the source at occurrences of "2>".
       1=        e# Select the second chunk, i.e., everything between the first
                 e# <h2> and the first </h2>.
         A>      e# Discard the first 10 characters (a linefeed and 9 tabs).
           S/0=  e# Split at spaces and select the first chunk.

1

171 bajtów bash + 3 klucze ryś

lynx -cfg=<(echo PRINTER:Answercount:grep [0-9]*.Answers %s|less:FALSE:999') http://codegolf.stackexchange.com/questions/96298/how-many-answers-does-this-question-have

Hrabia Hrabia właśnie wzrósł z 5 do 6 ;-)
Roman Czyborra

1
Można wymienić http:// ... zhttp://codegolf.stackexchange.com/q/96298
JungHwan Min

Wolałem przekierowanie zerowe, ponieważ nadal byłbym beznadziejnie opóźniony nawet przy 171-49 = 122.
Roman Czyborra

1

99 bajtów sh + curl + jq + stackexchange API

curl -s --compressed api.stackexchange.com/questions/96298/answers?site=codegolf|jq .items\|length

Korzystając z interfejsu API, udało mi się uniknąć problemów związanych z formatowaniem strony i HTML. Niestety, 60 bajtów mojej odpowiedzi to maksymalnie golfowy adres URL dla tego konkretnego zapytania API, a kolejne 13 bajtów na curl do rozpakowania wyniku zapytania, ponieważ stackexchange odmawia podania nieskompresowanych danych przez API.

Rzeczywista „logika” pochodzi z zwijania interfejsu API z prośbą o odpowiedź jsona z odpowiedziami na ten post. Jest to rozpakowywane, a następnie przesyłane do jq, parsera json, który wyodrębnia tablicę „items” i wyświetla jej długość.

Możesz imponująco zbliżyć się do tego, aby interfejs API po prostu zwrócił liczbę odpowiedzi, ale z tego, co mogłem wymyślić, nie można uzyskać 100% drogi, a zbliżenie się do niego kosztowałoby więcej bajtów niż tylko przepuszczenie go przez jq.

101 bajtów do zwrócenia {„total”:}:

curl -s --compressed api.stackexchange.com/questions/96298/answers?site=codegolf&filter=!)V)MSZJUgX_

Parametr filtru w zapytaniach interfejsu API jest bardzo wydajny, ale nie wystarcza, aby zapewnić rozwiązanie „just curl a url”. Może być tutaj środek, gdzie można uzyskać krótszą odpowiedź, a następnie policzyć wiersze lub wyodrębnić liczbę, ale niestety łańcuchy filtrów mają ustaloną długość, a wymagana komenda jq była już bardziej wydajna.


Chłodny. Zauważ, że możesz zaoszczędzić wiele bajtów, używając skracacza URL i dodając opcję -L, aby curl podążał za przekierowaniami; na przykładcurl -sL --compressed bit.ly/2ebw404|jq .total
sergioFC

1

@Dennis Nie wiedziałem o tym, dziękuję.
sergioFC

1

PHP, 76 (kod) + 41 (URL) = 117 bajtów

preg_match_all('<h2>(.*) answers<span',file_get_contents("http://codegolf.stackexchange.com/q/96298"),$o);
echo $o[0];

1

Java, 230 269–41 = 228 bajtów

interface A{static void main(String[]a)throws Exception{System.out.print(new java.util.Scanner(new java.net.URL("http://codegolf.stackexchange.com/q/96298").openStream()).useDelimiter("\\Z").next().replaceAll("\n|\r","").replaceAll("^.+?\\s+(\\d+) Answers.+$","$1"));}}

(Zlicza tylko nieusunięte odpowiedzi)


0

JavaScript + jQuery (już zawarte na stronie), 20 bajtów

+$('h2>span').text()

Jest to program przeznaczony do uruchomienia w konsoli dla bieżącej strony (otwartej za pomocą F12). Wyświetla liczbę odpowiedzi bez cudzysłowów. Działa w Chrome, Firefox, IE11 i Edge. Powinien działać w innych przeglądarkach, ale przetestowałem go tylko w tych wymienionych.

W przeciwieństwie do innych rozwiązań tutaj kod JavaScript, to program sam w sobie, a nie wyrazem funkcji za pomocą notację funkcji strzałki ES6 . Również w przeciwieństwie do tych rozwiązań, w rzeczywistości generuje dane wyjściowe (bez cudzysłowów) w konsoli z liczbą odpowiedzi (zamiast być tylko wyrażeniem funkcyjnym, które nie generuje danych wyjściowych). Generowanie danych wyjściowych zależy od funkcji w konsoli każdej przeglądarki, że wartość wyrażenia jest wyprowadzana po ocenie tego wyrażenia.

Opiera się to na jedynej <span>na stronie z rodzicem, który jest <h2>elementem zawierającym liczbę odpowiedzi jako treść tekstową. Po eksperymentach, to wydaje się być przypadek, i nie wydaje się możliwe, aby celowo stworzyć <h2>z <span>dzieckiem przy użyciu edytora: wszystkie jawnie wstawione <span>elementy są usuwane i nie Markdown , stosowany na stosie Exchange, tworzy rzeczywiste <span>wewnątrz<h2> . Jeśli ktoś może zademonstrować przypadek, w którym można manipulować stroną w taki sposób, że 'h2>span'selektor nie jest już unikatowy, należy to zmienić.

Jeśli ocena do łańcucha zamiast liczby jest dopuszczalna, wówczas

JavaScript + jQuery (już zawarte na stronie), 19 bajtów

$('h2>span').text()

Jednak nie oznacza to uwzględnienia "", ale we wszystkich testowanych konsolach generuje wyjście, które jest w nim zawarte "". Przeczytałem komentarze Filipa Haglunda na ten temat, które wykluczają ten wynik.


0

R, 80 bajtów

Odpowiedź polega na przeszukaniu wektora zwróconego za readLinespomocą wyrażeń regularnych. Zgaduję, że to może być zerwane przez tekst w komentarzach / odpowiedziach (być może nawet moich). Usunie, jeśli tak. Wzorzec może być również kopytny, ale nie jestem pewien, czy zwiększy to prawdopodobieństwo otrzymania fałszywej wartości.

x=readLines(scan(,""));regmatches(x,regexpr("(?<=answerCount\">).*?(?=<)",x,,T))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.