Wie viele Antworten hat diese Frage?


16

Schreiben Sie ein Programm oder eine Funktion, die die ganzzahlige Anzahl der Antworten ausgibt, die diese Frage hat. Ihre Lösung sollte weiterhin funktionieren, wenn weitere Antworten hinzugefügt werden.

Sprachen, die in einem Browser ausgeführt werden, können auf dieser Seite über die js-Konsole ausgeführt werden. Andernfalls müssten Sie diese Seite wahrscheinlich herunterladen. Mehrsprachige Lösungen, z. B. wgetdas Aufrufen und Parsen der Seite, grepsind in Ordnung. Fassen Sie einfach die Befehlszeile und alle verwendeten Quellen zusammen.

Das ist Code Golf; kürzeste Antwort in Bytes gewinnt.

BEARBEITEN:

Lassen wir höchstens ein Mal zu, dass die URL dieser Seite weder als Eingabe noch in der Quelle zählt. Keine URL-Kürzungen, keine Daten, die als Get-Parameter usw. gespeichert sind. Anführungszeichen um die URL, falls erforderlich, zählen immer noch. Das Verwenden der URL als Eingabe ist ebenfalls in Ordnung. Wenn Sie beispielsweise einen Teil der URL entfernen möchten /how-many-answers..., können Sie dies, aber wahrscheinlich hilft es Ihnen nicht.


Es ist wahrscheinlich zu spät, um jetzt darüber zu entscheiden, aber sollte die Zählung gelöschte Antworten enthalten?
Dennis

2
@Dennis Ich kann keine gelöschten Antworten sehen, daher würde ich sagen, dass sich niemand darum kümmern muss. Zähle sie, wenn du willst. Ich werde sie nicht zählen, da ich sie nicht sehen kann.
Filip Haglund

Kann die Funktion die URL als Eingabe akzeptieren? Würde die Eingabe dann für den bytecount angerechnet?
JungHwan Min

2
@FilipHaglund, ich denke, dass es am sinnvollsten ist, die URL-Byteanzahl im Code von der Gesamtzahl abzuziehen oder als Eingabe zu verwenden, da dies Sprachen unmöglich macht, die nicht im Browser ausgeführt werden um eine Gewinnchance zu haben
Daniel

1
Das (obwohl in einigen Sprachen die Eingabe noch mehr Bytes erfordern könnte) oder das Subtrahieren nur erlauben, wenn die URL http://...im Quellcode wörtlich erscheint.
Dennis

Antworten:


14

Javascript + jQuery, 23 Bytes

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

Könnte dies nicht scheitern, wenn es eine h2>spanHerausforderung im Körper gibt?
Martin Ender

3
Könnte gut sein, das dann zur Antwort hinzuzufügen. :)
Martin Ender

1
Könnte dies ausführbar gemacht werden ("Code-Snippet ausführen")?
RudolfJelin

13
Beachten Sie, dass dies jQuery verwendet, das kein reines JavaScript ist (dh es sollte nicht nur als "JavaScript" bezeichnet werden). Die Verwendung einer Bibliothek, die über der Sprache enthalten ist, sollte zumindest explizit angegeben werden. Ich bin nicht gegen die Verwendung von jQuery, nur dass es angegeben werden sollte.
Makyen

1
Das Netzwerk von @Makyen StackOverflow verwendet jQuery. Die Frage lautet "Sprachen, die in einem Browser ausgeführt werden, können auf dieser Seite über die js-Konsole ausgeführt werden." jQuery muss nicht geladen werden, da dies bereits geschehen ist. Vielleicht ist jQuery deshalb nicht spezifiziert.
Ismael Miguel

4

Mathematica, 33 Bytes

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

Die Eingabe ist die URL dieser Seite.


4

Python 2, 120 Bytes, 79 ohne URL

Ich kann nicht sagen, dass Python für diese Herausforderung gemacht wurde.

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

Leider ist der Inline-Import gleich lang :(

Jede weitere Hilfe beim Golfen wäre sehr dankbar!

Wenn die URL (satte 41 Bytes - über 1/3 meiner Byteanzahl) als Eingabe verwendet werden kann, sind es 82 Bytes:

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

1
Versuchen Sie es mit der requestsBibliothek
noɥʇʎԀʎzɐɹƆ

Ich denke der abschließende Schrägstrich kann weggelassen werden ...?
TheInitializer

@TheInitializer, oh ja danke!
Daniel

Wenn Sie die Zeile import urllibin ändern import urllib as u, können Sie 3 Bytes speichern
sonrad10 16.10.16

@ sonrad10, wie so? Es endet mit der gleichen Länge, nicht wahr?
Daniel

3

Javascript, 67 Bytes

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

Dieser Blick ist viel zu lang


3

Javascript (ES5), 46 44 40 38 33 Bytes

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

Dank Ismael Miguel wurden 5 Bytes eingespart

Hinweis: Dies ist ziemlich langsam und funktioniert nicht, wenn Sie das PPCG-Design-Benutzerskript haben.


Dies ist nicht viel anders als die andere Javascript-Antwort . In der Tat ist dies einfach eine nicht optimierte Version davon.
Ismael Miguel

@IsmaelMiguel 1. Es wurde vor dem anderen geschrieben und 2. Es verwendet das Element vor dem Versteckten, das die andere Antwort verwendet.
Nur ASCII

Meinetwegen. Aber du kannst verwenden parseInt($('#answers').text()), was funktionieren wird. Das spart Ihnen ein paar Bytes.
Ismael Miguel

3

CJam, 15 Bytes

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

Erwartet die URL dieser Seite als Eingabe.

Wie es funktioniert

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 Bytes Bash + 3 Schlüssel Luchs

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

Count Count ist gerade von 5 auf 6 gestiegen ;-)
Roman Czyborra

1
Sie könnten http:// ... mithttp://codegolf.stackexchange.com/q/96298
JungHwan Min

Ich bevorzuge die Null-Weiterleitung, da ich selbst mit 171-49 = 122 immer noch hoffnungslos zurückbleibe.
Roman Czyborra

1

99 Bytes sh + curl + jq + stackexchange API

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

Mit der API konnte ich Probleme im Zusammenhang mit der Seitenformatierung und HTML vermeiden. Leider sind 60 Bytes meiner Antwort die maximal zulässige URL für diese bestimmte API-Abfrage und weitere 13 Bytes für das Entpacken des Ergebnisses der Abfrage, da stackexchange die Lieferung unkomprimierter Daten über die API ablehnt.

Die eigentliche "Logik" ergibt sich aus dem Einrollen der API, um eine json-Antwort mit den Antworten auf diesen Beitrag anzufordern. Das wird entpackt und dann in jq, einen json-Parser, geleitet, der das Array "items" extrahiert und seine Länge ausgibt.

Sie können beeindruckend nahe daran sein, dass die API nur die Anzahl der Antworten zurückgibt, aber von dem, was ich Ihnen einfallen lassen konnte, konnten Sie nicht 100% des Weges dorthin zurücklegen, und eine Annäherung würde mehr Bytes kosten, als es nur durch jq zu schicken.

101 Bytes zum Zurückgeben von {"total":}:

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

Der Filterparameter in API-Abfragen ist sehr leistungsfähig, entspricht jedoch nicht den Anforderungen einer "Nur eine URL einrollen" -Lösung. Möglicherweise gibt es hier einen Mittelweg, in dem Sie eine kürzere Antwort erhalten und dann nur die Zeilen zählen oder die Zahl extrahieren können. Leider haben Filterzeichenfolgen eine festgelegte Länge, und der erforderliche Befehl jq war bereits effizienter.


Cool. Beachten Sie, dass Sie mithilfe eines URL-Kürzers und der Option -L viele Bytes sparen können, damit die Umleitungen dem Curl folgen. zum beispielcurl -sL --compressed bit.ly/2ebw404|jq .total
sergioFC

1
@sergioFC URL-
Dennis

@Dennis Wusste das nicht, danke.
SergioFC

1

PHP, 76 (Code) + 41 (URL) = 117 Byte

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 Bytes

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"));}}

(Zählt nur nicht gelöschte Antworten)


0

JavaScript + jQuery (bereits in Seite enthalten), 20 Bytes

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

Dies ist ein Programm, das in der Konsole für die aktuelle Seite ausgeführt werden soll (geöffnet mit F12). Es gibt die Anzahl der Antworten ohne Anführungszeichen aus. Es funktioniert in Chrome, Firefox, IE11 und Edge. Es sollte in anderen Browsern funktionieren, aber ich habe es nur in den aufgelisteten getestet.

Im Gegensatz zu anderen JavaScript-Lösungen handelt es sich hier eher um ein Programm als um einen Funktionsausdruck unter Verwendung der ES6-Pfeilfunktionsnotation . Anders als bei diesen Lösungen wird in der Konsole tatsächlich eine Ausgabe (ohne Anführungszeichen) mit der Anzahl der Antworten erstellt (anstatt nur ein Funktionsausdruck zu sein, der keine Ausgabe erzeugt). Die Ausgabe basiert auf der Funktion in der Konsole jedes Browsers, dass der Wert eines Ausdrucks ausgegeben wird, nachdem dieser Ausdruck ausgewertet wurde.

Dies <span>hängt davon ab, dass nur die Seite mit einem übergeordneten <h2>Element die Anzahl der Antworten als Textinhalt enthält. Nach dem Experimentieren scheint dies der Fall zu sein, und es scheint nicht möglich zu sein, <h2>mit <span>dem Editor absichtlich ein Objekt mit einem Kind zu erstellen : Alle explizit eingefügten <span>Elemente werden entfernt, und kein Markdown , wie er in Stack Exchange verwendet wird, erstellt ein tatsächliches Objekt <span>innerhalb von <h2>. Wenn jemand einen Fall demonstrieren kann, in dem die Seite so manipuliert werden kann, dass die 'h2>span'Auswahl nicht mehr eindeutig ist, muss dies überarbeitet werden.

Wenn die Auswertung einer Zeichenfolge anstelle einer Zahl akzeptabel ist, dann

JavaScript + jQuery (bereits in Seite enthalten), 19 Bytes

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

Dies wird zwar nicht als eingeschlossen gewertet "", erzeugt jedoch in allen getesteten Konsolen eine Ausgabe, die darin enthalten ist "". Ich habe die Kommentare von Filip Haglund zu dieser Frage gelesen, da sie diese Ausgabe ausschließen.


0

R, 80 Bytes

Die Antwort basiert auf der Suche des zurückgegebenen Vektors readLinesmit regulären Ausdrücken. Ich vermute, dass dies durch Text in Kommentaren / Antworten (möglicherweise sogar meine eigenen) gebrochen werden könnte. Wird gelöscht, wenn ja. Das Muster könnte auch verfälscht sein, aber nicht sicher, ob dies die Wahrscheinlichkeit erhöhen würde, einen falschen Wert zu erhalten.

x=readLines(scan(,""));regmatches(x,regexpr("(?<=answerCount\">).*?(?=<)",x,,T))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.