Combien de réponses a cette question?


16

Écrivez un programme ou une fonction qui génère le nombre entier de réponses à cette question. Votre solution devrait toujours fonctionner à mesure que d'autres réponses sont ajoutées.

Les langues qui s'exécutent dans un navigateur peuvent être exécutées à partir de la console js sur cette page. Sinon, vous devrez probablement télécharger cette page. Les solutions multilingues, par exemple, wgeting la page et en l'analysant en utilisant grepest ok. Résumez simplement la ligne de commande et toutes les sources utilisées.

C'est le golf de code; la réponse la plus courte en octets l'emporte.

ÉDITER:

Laissons au plus une occurrence de l'url de cette page ne pas compter, que ce soit en entrée ou dans la source. Aucun raccourcisseur d'URL, aucune donnée stockée en tant que paramètres get, etc. Les citations autour de l'URL, si nécessaire, comptent toujours. Prendre l'url en entrée est également très bien. Si vous souhaitez supprimer une partie de l'URL, par exemple /how-many-answers..., vous pouvez, mais cela ne vous aide probablement pas.


Il est probablement trop tard pour se prononcer à ce sujet maintenant, mais le nombre doit-il inclure les réponses supprimées?
Dennis

2
@Dennis Je ne peux pas voir les réponses supprimées, donc je dirais que personne n'a à s'en soucier. Comptez-les si vous le souhaitez. Je ne les compterai pas car je ne les vois pas.
Filip Haglund du

La fonction peut-elle accepter l'URL comme entrée? L'entrée serait-elle alors prise en compte dans le bytecount?
JungHwan Min

2
@FilipHaglund, je pense qu'il serait plus logique de soustraire le nombre d'octets d'URL dans le code du nombre total ou de le prendre en entrée car cela rend impossible pour les langues qui ne s'exécutent pas dans le navigateur avoir une chance de gagner
Daniel

1
Cela (bien que dans certaines langues, la saisie puisse nécessiter encore plus d'octets) ou ne permette de soustraire que si l'URL http://...apparaît textuellement dans le code source.
Dennis

Réponses:


14

Javascript + jQuery, 23 octets

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

Cela ne pourrait-il pas échouer s'il y a un h2>spandans le corps du défi?
Martin Ender du

3
Il serait peut-être bon d'ajouter cela à la réponse. :)
Martin Ender

1
Serait-il possible de le rendre exécutable ("exécuter l'extrait de code")?
RudolfJelin

13
Notez que cela utilise jQuery qui n'est pas du JavaScript pur (c'est-à-dire qu'il ne doit pas être étiqueté comme simplement "JavaScript"). L'utilisation d'une bibliothèque qui est incluse au-dessus de la langue doit au moins être explicitement indiquée. Je ne m'oppose pas à l'utilisation de jQuery, juste que cela devrait être indiqué.
Makyen

1
Le réseau de @Makyen StackOverflow utilise jQuery. La question indique que "les langues qui s'exécutent dans un navigateur peuvent être exécutées à partir de la console js sur cette page.". jQuery n'a pas besoin d'être chargé, car il l'était déjà. C'est peut-être pour cela que jQuery n'est pas spécifié.
Ismael Miguel

4

Mathematica, 33 octets

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

L'entrée est l'url de cette page.


4

Python 2, 120 octets, 79 sans URL

Je ne peux pas dire que Python a été conçu pour ce défi.

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

Malheureusement, l'importation en ligne a la même longueur :(

Toute aide pour jouer au golf plus loin serait grandement appréciée!

Si l'URL (41 octets - plus de 1/3 de mon octet) peut être prise en entrée, elle est de 82 octets:

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

1
Essayez d'utiliser la requestsbibliothèque
noɥʇʎԀʎzɐɹƆ

Je pense que la barre oblique de fin peut être omise ...?
TheInitializer

@TheInitializer, oh oui merci!
Daniel

Si vous changez la ligne import urlliben import urllib as ualors vous pouvez économiser 3 octets
sonrad10

@ sonrad10, comment ça? Ça finit par avoir la même longueur, non?
Daniel

3

Javascript, 67 octets

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

Ce look trop long


3

Javascript (ES5), 46 44 40 38 33 octets

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

5 octets économisés grâce à Ismael Miguel

Remarque: Ceci est assez lent et ne fonctionnera pas si vous avez le script utilisateur PPCG-Design.


Ce n'est pas très différent de l'autre réponse Javascript . En fait, il s'agit simplement d'une version non optimisée de celui-ci.
Ismael Miguel

@IsmaelMiguel 1. Il a été écrit avant l'autre, et 2. Il utilise l'élément avant celui caché que l'autre réponse utilise.
ASCII uniquement

C'est suffisant. Mais vous pouvez utiliser parseInt($('#answers').text())ce qui fonctionnera. Cela vous fait gagner quelques octets.
Ismael Miguel

3

CJam, 15 octets

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

Attend l'URL de cette page en entrée.

Comment ça fonctionne

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 octets bash + 3 clés lynx

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 vient de
passer

1
Vous pouvez remplacer http:// ... parhttp://codegolf.stackexchange.com/q/96298
JungHwan Min

J'ai préféré une redirection nulle car je serais toujours désespérément en retard même avec 171-49 = 122.
Roman Czyborra

1

99 octets sh + curl + jq + stackexchange API

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

En utilisant l'API, j'ai pu éviter les problèmes liés au formatage des pages et au HTML. Malheureusement, 60 octets de ma réponse sont l'url au maximum pour cette requête api particulière, et 13 autres octets pour curl pour décompresser le résultat de la requête, car stackexchange refuse de servir des données non compressées via l'api.

La véritable "logique" vient du curling de l'API pour demander une réponse JSON avec les réponses à ce message. Celui-ci est décompressé puis canalisé dans jq, un analyseur json, qui extrait le tableau "items" et affiche sa longueur.

Vous pouvez vous rapprocher de manière impressionnante de l'api qui vient de renvoyer le nombre de réponses, mais d'après ce que j'ai pu trouver, vous ne pourriez pas obtenir 100% du chemin, et se rapprocher coûterait plus d'octets que de simplement le passer par jq.

101 octets pour renvoyer {"total":}:

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

Le paramètre de filtre dans les requêtes api est très puissant, mais il ne suffit pas de fournir une solution "juste curl a url". Il peut y avoir un terrain d'entente ici, où vous pouvez obtenir une réponse plus courte et ensuite simplement compter les lignes ou extraire le nombre, mais malheureusement, les chaînes de filtrage ont une longueur définie, et la commande jq requise était déjà plus efficace.


Cool. Notez que vous pouvez économiser de nombreux octets en utilisant un raccourcisseur d'URL et en ajoutant l'option -L pour que les boucles suivent les redirections; par exemplecurl -sL --compressed bit.ly/2ebw404|jq .total
sergioFC


@Dennis Ne le savait pas, merci.
sergioFC

1

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

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 octets

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

(Ne compte que les réponses non supprimées)


0

JavaScript + jQuery (déjà inclus dans la page), 20 octets

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

Il s'agit d'un programme destiné à être exécuté dans la console de la page en cours (ouvert avec F12). Il affiche le nombre de réponses, sans guillemets. Il fonctionne dans Chrome, Firefox, IE11 et Edge. Il devrait fonctionner dans d'autres navigateurs, mais je ne l'ai testé que dans ceux répertoriés.

Contrairement aux autres solutions JavaScript ici, il s'agit d'un programme en lui-même plutôt que d'une expression de fonction utilisant la notation de fonction de flèche ES6 . Contrairement à ces solutions, il produit en fait une sortie (sans guillemets) dans la console avec le nombre de réponses (plutôt que d'être simplement une expression de fonction qui ne produit aucune sortie). La production d'une sortie repose sur la fonctionnalité de la console de chaque navigateur selon laquelle la valeur d'une expression est sortie après que cette expression a été évaluée.

Cela repose uniquement <span>sur la page avec un parent qui est un <h2>élément est celui contenant le nombre de réponses comme contenu textuel. Après l'expérimentation, cela semble être le cas, et il ne semble pas possible de créer intentionnellement un <h2>avec un <span>enfant à l'aide de l'éditeur: tous les <span>éléments insérés explicitement sont supprimés et aucun Markdown , comme utilisé sur Stack Exchange, crée un réel <span>dans un <h2>. Si quelqu'un peut démontrer un cas où la page peut être manipulée de telle sorte que le 'h2>span'sélecteur n'est plus unique, alors cela devra être révisé.

Si l'évaluation d'une chaîne au lieu d'un nombre est acceptable, alors

JavaScript + jQuery (déjà inclus dans la page), 19 octets

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

Cependant, bien que cela n'évalue pas à inclure "", dans toutes les consoles testées, il produit une sortie qui est incluse à l'intérieur "". J'ai lu les commentaires de Filip Haglund sur la question comme empêchant cette sortie.


0

R, 80 octets

La réponse est basée sur la recherche du vecteur renvoyé à l' readLinesaide d'expressions régulières. Je suppose que cela pourrait être brisé par du texte dans les commentaires / réponses (peut-être même le mien). Supprimer si oui. De plus, le modèle pourrait également être trompé mais pas sûr si cela augmenterait la probabilité d'obtenir une fausse valeur.

x=readLines(scan(,""));regmatches(x,regexpr("(?<=answerCount\">).*?(?=<)",x,,T))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.