Eu estava brincando com o recurso de solicitação de URL de Pyth e percebi que o google sempre dava uma resposta com um comprimento um pouco diferente para mim, geralmente ~10500
caracteres.
Portanto, sua tarefa neste desafio é imprimir o comprimento médio da resposta html http://google.com
.
Especificações
- Você receberá uma entrada
n
que é o número de solicitações a serem feitas. - Para cada solicitação, você fará uma solicitação de obtenção HTTP.
- Você contará o corpo da resposta (o texto html), não os cabeçalhos.
- Emita a média aritmética dos comprimentos das respostas.
- Você só pode acessar o URL
http://google.com
, não qualquer outro. - Isso é código-golfe , então o código mais curto em bytes vence!
Saída de amostra para entrada 10
: 10560.1
(Eu usei Python urllib
para isso)
PS: alguém sabe por que o Google faz isso?
http://google.com
sempre retorna 261 bytes para mim ...https://google.com/ncr
pode retornar mais.http://google.com
sempre retorna 10422 bytes para mim ...http://google.com
enviada. É claro que esse não é o objetivo do desafio, então o desafio deve ser editado pela IMO para refletir isso.Respostas:
Bash + utilitários do sistema,
56534948 bytesAtualização: salvou 4 bytes graças ao Digital Trauma e mais 1 byte a Dennis
Na minha resposta original, eu estava usando
yes
em combinação comxargs
para emular um loop for. Mascurl
pode aceitar como entrada uma lista de URLs, portanto, apenas a saídayes
é realmente necessária.Ao
curl
acessar o google.com , ele recebe uma página de redirecionamento 302 que possui o novo URL na seção body, portanto-L
é necessária a opção para segui-lo.Execute o exemplo: resposta é impressa em STDOUT, redireciono STDERR apenas para maior clareza
Explicação: (do código enviado inicialmente)
Edit: Eu substituí
wc -m
porwc
, porque, mesmo sem argumentos, ele imprime mais 2 estatísticas do que o desejado, o mesmodc
script após esta saída ainda funciona, porque a contagem que queremos é, felizmente, colocada no topo da pilha durante a análise.fonte
xargs
. Obrigado, atualizei a resposta.-s
. Saída dispersa para STDERR é permitida por padrão.MATL , 28 bytes
Gif ou não aconteceu:
Como funciona
fonte
PowerShell , 48 bytes
Explicação
1
número inteiro de entrada.Invoke-RestMethod
(irm
) a página inicial do Google. O resultado não é JSON, portanto, ele retornará o corpo literalmente, em vez de desserializar.Measure-Object
(measure
), obtendo uma média daLength
propriedade das seqüências de entrada (os corpos).Average
propriedade resultante .fonte
|% A*
era possível, eu sempre evitadomeasure
porque pensei que não poderia curinga o nome da propriedade ...|? A*
algumas coisas legais também. Preciso examinar meus arquivos de apresentação e adicionar esse material ao tópico de dicas.Java 8,
197184182181 bytesGolfe:
Ungolfed:
Isso vaza recursos, mas esse é um preço pequeno a ser pago em busca do menor número de bytes.
fonte
n->{int s=0,i=0;for(;i<n;++i)try{...}catch(Exception e){}return s*1.0/n;}
. Não tenho certeza se você pode substituirs*1.0/n
no retorno pors*1f/n
, mas vale a pena tentar #for(;i<n;++i)
pode ser alteradofor(;i++<n;)
para -1 byte.Pitão, 25 bytes
'
é a função aberta no Pyth e, quando uma string é iniciadahttp
, ela executa um resultado GET para esse site. O valor retornado é uma lista debytes
objetos. Infelizmente, o Pyth'ss
não sabe como concatenar esses objetos, então, em vez dels
, eu usoslM
para obter o comprimento total. Isso é realizado um número de vezes igual à entrada porm
e os resultados são calculados em média por.O
.fonte
05AB1E , 15 bytes
Código:
Explicação:
Usa a codificação CP-1252 . Quando executado no intérprete offline, recebo o seguinte:
fonte
PHP,
9078 bytesfonte
join(file())
em vez defile_get_contents()
economizar alguns bytes.echo
. Também você pode usar em$i
vez de$argv[1]
como o divisor.Mathematica, 58 bytes
Função anônima. Pega um número como entrada e retorna um número como saída.
fonte
N@
? Você não está imprimindo, portanto não há motivo para formatá-lo bem.Python, 102 bytes
Ou, se podemos retornar números inteiros em vez de flutuantes, a resposta pode ser 98 bytes:
fonte
)for x in[
. Além disso, se você se restringir ao Python 3, a divisão será automaticamente a divisão flutuante e você poderá removê-lo0.0
.[]
2º caso -sum
pega umgenerator
CJam , 23 bytes
Não funciona no TIO por razões de segurança.
Execução de teste
Como funciona
fonte
CJam, 27 bytes
CJam assume HTTP se não for especificado.
Explicação
fonte
Clojure, 102 bytes
Ungolfed:
#(count (slurp (clojure.java.io/reader "http://www.google.com")))
é uma função local que conta os bytes de uma solicitação http para o google,repeatedly
chama a função n vezes e faz uma lista das contagens retornadas, reduz somas os resultados juntos e, finalmente, é dividido por n para fazer uma média. A redução é iniciada em 0,0 para forçar o resultado a flutuar - caso contrário, a divisão resultaria em um racional. Tudo está envolvido em uma função anônima que leva o número de vezes para nomear a solicitação.fonte
(clojure.java.io/reader)
peça é desnecessária. É feito automaticamente nos bastidores, se você passar uma corda.Python 3, 95 bytes
Solução recursiva
Onde
n=i=int(input())
biblioteca de solicitações
fonte
Python 3 + [Requests](http://docs.python-requests.org/en/master/user/install/#install), 95 bytes
urllib2
é uma biblioteca Python nativa (pré-instalada) docs.python.org/2/library/urllib2.html, para que qualquer pessoa que esteja baixando o Python possa executar imediatamente seu código. Não consigo executar seu código no meu Python 3 sem essa biblioteca.Perl, 66 bytes
51 bytes + 14 bytes para
-MLWP::Simple<space>
+ 1 byte para-p
.Solução simples usando LWP :: Simple . A
get
função é exportada por padrão e retorna o conteúdo da resposta com êxito.Perl 5.14+,
9493 bytes (apenas módulos principais)79 bytes + 13 bytes para
-MHTTP::Tiny<space>
+ 1 byte para-p
.Usa HTTP :: Tiny , que está no núcleo desde o Perl 5.14.
Como funciona
Este:
é a sintaxe indireta do objeto equivalente a isso:
e salva três bytes. o
get
método retorna um hashref com o conteúdo armazenado sob acontent
chave.Para obter o conteúdo real da resposta, fazemos:
que é equivalente a:
mas salva um byte quando adicionamos
length
:fonte
Rebol, 69 bytes
fonte
Clojure, 70 bytes
Uma dobra em
n
longo alcance. Soma a duração de cada solicitação e a divide pelo número de solicitações. Devido à maneira como Clojure lida com a divisão, isso retorna uma fração, não um decimal. Se isso for inaceitável, posso corrigi-lo ao custo de alguns bytes.fonte
Ruby, 73 + 10 = 83 bytes
Usa a
-rnet/http
bandeira.fonte
Lisp comum + quicklisp / dexador , 23 + 72 = 95 bytes
Se o quicklisp estiver instalado no sistema, ele fará o download e instalará o dexador conforme necessário.
Prelúdio:
Código
Ungolfed:
Explicação
(dex:get "http://google.com")
Isso executa a solicitação da web para o google e retorna cinco valores:
(length (dex:get ...))
Se você não solicitar explicitamente o contrário, o Common Lisp descartará todos os valores de retorno que não sejam o primeiro, portanto, a função length vê apenas a resposta http em si e retorna o comprimento dessa string.
(loop :repeat n :sum (length ...))
Isso calcula a duração da resposta n vezes e as adiciona.
(/ (loop ...) n)
Isso divide os comprimentos somados por n para calcular a média.
(lambda (n) ...)
Isso agrupa o corpo do código em uma função anônima que recebe n como argumento e retorna o comprimento médio da resposta para n solicitações da web em http://google.com .
fonte