Bałam się z funkcją żądania adresu URL Pyth'a i zauważyłem, że Google zawsze udzielało mi odpowiedzi o nieco innej długości, zwykle ~10500
znaków.
Twoim zadaniem w tym wyzwaniu jest wydrukowanie średniej długości odpowiedzi HTML http://google.com
.
Okular
- Podejmiesz dane,
n
które są liczbą żądań do złożenia. - Dla każdego żądania utworzysz żądanie HTTP get.
- Policzysz treść odpowiedzi (tekst HTML), a nie nagłówki.
- Wyprowadza średnią arytmetyczną długości odpowiedzi.
- Możesz uzyskać dostęp tylko do adresu URL
http://google.com
, a nie do żadnego innego. - To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach !
Przykładowe dane wyjściowe dla danych wejściowych 10
: 10560.1
(Użyłem urllib
do tego Pythona )
PS: czy ktoś wie, dlaczego Google to robi?
http://google.com
zawsze zwraca mi 261 bajtów ...https://google.com/ncr
może jednak zwrócić więcej.http://google.com
zawsze zwraca mihttp://google.com
wysyła. Oczywiście nie o to chodzi w wyzwaniu, więc wyzwanie powinno być edytowane przez IMO, aby to odzwierciedlić.Odpowiedzi:
Bash + narzędzia systemowe,
56534948 bajtówAktualizacja: zapisano 4 bajty dzięki Digital Trauma i 1 bajt więcej dzięki Dennis
W mojej oryginalnej odpowiedzi użyłem
yes
w połączeniu zxargs
emulacją pętli for. Alecurl
może zaakceptować jako dane wejściowe listę adresów URL, więc tylko dane wyjścioweyes
są faktycznie potrzebne.Gdy
curl
uzyskuje dostęp do google.com , otrzymuje stronę przekierowującą 302, która ma nowy adres URL w sekcji treści, więc-L
konieczne jest skorzystanie z tej opcji.Uruchom przykład: odpowiedź jest wypisywana na STDOUT, przekierowuję STDERR tylko dla jasności
Objaśnienie: (pierwotnie przesłanego kodu)
Edit: Wymieniłem
wc -m
zwc
, bo nawet jeśli bez argumentów drukuje 2 więcej niż jednego statystyk chciałem, ten samdc
skrypt po to wyjście nadal działa, ponieważ chcemy liczyć się, szczęśliwie, umieszczone na górze stosu podczas parsowania.źródło
xargs
. Dzięki, zaktualizowałem odpowiedź.-s
. Wyjściowe przesyłanie do STDERR jest domyślnie dozwolone.MATL , 28 bajtów
Gif lub tak się nie stało:
Jak to działa
źródło
PowerShell , 48 bajtów
Wyjaśnienie
1
do całkowitej liczby wejściowej.Invoke-RestMethod
(irm
) strona główna Google. Wynikiem nie jest JSON, więc zwróci ciało dosłownie zamiast deserializować.Measure-Object
(measure
), uzyskując średnią zLength
właściwości ciągów wejściowych (obiektów).Average
właściwość.źródło
|% A*
to możliwe, zawsze tego unikałem,measure
ponieważ myślałem, że nie można|? A*
kilka fajnych rzeczy. Muszę spojrzeć na moje pliki prezentacji i dodać te rzeczy do wątku ze wskazówkami.Java 8,
197184182181 bajtówGra w golfa:
Nie golfowany:
To przecieka zasoby, ale jest to niewielka cena do zapłacenia w poszukiwaniu najmniejszej ilości bajtów.
źródło
n->{int s=0,i=0;for(;i<n;++i)try{...}catch(Exception e){}return s*1.0/n;}
. Nie jestem pewien, czy możesz wymienićs*1.0/n
w zamians*1f/n
, ale warto spróbowaćfor(;i<n;++i)
można zmienićfor(;i++<n;)
na -1 bajt.Pyth, 25 bajtów
'
jest funkcją otwartą w Pyth, a gdy otrzyma ciąg rozpoczynający się odhttp
, wykonuje żądanie GET dla tej witryny. Zwracana wartość to listabytes
obiektów. Niestety, Pyths
nie wie, jak połączyć te obiekty, więc zamiast tegols
używamslM
do uzyskania całkowitej długości. Odbywa się to kilka razy równa wartości wejściowej przezm
, a wyniki są uśredniane przez.O
.źródło
05AB1E , 15 bajtów
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Po uruchomieniu w tłumaczu offline otrzymuję następujące informacje:
źródło
PHP,
9078 bajtówźródło
join(file())
zamiastfile_get_contents()
oszczędzać ci kilka bajtów.echo
. Możesz także użyć$i
zamiast$argv[1]
dzielnika.Mathematica, 58 bajtów
Funkcja anonimowa. Pobiera liczbę jako dane wejściowe i zwraca liczbę jako dane wyjściowe.
źródło
N@
? Nie drukujesz go, więc nie ma powodu, aby ładnie go formatować.Python, 102 bajty
Lub, jeśli możemy zwrócić liczby całkowite zamiast liczb zmiennoprzecinkowych, odpowiedź może wynosić 98 bajtów:
źródło
)for x in[
. Ponadto, jeśli ograniczysz się do Pythona 3, podział będzie automatycznie podziałem zmiennoprzecinkowym i możesz go usunąć0.0
.[]
w drugim przypadku -sum
trwagenerator
CJam , 23 bajty
Nie działa na TIO ze względów bezpieczeństwa.
Testowe uruchomienie
Jak to działa
źródło
CJam, 27 bajtów
CJam zakłada HTTP, jeśli nie jest określony.
Wyjaśnienie
źródło
Clojure, 102 bajty
Nie golfowany:
#(count (slurp (clojure.java.io/reader "http://www.google.com")))
jest funkcją lokalną, która zlicza bajty z żądania HTTP do Google,repeatedly
wywołuje funkcję n razy i tworzy listę ze zwróconych zliczeń, zmniejsza sumy wyników razem, a na koniec jest dzielona przez n, aby uzyskać średnią. Zmniejszenie rozpoczyna się od wartości 0,0, aby wymusić wynik na liczbę zmiennoprzecinkową - w przeciwnym razie podział byłby racjonalny. Całość jest zapakowana w anonimową funkcję, która tyle razy nazywa nazwę żądania.źródło
(clojure.java.io/reader)
część jest niepotrzebna. Odbywa się to automatycznie za kulisami, jeśli podasz ciąg znaków.Python 3, 95 bajtów
Rozwiązanie rekurencyjne
gdzie
n=i=int(input())
biblioteka żądań
źródło
Python 3 + [Requests](http://docs.python-requests.org/en/master/user/install/#install), 95 bytes
urllib2
jest natywną (wstępnie zainstalowaną) biblioteką Python docs.python.org/2/library/urllib2.html, dzięki czemu każdy, kto pobierze Python, może natychmiast uruchomić swój kod. Nie mogę uruchomić twojego kodu na moim Pythonie 3 bez tej biblioteki.Perl, 66 bajtów
51 bajtów + 14 bajtów dla
-MLWP::Simple<space>
+ 1 bajtu dla-p
.Proste rozwiązanie za pomocą LWP :: Proste .
get
Funkcja jest domyślnie eksportowane i zwraca zawartość odpowiedzi na sukces.Perl 5.14+,
9493 bajty (tylko moduły podstawowe)79 bajtów + 13 bajtów dla
-MHTTP::Tiny<space>
+ 1 bajtu dla-p
.Używa HTTP :: Tiny , który jest rdzeniem od Perla 5.14.
Jak to działa
To:
jest pośrednim odpowiednikiem składni obiektowej tego:
i oszczędza trzy bajty.
get
Metoda zwraca hashref z treścią przechowywane podcontent
kluczem.Aby uzyskać rzeczywistą treść odpowiedzi, wykonujemy:
co jest równoważne z:
ale oszczędza jeden bajt, gdy dodajemy
length
:źródło
Rebol, 69 bajtów
źródło
Clojure, 70 bajtów
Krotnie w
n
długim zasięgu. Podsumowuje długość każdego żądania, a następnie dzieli je przez liczbę żądań. Ze względu na sposób, w jaki Clojure obsługuje podział, zwraca to ułamek, a nie dziesiętny. Jeśli jest to nie do przyjęcia, mogę to naprawić kosztem kilku bajtów.źródło
Rubinowy, 73 + 10 = 83 bajty
Używa
-rnet/http
flagi.źródło
Common Lisp + quicklisp / dexador , 23 + 72 = 95 bajtów
Jeśli Quicklisp jest zainstalowany w systemie, pobierze i zainstaluje dexador w razie potrzeby.
Preludium:
Kod
Nie golfowany:
Wyjaśnienie
(dex:get "http://google.com")
Spowoduje to wykonanie żądania internetowego do Google i zwrócenie pięciu wartości:
(length (dex:get ...))
Jeśli nie zażądasz inaczej jawności, Common Lisp odrzuci wszystkie zwracane wartości inne niż pierwsza, więc funkcja długości widzi tylko odpowiedź HTTP i zwraca długość tego ciągu.
(loop :repeat n :sum (length ...))
Oblicza to długość odpowiedzi n razy i dodaje je.
(/ (loop ...) n)
Dzieli to zsumowane długości przez n, aby obliczyć średnią.
(lambda (n) ...)
To zawija treść kodu w anonimowej funkcji, która bierze n jako argument i zwraca średnią długość odpowiedzi dla n żądań internetowych na http://google.com .
źródło