Estaba jugando con la función de solicitud de URL de Pyth, y noté que Google siempre daba una respuesta con una longitud ligeramente diferente para mí, generalmente ~10500
caracteres.
Entonces, su tarea en este desafío es imprimir la longitud promedio de la respuesta html de http://google.com
.
Especificaciones
- Tomará una entrada
n
que es la cantidad de solicitudes que debe realizar. - Para cada solicitud, realizará una solicitud de obtención de HTTP.
- Contará el cuerpo de la respuesta (el texto html), no los encabezados.
- Produzca la media aritmética de las longitudes de las respuestas.
- Solo puede acceder a la URL
http://google.com
, no a ninguna otra. - Este es el código de golf , por lo que gana el código más corto en bytes .
Salida de muestra para entrada 10
: 10560.1
(Usé Python urllib
para eso)
PD: ¿alguien sabe por qué google hace esto?
http://google.com
siempre devuelve 261 bytes para mí ...https://google.com/ncr
aunque podría devolver más.http://google.com
siempre devuelve 10422 bytes para mí ...http://google.com
envía. Por supuesto, este no es el objetivo del desafío, por lo que el desafío debería editarse en la OMI para reflejarlo.Respuestas:
Bash + utilidades del sistema,
56534948 bytesActualización: guardado 4 bytes gracias a Digital Trauma y 1 byte más gracias a Dennis
En mi respuesta original que estaba usando
yes
en combinación conxargs
para emular un bucle for. Perocurl
puede aceptar como entrada una lista de URL, por lo que soloyes
se necesita la salida de .Cuando
curl
accede a google.com , recibe una página de redireccionamiento 302 que tiene la nueva URL en la sección del cuerpo, por lo que-L
se necesita la opción para seguirla.Ejecute el ejemplo: la respuesta se imprime en STDOUT, redirijo STDERR solo por claridad
Explicación: (del código enviado inicialmente)
Editar: lo reemplacé
wc -m
conwc
, porque incluso si sin argumentos imprime 2 estadísticas más de la que quería, el mismodc
script que sigue a esta salida todavía funciona, porque el conteo que queremos, felizmente, se coloca en la parte superior de la pila durante el análisis.fuente
xargs
. Gracias, actualicé la respuesta.-s
. La salida extraviada a STDERR está permitida por defecto.MATL , 28 bytes
Gif o no sucedió:
Cómo funciona
fuente
PowerShell , 48 bytes
Explicación
1
el entero de entrada.Invoke-RestMethod
(irm
), la página de inicio de Google. El resultado no es JSON, por lo que devolverá el cuerpo al pie de la letra en lugar de deserializarlo.Measure-Object
(measure
), obteniendo un promedio de laLength
propiedad de las cadenas de entrada (los cuerpos).Average
propiedad resultante .fuente
|% A*
que era posible, yo siempre he evitadomeasure
porque pensé que no podía comodín el nombre de propiedad ...|? A*
algunas cosas interesantes también. Necesito mirar mis archivos de presentación y agregar estas cosas al hilo de consejos.Java 8,
197184182181 bytesGolfizado:
Sin golf:
Esto pierde recursos, pero es un pequeño precio a pagar en busca de la menor cantidad de bytes.
fuente
n->{int s=0,i=0;for(;i<n;++i)try{...}catch(Exception e){}return s*1.0/n;}
. No estoy seguro de si puede reemplazars*1.0/n
en el regresos*1f/n
, pero vale la pena intentarlofor(;i<n;++i)
se puede cambiarfor(;i++<n;)
por -1 byte.Pyth, 25 bytes
'
es la función abierta en Pyth, y cuando se le da una cadena que comienzahttp
, realiza una búsqueda GET en ese sitio web. El valor de retorno es una lista debytes
objetos. Desafortunadamente, Pyths
no sabe cómo concatenar estos objetos, por lo que, en lugar de hacerlols
, usoslM
para obtener la longitud total. Esto se realiza varias veces igual a la entrada porm
, y los resultados se promedian por.O
.fuente
05AB1E , 15 bytes
Código:
Explicación:
Utiliza la codificación CP-1252 . Cuando se ejecuta en el intérprete sin conexión me sale lo siguiente:
fuente
PHP,
9078 bytesfuente
join(file())
en lugar defile_get_contents()
ahorrarte unos pocos bytes.echo
. También puede usar en$i
lugar de$argv[1]
como divisor.Mathematica, 58 bytes
Función anónima. Toma un número como entrada y devuelve un número como salida.
fuente
N@
? No lo está imprimiendo, por lo que no hay razón para formatearlo bien.Python, 102 bytes
O, si podemos devolver enteros en lugar de flotantes, la respuesta puede ser de 98 bytes:
fuente
)for x in[
. Además, si se restringe a Python 3, la división será automáticamente una división flotante, y puede eliminarla0.0
.[]
en el segundo caso -sum
toma ungenerator
CJam , 23 bytes
No funciona en TIO por razones de seguridad.
Prueba de funcionamiento
Cómo funciona
fuente
CJam, 27 bytes
CJam asume HTTP si no se especifica.
Explicación
fuente
Clojure, 102 bytes
Sin golf:
#(count (slurp (clojure.java.io/reader "http://www.google.com")))
es una función local que cuenta los bytes de una solicitud http a google,repeatedly
llama a la función n veces y hace una lista de los recuentos devueltos, reduce las sumas de los resultados y finalmente se divide por n para hacer un promedio. La reducción se inicia en 0.0 para forzar el resultado en un flotador; de lo contrario, la división daría como resultado un racional. Todo está envuelto en una función anónima que toma el número de veces para nombrar la solicitud.fuente
(clojure.java.io/reader)
parte es innecesaria por cierto. Se hace automáticamente detrás de escena si pasa una cadena.Python 3, 95 bytes
Solución recursiva
dónde
n=i=int(input())
biblioteca de solicitudes
fuente
Python 3 + [Requests](http://docs.python-requests.org/en/master/user/install/#install), 95 bytes
urllib2
es una biblioteca nativa de Python (preinstalada) docs.python.org/2/library/urllib2.html para que cualquiera que descargue Python pueda ejecutar su código de inmediato. No puedo ejecutar su código en mi Python 3 sin esa biblioteca.Perl, 66 bytes
51 bytes + 14 bytes para
-MLWP::Simple<space>
+ 1 byte para-p
.Solución directa usando LWP :: Simple . los
get
función se exporta de forma predeterminada y devuelve el contenido de la respuesta en caso de éxito.Perl 5.14+,
9493 bytes (solo módulos principales)79 bytes + 13 bytes para
-MHTTP::Tiny<space>
+ 1 byte para-p
.Utiliza HTTP :: Tiny , que ha estado en el núcleo desde Perl 5.14.
Cómo funciona
Esta:
es la sintaxis del objeto indirecto equivalente a esto:
y guarda tres bytes. El
get
método devuelve un hashref con el contenido almacenado encontent
clave.Para obtener el contenido de la respuesta real, hacemos:
que es equivalente a:
pero guarda un byte cuando agregamos
length
:fuente
Rebol, 69 bytes
fuente
Clojure, 70 bytes
Un pliegue en un
n
largo rango. Suma la longitud de cada solicitud, luego la divide por el número de solicitudes. Debido a la forma en que Clojure maneja la división, esto devuelve una fracción, no un decimal. Si esto es inaceptable, puedo arreglarlo a costa de un par de bytes.fuente
Ruby, 73 + 10 = 83 bytes
Usa la
-rnet/http
bandera.fuente
Common Lisp + quicklisp / dexador , 23 + 72 = 95 bytes
Si quicklisp está instalado en el sistema, descargará e instalará el dexador como sea necesario.
Preludio:
Código
Sin golf:
Explicación
(dex:get "http://google.com")
Esto realiza la solicitud web a google y devuelve cinco valores:
(length (dex:get ...))
Si no solicita explícitamente lo contrario, Common Lisp descartará todos los valores de retorno que no sean el primero, por lo que la función de longitud solo ve la respuesta http en sí misma y devuelve la longitud de esta cadena.
(loop :repeat n :sum (length ...))
Esto calcula la longitud de respuesta n veces y las agrega.
(/ (loop ...) n)
Esto divide las longitudes sumadas por n para calcular el promedio.
(lambda (n) ...)
Esto envuelve el cuerpo del código en una función anónima que toma n como argumento y devuelve la longitud promedio de respuesta para n solicitudes web a http://google.com .
fuente