Google की औसत लंबाई


24

मैं Pyth के url request feature के साथ खिलवाड़ कर रहा था, और ध्यान दिया कि google ने हमेशा मेरे लिए थोड़ी अलग लंबाई के साथ प्रतिक्रिया दी, आमतौर पर ~10500वर्ण।

तो इस चुनौती में आपका काम html प्रतिक्रिया की औसत लंबाई का प्रिंट आउट लेना है http://google.com

चश्मा

  • आप एक इनपुट लेंगे nजो बनाने के लिए अनुरोधों की संख्या है।
  • प्रत्येक अनुरोध के लिए, आप एक HTTP अनुरोध प्राप्त करेंगे।
  • आप प्रतिक्रिया निकाय (HTML पाठ) की गणना करेंगे, हेडर नहीं।
  • प्रतिक्रियाओं की लंबाई के अंकगणित माध्य का आउटपुट करें।
  • आप केवल url का उपयोग कर सकते हैं http://google.com, किसी अन्य का नहीं।
  • यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है !

इनपुट के लिए नमूना आउटपुट 10: 10560.1

(मैंने उसके urllibलिए पायथन का इस्तेमाल किया )

पुनश्च: क्या किसी को पता है कि Google ऐसा क्यों करता है?


1
अजीब बात है, http://google.comहमेशा मेरे लिए 261 बाइट देता है ... https://google.com/ncrहालांकि अधिक वापस आ सकता है।
नील

@ नील ऑड, http://google.comमेरे लिए हमेशा 10422 बाइट्स लौटाता है ...
लेगियन मैमल 978

क्या पूर्णांकों का अनुपात (यानी, एक सटीक अंश) वापस किया जा सकता है?
लीजियनममाल 978

5
@ नील आपको 261 बाइट्स मिलते हैं क्योंकि आपको वास्तव में एक यूआरएल पुनर्निर्देशन, कोड 302 प्राप्त होता है, जिसका पालन करने के लिए शरीर में नया URL होता है। कुछ प्रोग्राम, जैसे कि लिनक्स पर कर्ल, उस नए URL को स्वचालित रूप से अनुसरण करने के लिए एक विशिष्ट तर्क की आवश्यकता होती है।
शीशमारा

3
@seshoumara टीबीएच चुनौती पुनर्निर्देशन का पालन करने के लिए निर्दिष्ट नहीं करता है, इसलिए मुझे उम्मीद है कि नील का उत्तर डिफ़ॉल्ट रूप से सही उत्तर होगा, क्योंकि यह वास्तविक HTTP प्रतिक्रिया http://google.comभेजता है। बेशक यह चुनौती की बात नहीं है, इसलिए इस बात को प्रतिबिंबित करने के लिए चुनौती को संपादित किया जाना चाहिए।
एरोन

जवाबों:


20

बैश + सिस्टम उपयोगिताओं, 56 53 49 48 बाइट्स

अद्यतन: डिजिटल ट्रॉमा के लिए 4 बाइट्स को बचाया और डेनिस के लिए 1 बाइट अधिक धन्यवाद

curl -L `yes google.com|sed $1q`|wc|dc -e1k?$1/p

अपने मूल उत्तर में मैं लूप के लिए अनुकरण करने के लिए yesसंयोजन में उपयोग कर रहा था xargs। लेकिन curlइनपुट को URL की सूची के रूप में स्वीकार कर सकते हैं, इसलिए yesवास्तव में केवल आउटपुट की आवश्यकता है।

जब google.comcurl एक्सेस करता है, तो यह 302 रीडायरेक्शन पेज प्राप्त करता है, जिसमें बॉडी सेक्शन में नया URL होता है , इसलिए इसे फॉलो करने के लिए विकल्प की आवश्यकता होती है।-L

रन उदाहरण: उत्तर को STDOUT में मुद्रित किया जाता है, मैं स्पष्टता के लिए STDERR को पुनर्निर्देशित करता हूं

me@LCARS:/PPCG$ ./google_length.sh "8" 2> /dev/null
10583.2

स्पष्टीकरण: (शुरू में प्रस्तुत कोड का)

yes google.com|     # repeatedly output a line containing the string "google.com"
sed $1q|            # print the first $1 lines only (shorter than head -$1)
xargs curl -sL|     # xargs reads the input lines and executes "curl -sL" with the
                    #current input line as an additional argument.
wc -m|              # count the number of characters
dc -e1k?$1/p        # dc script: set precision to 1, read input, push $1 and divide

संपादित करें: मैंने इसके wc -mसाथ प्रतिस्थापित किया wc, क्योंकि भले ही बिना तर्क के यह मेरे द्वारा वांछित एक से अधिक आंकड़े प्रिंट dcकरता हो, इस आउटपुट के बाद एक ही स्क्रिप्ट अभी भी काम करता है, क्योंकि हम जो गिनती चाहते हैं, वह खुशी से, पार्सिंग के दौरान स्टैक के शीर्ष पर रखी गई है।


@DigitalTrauma बहुत अच्छा है, कोई ज़रूरत नहीं है xargs। धन्यवाद, मैंने जवाब अपडेट किया।
शीशमारा

2
आप की जरूरत नहीं है -s। डिफ़ॉल्ट रूप से STDERR को स्थिर आउटपुट की अनुमति है।
डेनिस

@ डेनिस धन्यवाद, जवाब अपडेट किया गया।
शीशमारा

17

MATL , 28 बाइट्स

:"'http://google.com'Xin]vYm

Gif या ऐसा नहीं हुआ:

यहाँ छवि विवरण दर्ज करें

यह काम किस प्रकार करता है

:                      % Implicitly input n. Push [1 2 ... n]
"                      % For each
  'http://google.com'  %   Push this string
  Xi                   %   URL read. Gives a string
  n                    %   Number of elements
]                      % End
v                      % Concatenate stack contents into a vertical vector
Ym                     % Mean. Implicitly display

12

पॉवरशेल , 48 बाइट्स

1.."$args"|%{irm google.com}|measure Le* -a|% A*

व्याख्या

  1. 1इनपुट पूर्णांक से एक सीमा बनाएं ।
  2. श्रेणी में प्रत्येक मान के लिए Invoke-RestMethod( irm) Google मुखपृष्ठ। इसका परिणाम JSON नहीं है, इसलिए यह शरीर को डिस्बेरिअलाइज़ करने के बजाय शब्दशः लौटा देगा।
  3. इनपुट स्ट्रिंग्स (निकायों) की संपत्ति का औसत प्राप्त करने के लिए उसे Measure-Object( measure) भेजें Length
  4. परिणामी Averageसंपत्ति का विस्तार करें ।

पता नहीं |% A*था संभव है, मैं हमेशा टाल गया measureक्योंकि मुझे लगा कि आप संपत्ति के नाम को वाइल्डकार्ड नहीं कर सकते ...
colsw

2
@ConnorLSW हाँ, यह कुछ ऐसा है जिसे मैंने हाल ही में PowerShell में कोड गोल्फ पर एक प्रस्तुति तैयार करते समय खोजा था। की जाँच करें |? A*और साथ ही कुछ शांत सामान के लिए। मुझे अपनी प्रस्तुति फ़ाइलों को देखने और टिप्स थ्रेड में इस सामान को जोड़ने की आवश्यकता है।
ब्रितानी


10

जावा 8, 197 184 182 181 बाइट्स

golfed:

n->{int s=0,i=0;while(i++<n)try{s+=new java.util.Scanner(new java.net.URL("http://google.com").openStream()).useDelimiter("\\A").next().length();}catch(Exception e){}return s*1f/n;}

Ungolfed:

public class AverageLengthOfGoogle {

  public static void main(String[] args) {
    float bytes = f(n -> {
      int s = 0, i = 0;
      while (i++ < n) {
        try {
          s += new java.util.Scanner(new java.net.URL("http://google.com").openStream())
              .useDelimiter("\\A").next().length();
        }
        catch (Exception e) {
        }
      }
      return s * 1f / n;
    } , 10);
    System.out.println(bytes);
  }

  private static float f(java.util.function.IntFunction<Float> f, int n) {
    return f.apply(n);
  }
}

यह संसाधनों को लीक करता है, लेकिन यह सबसे कम बाइट की तलाश में भुगतान करने के लिए एक छोटी सी कीमत है।


1
संभावित सुधार: 1. डबल -> फ्लोट 2. google.com -> google.com 3. शायद एन्कोडिंग निर्दिष्ट करना आवश्यक नहीं है, कुछ पदावनत करने की विधि होनी चाहिए आपको कुछ 20 बाइट्स बचाना चाहिए
kukis

@kukis धन्यवाद, कि 13 बाइट्स मुंडा।

n->{int s=0,i=0;for(;i<n;++i)try{...}catch(Exception e){}return s*1.0/n;}। यकीन नहीं है कि आप s*1.0/nवापसी के साथ बदल सकते हैं s*1f/n, लेकिन यह एक कोशिश के लायक है
रोमन ग्रैफ

@ RomanGräf हां, यह काम करता है। धन्यवाद!

for(;i<n;++i)for(;i++<n;)-1 बाइट के लिए बदला जा सकता है ।
केविन क्रूज़सेन

7

पायथ, 25 बाइट्स

.OmslM'"http://google.com

'पाइथ में खुला कार्य है, और जब एक स्ट्रिंग के साथ शुरू किया जाता है http, तो यह उस वेबसाइट पर एक जीईटी अनुनाद करता है। वापसी मूल्य bytesवस्तुओं की एक सूची है । दुर्भाग्य से, पायथ sको यह पता नहीं है कि इन वस्तुओं को कैसे बदलना है , इसलिए इसके बजाय ls, मैं slMकुल लंबाई प्राप्त करने के लिए उपयोग करता हूं । इसके द्वारा इनपुट के बराबर कई बार प्रदर्शन किया जाता है mऔर परिणाम औसत आते हैं .O


7

05AB1E , 15 बाइट्स

कोड:

F’Š¹.ŒŒ’.wgO}¹/

स्पष्टीकरण:

F           }     # Input times do..
 ’Š¹.ŒŒ’          #   Push the string "google.com"
        .w        #   Read all and wrap into a string
          g       #   Get the length
           O      #   Sum it up with the total
             ¹/   # Divide by input

CP-1252 एन्कोडिंग का उपयोग करता है । ऑफ़लाइन दुभाषिया में चलने पर मुझे निम्नलिखित मिलते हैं:

> py -3 05AB1E.py -c test.abe
1
11039.0

> py -3 05AB1E.py -c test.abe
2
11070.0

> py -3 05AB1E.py -c test.abe
3
11046.666666666666

> py -3 05AB1E.py -c test.abe
4
11029.75

> py -3 05AB1E.py -c test.abe
5
11015.8

या तो आपके पास google.com के लिए अंतर्निहित है या कुछ और चल रहा है!
प्योरफ्रेट

@Pureferret यह वास्तव में एक संकुचित स्ट्रिंग शब्दकोश है। आप इसे यहाँ आज़मा सकते हैं :)।
अदनान

क्या गोल्फ के लिए समर्पित भाषाओं का उपयोग किया जा रहा है? यदि ऐसा है, तो मैं सैद्धांतिक रूप से भाषा बना सकता हूं जो इन सभी चीजों को एक बाइट में करेगा
kukis

@kukis समर्पित गोल्फिंग भाषाओं का उपयोग करने की अनुमति है, यदि और केवल उपयोग किया जाने वाला भाषा संस्करण चुनौती को स्थगित नहीं करता है। यदि आप एक ऐसी भाषा बनाते हैं जो इन सभी चीजों को एक बाइट में कर सकती है, लेकिन संकलक चुनौती के बाद बनाया गया था, यह इस और इस दोनों का उल्लंघन है ।
अदनान

7

PHP, 90 78 बाइट्स

while($i++<$argv[1]){$s+=strlen(file_get_contents('http://google.com'));}echo $s/$argv[1];

while($i++<$argv[1])$s+=strlen(join(file('http://google.com')));echo$s/($i-1);
  • छोटे कार्यों / चर का इस्तेमाल किया और टिप्पणीकारों द्वारा उल्लिखित अनावश्यक वाक्य रचना को हटा दिया

2
वेलकम टू कोडगल्फ.से! join(file())इसके बजाय file_get_contents()आप कुछ बाइट्स बचाता है।
क्रिस्टोफ

2
इसके अलावा आप घुंघराले ब्रेसिज़ और उसके बाद की जगह को छोड़ सकते हैं echo। इसके अलावा आप भाजक $iके $argv[1]रूप में उपयोग कर सकते हैं ।
user59178

6

मैथेमेटिका, 58 बाइट्स

N@Mean[StringLength@URLFetch@"http://google.com"~Table~#]&

अनाम फ़ंक्शन। एक नंबर को इनपुट के रूप में लेता है, और एक नंबर को आउटपुट के रूप में देता है।


आपको आवश्यकता क्यों है N@? आप इसे प्रिंट नहीं कर रहे हैं, इसलिए इसे अच्छी तरह से प्रारूपित करने का कोई कारण नहीं है।
पावेल

@Pavel ओपी ने निर्दिष्ट किया कि सटीक अंशों की अनुमति नहीं है।
लीजनमोनमाल 978 3

3

पायथन, 102 बाइट्स

import urllib2
f=lambda n:sum([len(urllib2.urlopen(x).read()) for x in ['http://google.com']*n],0.0)/n

या, यदि हम तैरने के बजाय पूर्णांक वापस कर सकते हैं, तो उत्तर 98 बाइट्स हो सकता है:

import urllib2
f=lambda n:sum([len(urllib2.urlopen(x).read()) for x in ['http://google.com']*n])/n

1
आप वहां एक दो स्थान हटा सकते हैं। )for x in[। इसके अलावा, यदि आप अपने आप को पायथन 3 तक सीमित रखते हैं, तो विभाजन स्वचालित रूप से फ्लोट डिवीजन होगा, और आप हटा सकते हैं 0.0
mbomb007

1
आपको []दूसरे मामले में भी ज़रूरत नहीं sumहैgenerator
बहरोम

3

सीजेएम , 23 बाइट्स

rd_"google.com"a*:gs,\/

सुरक्षा कारणों से TIO पर काम नहीं करता है।

परीक्षण चालन

$ echo -n 'rd_"google.com"a*:gs,\/' > google-avg.cjam
$ wc -c google-avg.cjam
23 google-avg.cjam
$ java -jar cjam-0.6.5.jar google-avg.cjam <<< 10; echo
10663.2
$ java -jar cjam-0.6.5.jar google-avg.cjam <<< 10; echo
10650.0
$ java -jar cjam-0.6.5.jar google-avg.cjam <<< 10; echo
10651.0
$ java -jar cjam-0.6.5.jar google-avg.cjam <<< 10; echo
10651.4
$ java -jar cjam-0.6.5.jar google-avg.cjam <<< 10; echo
10673.5

यह काम किस प्रकार करता है

 rd                      e# Read a double from STDIN. Let's call it D.
   _                     e# Push a copy of D.
    "google.com"a        e# Wrap the string in an array, pushing ["google.com"].
                 *       e# Repeat the array D times.
                  :g     e# Map `get` over the array, making D requests to the URL.
                    s    e# Combine all D responses into a single string.
                     ,   e# Compute the length.
                      \  e# Swap the length with the original D.
                       / e# Perform division.

1

सीजेएम, 27 बाइट्स

{"google.com"g,}ri*]_:+\,d/

यदि निर्दिष्ट नहीं है तो CJam HTTP मान लेता है।

व्याख्या

{"google.com"g,}             A block which fetches from http://google.com and gets its length
                ri*          Run this block a number of times equal to the input
                   ]         Collect all the results in an array
                    _        Duplicate the array
                     :+      Sum it
                       \     Swap back to the original array
                        ,    Get its length
                         d/  Cast to double and divide 
                              (without casting, it would be integer division)

1

क्लोजर, 102 बाइट्स

(fn[n](/(reduce + 0.0(repeatedly n #(count(slurp(clojure.java.io/reader"http://www.google.com")))))n))

Ungolfed:

(fn [n]
  (/
   (reduce + 0.0
           (repeatedly n
                       #(count (slurp (clojure.java.io/reader "http://www.google.com")))))
   n))

#(count (slurp (clojure.java.io/reader "http://www.google.com")))एक स्थानीय फ़ंक्शन है जो Google को http अनुरोध से बाइट्स गिनता है, repeatedlyफ़ंक्शन को n बार कॉल करता है और लौटी हुई गणनाओं से एक सूची बनाता है, परिणामों को एक साथ घटाता है, और अंत में एक औसत बनाने के लिए n द्वारा विभाजित किया जाता है। परिणाम को फ्लोट में परिणत करने के लिए 0.0 को कम करना शुरू किया जाता है- अन्यथा विभाजन एक तर्कसंगत परिणाम होगा। पूरी चीज़ एक अनाम फ़ंक्शन में लिपटी हुई है जो अनुरोध का नाम देने के लिए कई बार लेती है।


मुझे शपथ है कि मैंने इस उत्तर की नकल नहीं की! मेरा तुम्हारा काफी करीब खत्म हो गया। (clojure.java.io/reader)भाग btw अनावश्यक है। यदि आप एक स्ट्रिंग पास करते हैं तो यह पर्दे के पीछे स्वचालित रूप से किया जाता है।
कैरिजनेट

1

पायथन 3, 95 बाइट्स

पुनरावर्ती समाधान

import requests as r
f=lambda n,t:f(n-1,t+len(r.get('http://google.com').text)) if n>0 else t/i

कहा पे n=i=int(input())

पुस्तकालय का अनुरोध करता है


अनुरोध एक बाहरी लाइब्रेरी लगती है, इसलिए आप उससे लिंक जोड़ना चाहेंगे। कुछ इस तरहPython 3 + [Requests](http://docs.python-requests.org/en/master/user/install/#install), 95 bytes
वैल्यू इंक

@ValueInk, जोड़ा, आपको इसे स्थापित करने की आवश्यकता नहीं है, यह python3 के साथ आता है (कम से कम यह मेरे लिए डिफ़ॉल्ट रूप से आया था)। क्यों अन्य अजगर जवाब यह करने की जरूरत नहीं है?
मिगेल

urllib2एक देशी (पहले से स्थापित) पायथन लाइब्रेरी docs.python.org/2/library/urllib2.html है, ताकि कोई भी पायथन डाउनलोड करने वाला तुरंत अपना कोड चला सके। मैं उस पुस्तकालय के बिना अपने पायथन 3 पर आपका कोड नहीं चला सकता।
वैल्यू इंक

@ValueInk कोई समस्या नहीं, यहाँ मेरा पहला योगदान, मैं नहीं जानता था
मिगेल

1

पर्ल, 66 बाइट्स

perl -MLWP::Simple -pe'map$t+=length get"http://google.com",1..$_;$_=$t/$_'

51 बाइट्स + के लिए 14 बाइट्स -MLWP::Simple<space>+ 1 बाइट के लिए -p

LWP का उपयोग करके सीधा समाधान :: सरलgetसमारोह डिफ़ॉल्ट रूप से निर्यात किया और सफलता पर प्रतिक्रिया सामग्री देता है।

पर्ल 5.14+, 94 93 बाइट्स (केवल मुख्य मॉड्यूल)

perl -MHTTP::Tiny -pe'map$t+=length${+get{new HTTP::Tiny}"http://google.com"}{content},1..$_;$_=$t/$_'

79 बाइट्स + के लिए 13 बाइट्स -MHTTP::Tiny<space>+ के लिए 1 बाइट्स -p

HTTP :: टिनी का उपयोग करता है , जो कि पर्ल 5.14 के बाद से कोर में है।

यह काम किस प्रकार करता है

यह:

get{new HTTP::Tiny}"http://google.com"

इस के परोक्ष वस्तु सिंटेक्स बराबर है:

HTTP::Tiny->new->get("http://google.com")

और तीन बाइट्स बचाता है। getविधि के तहत संग्रहीत सामग्री के साथ एक hashref रिटर्न contentकुंजी।

वास्तविक प्रतिक्रिया सामग्री प्राप्त करने के लिए, हम करते हैं:

${+get{new HTTP::Tiny}"http://google.com"}{content}

जो इसके बराबर है:

(get{new HTTP::Tiny}"http://google.com")->{content}

जब हम जोड़ते हैं तो एक बाइट बचाता है length:

length(foo)->{bar}  # wrong, equivalent to (length(foo))->{bar}
length+(foo)->{bar}
length${+foo}{bar}

0

Rebol, 69 बाइट्स

n: 0 loop i: do input[n: n + length? read http://www.google.com]n / i

0

क्लोजर, 70 बाइट्स

#(/(reduce(fn[a _](+ a(count(slurp"http://google.com"))))0(range %))%)

एक nलंबी सीमा पर एक गुना । प्रत्येक अनुरोध की लंबाई को बताता है, फिर उसे अनुरोधों की संख्या से विभाजित करता है। जिस तरह से क्लॉजुर डिवीजन को संभालता है, उसके कारण यह एक अंश लौटाता है, दशमलव नहीं। यदि यह अस्वीकार्य है, तो मैं इसे युगल बाइट्स की कीमत पर ठीक कर सकता हूं।

(defn avg-request-len [n]
  (/
    (reduce (fn [acc _]
              (+ acc (count (slurp "http://google.com"))))
            0
            (range n))
    n))


0

कॉमन लिस्प + quicklisp / dexador , 23 + 72 = 95 बाइट्स

यदि Quicklisp सिस्टम पर स्थापित है, तो यह nxcesary के रूप में dexador को डाउनलोड और इंस्टॉल करेगा।

प्रस्तावना:

(ql:quickload :dexador)

कोड

(lambda(n)(/(loop :repeat n :sum(length(dex:get"http://google.com")))n))

Ungolfed:

(lambda (n)
  (/ (loop :repeat n 
           :sum (length (dex:get "http://google.com")))
     n))

explaination

(dex:get "http://google.com")

यह Google के लिए वेब अनुरोध करता है और पाँच मान लौटाता है:

  1. वेब खुद को एक स्ट्रिंग या बाइट सरणी (सामग्री प्रकार के आधार पर) के रूप में अनुरोध करता है
  2. Http स्थिति कोड
  3. HTTP प्रतिक्रिया हेडर का एक हैश नक्शा
  4. एक QURI ऑब्जेक्ट पुनर्निर्देशित करने के बाद अंतिम URI का प्रतिनिधित्व करता है
  5. सॉकेट वेब सर्वर के साथ संवाद करने के लिए उपयोग किया जाता है (यदि यह सर्वर द्वारा बंद नहीं किया गया था या फ़ंक्शन के लिए वैकल्पिक आर्ग्स में से एक है)

(length (dex:get ...))

यदि आप अन्यथा अनुरोध नहीं करते हैं, तो कॉमन लिस्प पहले के अलावा अन्य सभी रिटर्न मानों को छोड़ देगा, इसलिए लंबाई फ़ंक्शन केवल http प्रतिक्रिया को ही देखता है और इस स्ट्रिंग की लंबाई लौटाता है।

(loop :repeat n :sum (length ...))

यह प्रतिक्रिया की लंबाई n बार गणना करता है और उन्हें जोड़ता है।

(/ (loop ...) n)

यह औसत गणना करने के लिए n द्वारा विभाजित लंबाई को विभाजित करता है।

(lambda (n) ...)

यह एक अनाम फ़ंक्शन में कोड के शरीर को लपेटता है जो एक तर्क के रूप में n लेता है और http://google.com पर n वेब अनुरोधों के लिए औसत प्रतिक्रिया लंबाई देता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.