¿Cuántas respuestas tiene esta pregunta?

16

Escriba un programa o una función que genere el número entero de respuestas que tiene esta pregunta. Su solución aún debería funcionar a medida que se agregan más respuestas.

Los idiomas que se ejecutan en un navegador pueden ejecutarse desde la consola js mientras se encuentra en esta página. De lo contrario, probablemente tenga que descargar esta página. Las soluciones en varios idiomas, p. Ej., wgetRevisar la página y analizarla usando grepestán bien. Simplemente resuma la línea de comando y toda la fuente utilizada.

Este es el código de golf; La respuesta más corta en bytes gana.

EDITAR:

Permitamos que a lo sumo una aparición de la URL de esta página no cuente, ya sea como entrada o en la fuente. Sin acortadores de url, sin datos almacenados como parámetros de obtención, etc. Las comillas alrededor de url, si es necesario, aún cuentan. Tomar la url como entrada también está bien. Si desea eliminar alguna parte de la URL, por ejemplo /how-many-answers..., puede hacerlo, pero probablemente no lo ayude.

Filip Haglund
fuente
Probablemente sea demasiado tarde para decidir sobre esto ahora, pero ¿el recuento debe incluir respuestas eliminadas?
Dennis
2
@ Dennis No puedo ver las respuestas eliminadas, por lo que diría que nadie tiene que preocuparse por ellas. Cuentalos si quieres. No los contaré ya que no puedo verlos.
Filip Haglund
¿Puede la función aceptar la url como entrada? ¿Entonces la entrada contaría para el bytecount?
JungHwan Min
2
@FilipHaglund, creo que tendría más sentido que el recuento de bytes de URL en el código se reste del recuento total o que se tome como entrada porque eso hace que sea imposible para los idiomas que no se ejecutan en el navegador tener una oportunidad de ganar
Daniel
1
Eso (aunque en algunos idiomas tomar entradas podría requerir incluso más bytes) o solo permitir restar si la URL http://...aparece literalmente en el código fuente.
Dennis

Respuestas:

14

Javascript + jQuery, 23 bytes

_=>+$("h2>span").text()
Johan Karlsson
fuente
¿No podría fallar esto si hay un h2>spandesafío en el cuerpo?
Martin Ender
3
Podría ser bueno agregar eso a la respuesta entonces. :)
Martin Ender
1
¿Podría esto hacerse ejecutable ("fragmento de código de ejecución")?
RudolfJelin
13
Tenga en cuenta que esto utiliza jQuery que no es JavaScript puro (es decir, no debe etiquetarse como "JavaScript"). El uso de una biblioteca que se incluye en la parte superior del idioma debe al menos indicarse explícitamente. No estoy discutiendo en contra del uso de jQuery, solo que debería decirse.
Makyen
1
La red de @Makyen StackOverflow usa jQuery. La pregunta dice "Los idiomas que se ejecutan en un navegador pueden ejecutarse desde la consola js mientras se encuentra en esta página". jQuery no tiene que cargarse, ya que ya estaba. Tal vez por eso no se especifica jQuery.
Ismael Miguel
4

Mathematica, 33 bytes

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

La entrada es la url de esta página.

JungHwan Min
fuente
4

Python 2, 120 bytes, 79 sin URL

No puedo decir que Python fue hecho para este desafío.

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

Desafortunadamente, la importación en línea tiene la misma longitud :(

¡Cualquier ayuda para jugar golf más allá sería muy apreciada!

Si la URL (la friolera de 41 bytes, más de 1/3 de mi número de bytes) se puede tomar como entrada, son 82 bytes:

import urllib
lambda u:[l for l in urllib.urlopen(u)if"answerCount"in l][0][83:-9]
Daniel
fuente
1
Intente usar la requestsbiblioteca
noɥʇʎԀʎzɐɹƆ
Creo que la barra inclinada puede omitirse ...?
TheInitializer
@TheInitializer, ¡oh sí, gracias!
Daniel
Si cambia la línea import urlliba, import urllib as uentonces puede guardar 3 bytes
sonrad10
@ sonrad10, ¿cómo es eso? Termina siendo del mismo largo, ¿no?
Daniel
3

Javascript, 67 bytes

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

Esta mirada es demasiado larga

TuxCrafting
fuente
3

Javascript (ES5), 46 44 40 38 33 bytes

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

5 bytes guardados gracias a Ismael Miguel

Nota: Esto es bastante lento y no funcionará si tiene el script de usuario PPCG-Design.

Solo ASCII
fuente
Esto no es muy diferente a la otra respuesta de Javascript . De hecho, esta es simplemente una versión no optimizada de la misma.
Ismael Miguel
@IsmaelMiguel 1. Fue escrito antes que el otro, y 2. Utiliza el elemento antes del oculto que usa la otra respuesta.
Solo ASCII
Lo suficientemente justo. Pero puedes usar parseInt($('#answers').text()), lo que funcionará. Eso te ahorra unos pocos bytes.
Ismael Miguel
3

CJam, 15 bytes

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

Espera la URL de esta página como entrada.

Cómo funciona

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.
Dennis
fuente
1

171 bytes bash + 3 teclas 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
Roman Czyborra
fuente
Count Count acaba de aumentar de 5 a 6 ;-)
Roman Czyborra
1
Se podría reemplazar http:// ... conhttp://codegolf.stackexchange.com/q/96298
JungHwan Min
Preferí cero redirección, ya que aún estaría irremediablemente atrasado incluso con 171-49 = 122.
Roman Czyborra
1

99 bytes sh + curl + jq + stackexchange API

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

Utilizando la API, pude evitar problemas relacionados con el formato de página y html. Desafortunadamente, 60 bytes de mi respuesta son la url máximamente desarrollada para esta consulta de API en particular, y otros 13 bytes para que curl descomprima el resultado de la consulta, porque stackexchange se niega a servir datos sin comprimir a través de la API.

La "lógica" real proviene de curvar la API para pedir una respuesta json con las respuestas a esta publicación. Eso se descomprime y luego se canaliza a jq, un analizador json, que extrae la matriz de "elementos" y genera su longitud.

Puede acercarse de manera impresionante a que la API solo devuelva el número de respuestas, pero de lo que se me ocurrió no podría obtener el 100% del camino, y acercarse costaría más bytes que simplemente pasarlo por jq.

101 bytes para devolver {"total":}:

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

El parámetro de filtro en las consultas de API es muy poderoso, pero no es suficiente para proporcionar una solución "solo curl a url". Puede haber un término medio aquí, donde puede obtener una respuesta más corta y luego contar las líneas o extraer el número, pero desafortunadamente las cadenas de filtro tienen una longitud establecida, y el comando jq requerido ya era más eficiente.

LinusKrom
fuente
Frio. Tenga en cuenta que puede guardar muchos bytes utilizando un acortador de URL y agregando la opción -L para hacer que curl siga los redireccionamientos; por ejemplocurl -sL --compressed bit.ly/2ebw404|jq .total
sergioFC
1
Los acortadores de URL
Dennis
@ Dennis No lo sabía, gracias.
sergioFC
1

PHP, 76 (Código) + 41 (URL) = 117 bytes

preg_match_all('<h2>(.*) answers<span',file_get_contents("http://codegolf.stackexchange.com/q/96298"),$o);
echo $o[0];
Roman Gräf
fuente
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"));}}

(Solo cuenta las respuestas no eliminadas)

SuperJedi224
fuente
0

JavaScript + jQuery (ya incluido en la página), 20 bytes

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

Este es un programa destinado a ejecutarse en la consola para la página actual (abierto con F12 ). Produce el número de respuestas, sin comillas. Funciona en Chrome, Firefox, IE11 y Edge. Debería funcionar en otros navegadores, pero solo lo he probado en los enumerados.

A diferencia de otras soluciones de JavaScript aquí, es un programa en sí mismo en lugar de una expresión de función que utiliza la notación de función de flecha ES6 . Además, a diferencia de esas soluciones, en realidad produce resultados (sin comillas) en la consola con el número de respuestas (en lugar de ser simplemente una expresión de función que no produce resultados). La producción de resultados se basa en la función en la consola de cada navegador de que el valor de una expresión se emite después de que esa expresión ha sido evaluada.

Esto se basa en el único <span>en la página con un elemento primario que es un <h2>elemento que contiene el número de respuestas como contenido de texto. Después de la experimentación, este parece ser el caso, y no parece posible crear intencionalmente un archivo <h2>con un <span>niño usando el editor: todos los <span>elementos insertados explícitamente se eliminan y ningún Markdown , como se usa en Stack Exchange, crea un real <span>dentro de un <h2>. Si alguien puede demostrar un caso en el que la página puede manipularse de modo que el 'h2>span'selector ya no sea único, entonces será necesario revisarlo.

Si la evaluación de una cadena en lugar de un número es aceptable, entonces

JavaScript + jQuery (ya incluido en la página), 19 bytes

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

Sin embargo, si bien esto no evalúa incluirlo "", en todas las consolas probadas produce una salida que está incluida "". Leí los comentarios de Filip Haglund sobre la pregunta que excluyen esta salida.

Makyen
fuente
0

R, 80 bytes

La respuesta se basa en la búsqueda del vector devuelto mediante el readLinesuso de expresiones regulares. Supongo que esto podría romperse por texto en comentarios / respuestas (posiblemente incluso el mío). Eliminará si es así. Además, el patrón también podría ser marcado, pero no estoy seguro de si eso aumentaría la probabilidad de obtener un valor falso.

x=readLines(scan(,""));regmatches(x,regexpr("(?<=answerCount\">).*?(?=<)",x,,T))
Billywob
fuente