Tarea:
Eres un programador increíble y un respondedor de Stackoverflow, y decides responder cada pregunta con una recompensa en Stackoverflow. Eres tan bueno que logras obtener todas las recompensas en todas las preguntas. Mientras espera que llegue el representante, se escribe un programa que va y descubre cuál es la cantidad total de representante en todas esas recompensas.
Reglas:
- Cuando se ejecuta,
- Su programa navegará por la pestaña destacada en Desbordamiento de pila.
- Raspará el valor de cada recompensa,
- Luego lo sumará y mostrará el total
- Tiene que descargar datos desde cualquier lugar en SO (y solo SO), pero recomendaría usar https://stackoverflow.com/questions?pagesize=50&sort=featured , ya que solo tiene aproximadamente 10 páginas.
- Este es el código de golf , por lo que gana el código más corto
Respuestas:
JavaScript -
176133130108106Edición 1: recorté algunos selectores y utilicé la
?:
sugerencia del Compilador de cierre de Google (a través de @Sirko, gracias)Edición 2: inicializar
s
dentrod
e inicializart
como en0
lugar de""
Edición 3: me di cuenta de que en realidad no necesito apuntar a un contenedor específico y puedo barrer todo el documento, lo que elimina un montón de
.find
llamadas y un selector innecesario (más la variable que lo contiene)Edición 4: inserte el
t
inicializador en la llamada a la función para evitar a;
(de todos modos se izará al principio) y reduzca la función a una declaración (combine dos declaraciones en una dentro de la condición de declaración ternaria) para soltar el{}
Nota : No estoy seguro de si es trampa, pero esto debe ejecutarse desde una ventana de consola de un navegador que ya apunta
http://stackoverflow.com/questions?page=1&sort=featured
. Se basa en el hecho de que jQuery y los enlaces de paginación apropiados están disponibles en la página misma. Además, solo parece funcionar en Firefox y no en IE o Chrome.Salida (en el momento de la publicación):
Explotado / comentado :
fuente
s=" #mainbar";d=$(s);t="";function a(){d.find(".bounty-indicator").each(function(){t+=this.innerHTML});(u=d.find("[rel=next]")[0])?d.load(u.href+s,a):alert(eval(t))}a();
169 - compilador de cierre de Google usado.(
par, ¿realmente funciona?Python -
232,231,195,183,176174Analiza el HTML de https://stackoverflow.com/questions?sort=featured usando expresiones regulares.
El límite superior de
range
en elfor
bucle debe sernumber of pages + 1
o el código aumentaráHTTPError
debido a los 404. El número predeterminado de resultados por página es 15, que es lo que usa el código (omitir?pagesize=50
guardar en caracteres y es igual de efectivo).Gracias a @Gabe por el consejo de reducir aún más el recuento de char.
Golfizado :
Salida (en el momento de la publicación):
Sin golf :
Aquí hay una versión un tanto inexperta que debería ser un poco más fácil de leer y comprender.
fuente
for
bucle explícito y bajarlo a 176:import urllib,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",urllib.urlopen("http://stackoverflow.com/questions?sort=featured&page=%u"%i).read())))for i in range(1,33))
+
seguido de un número. Por ejemplo, el título de una pregunta podría ajustarse a ese formato.Rebol -
164133130 (139 404 con verificación)Analiza el html usando el
parse
sub-idioma de Rebol. Comprueba las primeras 98 páginas. Me di cuenta de que tengo la misma restricción que la solución de Python: demasiadas repeticiones golpean errores 404 y detienen la ejecución. ¡Gracias a @rgchris por muchas mejoras! Actualizado para consultar hasta 98 páginas.s: 0 repeat n 99[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]s
Con comprobación de errores para 404s (139):
s: 0 repeat n 99[attempt[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]]s
Prueba
Explicación
Rebol ignora los espacios en blanco, por lo tanto, si lo desea, puede poner todo en una línea como esa. PARSE toma dos entradas, y el primer argumento (
read join ...
) se explica por sí mismo. Pero aquí hay algunos comentarios sobre las instrucciones del dialecto de análisis, en una sangría más tradicional:fuente
n
valor más alto ... actualmente hay 28 páginas de recompensas (para el tamaño de página 15). Sin embargo, no afectará tu recuento de char.Rubí, 260
Utiliza la API de Stack Exchange.
Salida (al momento de la publicación original):
No estoy contando el recuento
&pagesize=100
de caracteres, porque funciona sin él, pero acabo de agregarlo por conveniencia durante las pruebas. Si elimina eso, hace lo mismo (excepto que consume más cuota y tarda un poco más).fuente
require
s se puede reemplazar con el-r
indicador de línea de comando.Rebmu -
108107Prueba (a las 19:05 AEST)
Rebmu parece bastante críptico, pero es bastante legible una vez que te . Comencemos por desmoldarlo y colocarlo correctamente.
Rebmu es un dialecto de Rebol para que pueda ver las similitudes en la solución. Rebmu aún no puede reducir el tamaño de cada declaración, pero es un lenguaje en evolución. Gracias de nuevo a @rgchris por las mejoras en mi primer intento.
fuente
ti
(¡a entero!) sería más seguro quedo
en Rebmu sin cambios en la longitud del código.Rubí - 197
Version corta:
Versión amigable para los humanos:
Y la respuesta -
39700
Ruby con parámetros de script - 139
Para ejecutar esto desde bash solo escribe
fuente
require
s se puede reemplazar con el-r
indicador de línea de comando.PHP - 121 bytes
Usando un modificador regex 'eval', para evitar usar
array_sum
o similar. Parece ser la solución más corta entre las entradas válidas.fuente
e
modificador ha quedado en desuso a partir de PHP 5.5, pero aún así es útil para jugar al golf.PHP,
134,131, 127while($q=array_sum(preg_filter('#.*>\+#',0,file("http://stackoverflow.com/questions?sort=featured&page=".++$n))))$s+=$q;echo$s;
Recorrerá todas las páginas,
pagesize
no está configurado para guardar bytes, así que másGET
s.Muy, muy sucio, pero ... ¡aprovechando
PHP
los "defectos"!echo
while
se detiene en la tareaRegEx
reemplazar es una cadena que comienza con la cantidad de recompensaarray_sum()
suma cadenas$n
y$s
se inicializan, pero a partir de nada es equiv. como a partir de cerofuente
Bash 206
optimizaciones posibles, demasiado vago
resultado:
fuente
seq 1 11
se puede reducir aseq 11
.Javascript -
129 129119110107 caracteresEDITAR: ¡RESPUESTA NO VÁLIDA! Esto solo maneja las "Preguntas destacadas", que solo tiene una fracción de ellas. La respuesta de Alconja es más válida.
Ejecute en https://stackoverflow.com/?tab=featured en una ventana de consola. Basado en la solución de Alconja.
Lo jugué un poco más al eliminar espacios en blanco innecesarios.
Se utilizó eval para eliminar la llamada a la función, borrando otros 9 caracteres.
despejó algunos espacios en blanco más innecesarios.
fuente
Java, 540 caracteres
Advertencia: el número de recompensas activas es ~ 470. Este código accederá a una página en stackoverflow que muchas veces. Puede meterte en problemas con ellos por hacer tantas solicitudes de datos.
Mi salida fue
23400
, pero cuando ejecuté el código de @ TonyH, obtuve37550
. Malas noticias.Código bonito:
La forma en que esto funciona es simple. Se lee de la url
http://stackoverflow.com/questions"
para determinar el número de preguntas que tienen recompensas (nota: si el número aumenta, el programa falla, pero si cae, funciona bien). Se busca de este número mediante la expresión regular:b.>(\\d+)
. Esto ha funcionado en todas las pruebas hasta la fecha, pero si alguien hizo una pregunta que coincida con esa expresión regular, esto podría no funcionar.Luego, abrimos la url
http://stackoverflow.com/questions?pagesize=1&sort=featured&page=
+current question #
. En otras palabras, abrimos una nueva página para cada pregunta destacada, y forzamos que el número de preguntas sea solo1
, de modo que las obtengamos todas. La parte de reputación siempre coincidiráion.>.(\\d+)
, así que la uso para encontrarla. Dividí la operación en dos partes para poder comprobar de forma económica si se redujo el número de preguntas (es decir, la cadena devuelta no es un número entero).Luego, resumimos toda la reputación e imprimimos.
Me llevó unos 3 minutos y 20 segundos ejecutar mi máquina.
¿Alguien sabe por qué no está imprimiendo el número correcto?
fuente
C # - 407
Usando Stackoverflow.com. Igual que a continuación, excepto que no hay descompresión Gzip y diferentes expresiones regulares.
Prueba
Extrañamente, obteniendo un valor diferente al siguiente.
C # - 496
Esto usa api.stackexchange que es gzipped y json.
No minificado:
Prueba
Tamaño de página predeterminado:
Tamaño de página = 100:
fuente
jQuery 191
Funciona desde cualquier lugar de stackexchange (y muchos otros sitios), no es necesario estar en una página específica como en las respuestas de @ Alconja / @ NateKerkhofs
fuente
$
PHP - 139
Golfizado:
Ungolfed - 147
Simple
file_get_contents
/preg_match
/array_sum
Prueba:
fuente
Bash 174
Basado en https://codegolf.stackexchange.com/a/25180/7664 :
fuente
pagesize=50&
y simplemente hacer un bucle más (creo que el tamaño de página predeterminado es 15).Python (174 caracteres):
Ampliando la respuesta anterior de Python (no tengo suficiente karma para comentar):
Las solicitudes en lugar de urllib reducen en 2 caracteres.
fuente
Rubí (176 caracteres):
Siguiendo el ejemplo de Tony H. de usar números de página codificados, esto es lo que obtuve:
me dio 35300 al momento de escribir.
fuente