भारित औसत - प्रेसअप प्रवृत्ति समस्या


10

मान लीजिए कि यह सरणी है कि पिछले 28 दिनों में मैंने कितने प्रेस-अप प्राप्त किए हैं:

[
  20,20,20,30,30,30,30,
  35,35,40,40,40,45,45,
  50,50,50,50,50,50,50,
  60,70,80,90,100,110,120
]

जैसा कि आप देख सकते हैं, यह पिछले सप्ताह में एक तेजी से ऊपर की ओर ले गया है, और यह इस डेटा का हिस्सा है जिसमें मैं सबसे अधिक दिलचस्पी रखता हूं। अतीत में यह जितना अधिक है, उतना कम है कि मैं उस डेटा को अपने 'औसत' में रखना चाहता हूं। 'प्रेस-अप की संख्या।

उस अंत तक, मैं एक 'औसत' पर काम करना चाहता हूं जहां प्रत्येक सप्ताह पिछले सप्ताह की तुलना में अधिक हो।


पृष्ठभूमि की जानकारी, इस समस्या का हिस्सा नहीं है।

सामान्य औसत:

सभी मानों का योग / मानों की संख्या

ऊपर के लिए:

1440/28 = 51.42857142857143


भारित औसत:

सरणी को 7 के 4 समूहों में विभाजित करें, और एक नया सरणी शुरू करें।

  • सरणी में पहला समूह जोड़ें।
  • दूसरे समूह को दो बार सरणी में जोड़ें।
  • तीसरे समूह को सरणी में तीन बार जोड़ें।
  • चौथे समूह को चार बार सरणी में जोड़ें।

की लंबाई से नई सरणी के सभी, और विभाजित योग नई सरणी।

ऊपर के लिए:

इसे सरणी में परिवर्तित करें:

[
  20,20,20,30,30,30,30, # first week once
  35,35,40,40,40,45,45, 
  35,35,40,40,40,45,45, # second week twice
  50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,
  50,50,50,50,50,50,50, # third week thrice
  60,70,80,90,100,110,120,
  60,70,80,90,100,110,120,
  60,70,80,90,100,110,120,
  60,70,80,90,100,110,120 # Fourth week four times
]

फिर उस एरे पर एक सामान्य औसत रन करें।

4310/70 = 61.57142857142857

ध्यान दें कि यह पिछले सप्ताह में ऊपर की ओर प्रवृत्ति के कारण सामान्य औसत मूल्य से अधिक है।


नियम:

  • इनपुट 28 नॉनजेटिव पूर्णांकों का एक फ्लैट ऐरे है।
  • आप जिस भी भाषा में लिखना चाहते हैं।
  • एक नंबर आउटपुट।
  • मैं हमेशा टीआईओ लिंक देखना पसंद करता हूं ।
  • सबसे छोटी संख्या में बाइट्स में समस्या को हल करने का प्रयास करें।
  • परिणाम कम से कम 4 दशमलव स्थानों के लिए एक दशमलव सटीक होना चाहिए (या तो परीक्षण के मामले के मूल्यों से छोटा या गोल है) या एक सटीक अंश।

परीक्षण के मामलों:

केस 1: ऊपर की ओर प्रवृत्ति

[
  20,20,20,30,30,30,30,
  35,35,40,40,40,45,45,
  50,50,50,50,50,50,50,
  60,70,80,90,100,110,120
]

सामान्य औसत: 51.42857142857143 भारित औसत: 61.57142857142857

केस 2: लुल्ला को पीछे छोड़ना

(मैं एक बुरा सप्ताह था, लेकिन यह कुछ समय पहले था)

[
  50,50,50,50,50,50,50,
  10,10,10,10,10,10,10,
  50,50,50,50,50,50,50,
  50,50,50,50,50,50,50
]

सामान्य औसत: 40 भारित औसत: 42

केस 3: देते हुए

मेरा सप्ताह खराब था, यह मेरे औसत को तेजी से नीचे खींच रहा है।

[
  50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,
  10,10,10,10,10,10,10
]

सामान्य औसत: 40 भारित औसत: 34

केस 4: बाहर निकलना

ठीक है, इसलिए मैं बस यहां खेल रहा हूं, मैंने सोचा कि सामान्य और भारित औसत के लिए समान मूल्य हो सकता है, लेकिन निश्चित रूप से, यह नहीं था।

[
  60,60,60,60,60,60,60,
  30,30,30,30,30,30,30,
  20,20,20,20,20,20,20,
  15,15,15,15,15,15,15
]

सामान्य औसत: 31.25 भारित औसत: 24.0


बोनस की समस्या:

28 मानों के संयोजन में समान सामान्य औसत और भारित औसत क्या होगा?


हैप्पी गोल्फिंग!



1
आप new_avg = α*weekly_sum + (1-α)*old_avgकुछ के लिए भी घातीय चौरसाई की कोशिश कर सकते हैं - कुछ के लिएα∈(0,1)
17:18

2
मैं 0हर दिन प्रेस-अप करता हूं, इसलिए मेरा भारित औसत मेरे सामान्य औसत के समान है।
नील

@ नहीं आप भारित औसत प्रणाली से लाभान्वित नहीं होंगे;)
AJFaraday

1
सावधान न रहें: पी
ब्रायन एच।

जवाबों:


3

भूसी , 6 बाइट्स

AΣΣṫC7

इसे ऑनलाइन आज़माएं!

चाल का उपयोग करता है डेनिस मेरी जेली प्रस्तुत करने के लिए इस्तेमाल किया । प्रत्येक चंक एन बार दोहराने के बजाय , यह चंक्स की सूची के प्रत्ययों को पुनः प्राप्त करता है, जो चपटे होने के बाद क्रम को छोड़कर, एक ही परिणाम देगा।



5

05AB1E , 8 7 बाइट्स

श्री एक्सकोडर के लिए 1 बाइट धन्यवाद

7ô.s˜ÅA

इसे ऑनलाइन आज़माएं!

व्याख्या

7ô         # split list into groups of 7
  .s       # push suffixes
    ˜      # flatten
     ÅA    # arithmetic mean

@ Mr.Xcoder: ओह, हाँ, मुझे पता था कि मैंने एक माध्य फ़ंक्शन देखा था, लेकिन मैं इसे नहीं ढूंढ सका: P
Emigna

4

जेली , 7 बाइट्स

s7ṫJFÆm

इसे ऑनलाइन आज़माएं!

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

s7ṫJFÆm  Main link. Argument: A (array of length 28)

s7       Split the array into chunks of length 7.
   J     Indices; yield [1, ..., 28].
  ṫ      Tail; yield the 1st, ..., 28th suffix of the result to the left.
         Starting with the 5th, the suffixes are empty arrays.
    F    Flatten the resulting 2D array.
     Æm  Take the arithmetic mean.

हुह, तो इस संदर्भ में x"J$बराबर है ṫJ। दिलचस्प!
श्री एक्सकोडर

की तरह। N -th सरणी के तत्वों को n बार दोहराने के बजाय , यह सभी प्रत्यय लेता है। चपटे होने के बाद, यह एक ही तत्व उत्पन्न करता है, लेकिन एक अलग क्रम में।
डेनिस

4

आर + प्राइर, 32 28 बाइट्स

और सप्ताह में एक ही औसत स्कोर सप्ताह के दौरान साधन की समानता होगी।

pryr::f(s%*%rep(1:4,e=7)/70)

इसे ऑनलाइन आज़माएं!

Giuseppe के लिए डॉट उत्पाद धन्यवाद का उपयोग करके 4 बाइट्स सहेजे गए ।

प्योर आर में दो और बाइट्स का उपयोग होगा function


बेशक, यह इतना स्पष्ट है, अब मैं इसके बारे में सोचता हूं।
AJFaraday

1
28 बाइट्स के बजाय डॉट उत्पाद का उपयोग करनाsum
Giuseppe

मेरे पास 40 बाइट्स थेfunction(s)weighted.mean(s,rep(1:4,e=7))
ग्यूसेप

1
@Giuseppe सौभाग्य से मुझे याद नहीं था weighted.mean। जब यह Routgolfs प्यार करता हूँ Python
JayCe

4

MATL , 10 बाइट्स

7es4:*s70/

इसे ऑनलाइन आज़माएं!

मैंने उम्र में MATL उत्तर पोस्ट नहीं किया है! पता लगाया गया कि मैं LOTM मई 2018 के भाग के रूप में भाग ले सकता हूँ !

स्पष्टीकरण:

7e          % Reshape the array into 7 rows (each week is one column)
  s         % Sum each column
   4:       % Push [1 2 3 4]
     *      % Multiply each columnar sum by the corresponding element in [1 2 3 4]
      s     % Sum this array
       70/  % Divide by 70

मेरे पास K:7Y"*s70/10 बाइट्स भी थीं ।
ग्यूसेप

3

जेली , 9 बाइट्स

s7x"J$FÆm

इसे ऑनलाइन आज़माएं!

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

s7x "J $ FÆm - पहली कमांड लाइन तर्क से इनपुट लेता है और STDOUT को आउटपुट करता है।
s7 - 7 के समूहों में विभाजित करें।
   "- सदिश (zipwith) लागू करें:
  x J $ - प्रत्येक सूची के तत्वों को सूची के सूचकांक के बराबर कई बार दोहराएं।
      च - समतल।
       Æm - अंकगणित माध्य।

2

हास्केल , 35 बाइट्स

(/70).sum.zipWith(*)([1..]<*[1..7])

बोनस: यदि a,b,c,dसाप्ताहिक राशि है, तो सामान्य औसत भारित औसत iff के समान है:

(a + b + c + d)/4 = (a + 2b + 3c + 4d)/10  <=>
10(a + b + c + d) = 4(a + 2b + 3c + 4d)    <=>
5(a + b + c + d)  = 2(a + 2b + 3c + 4d)    <=>
5a + 5b + 5c + 5d = 2a + 4b + 6c + 8d      <=>
3a + b - c - 3d   = 0

एक समाधान तब होता है जब पहले और अंतिम सप्ताह में एक ही राशि होती है, और इसी तरह दूसरे और तीसरे सप्ताह में एक ही राशि होती है, लेकिन यदि आपके मछलियां इसके ऊपर हैं तो असीम रूप से कई समाधान हैं। उदाहरण: [१५,१०,१०,१०,१०,१०,२०,२०,२०,२५,२५,२०,२०,२०,२०,२०,२०,२०,२०,२०,२०,२०,१०,१०,२० , 0,10,10,10]

इसे ऑनलाइन आज़माएं!


2

जावास्क्रिप्ट (Node.js) , 49 बाइट्स

a=>a.map((x,i)=>(I+=d=-~(i/7),s+=x*d),s=I=0)&&s/I

इसे ऑनलाइन आज़माएं!


गैर जेनरिक समाधान

जावास्क्रिप्ट (Node.js) , 39 36 बाइट्स

a=>a.reduce((s,x,i)=>s+x*-~(i/7))/70

इसे ऑनलाइन आज़माएं!


1
-1 बाइट का उपयोग करके पहले घोल पर a=>a.reduce((s,x,i)=>(I+=d=-~(i/7),s+x*d),I=0)/I। और एक त्वरित टिप: <hr>मार्कडाउन में एक क्षैतिज रेखा बनाने के लिए उपयोग करें
हरमन एल

@HermanL का उपयोग करने में क्या गलत है ---(इसके अपने पैराग्राफ की आवश्यकता है)?
नील


2

स्टैक्स , 10 8 बाइट्स

äΔ6◙█µøΓ

इसे चलाएं और डीबग करें

स्पष्टीकरण (अनपैक्ड):

7/4R:B$:V Full program, implicit input
7/        Split into parts of length 7
  4R      Push [1, 2, 3, 4]
    :B    Repeat each element the corresponding number of times
      $   Flatten
       :V Average

1
एक और स्टैक्स का उपयोग कर! हाँ! आप उपयोग कर सकते हैं $समतल अगर तत्वों सब अब ओपी साथ पूर्णांकों की जाँच कर रहे हैं।
खुल्द्रेसथ न'बर्या


2

चारकोल , 14 बाइट्स

I∕ΣE⪪A⁷×Σι⊕κ⁷⁰

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

     A          Input array
    ⪪ ⁷         Split into subarrays of length 7
   E            Loop over each subarray
         ι      Subarray
        Σ       Sum
           κ    Loop index
          ⊕     Incremented
       ×        Product
  Σ             Sum results
            ⁷⁰  Literal 70
 ∕              Divide
I               Cast to string
                Implicitly print

2

K4 / K (oK) , 19 16 14 बाइट्स

समाधान:

+/(1+&4#7)%70%

इसे ऑनलाइन आज़माएं!

उदाहरण:

+/(1+&4#7)%70%50 50 50 50 50 50 50 10 10 10 10 10 10 10 50 50 50 50 50 50 50 50 50 50 50 50 50 50
42

स्पष्टीकरण:

मूल्यांकन दाएँ-से-बाएँ किया जाता है। 7 1s, 7 2s, 7 3s और 7 4s को 70 से विभाजित करके इनपुट द्वारा विभाजित करें; फिर योग करें।

+/(1+&4#7)%70% / the solution               
           70% / 70 divided by the input
  (      )%    / the stuff in brackets divided by this...
      4#7      / draw from 7, 4 times => 7 7 7 7
     &         / 'where' builds 7 0s, 7 1s, 7 2s, 7 3s
   1+          / add one
+/             / sum (+) over (/) to get the total

2

एक्सेल: 33 बाइट्स

(A1: N1 और A2: N2 से 2 लाइनों पर डेटा चलाकर @ wernisch के उत्तर से 3 बाइट्स बचाए गए)

=AVERAGE(A1:N2,H1:N2,A2:N2,H2:N2)

टिप्पणी के रूप में इसे शामिल न करने के लिए क्षमा याचना। मेरे पास ऐसा करने के लिए पर्याप्त प्रतिष्ठा नहीं है।


2

जाप , 11 10 बाइट्स

xÈ/#F*ÒYz7

कोशिश करो


व्याख्या

 È             :Pass each element at index Y through a function
  /#F          :  Divide by 70
       Yz7     :  Floor divide Y by 7
      Ò        :  Negate the bitwise NOT of that to add 1
     *         :  Multiply both results
x               :Reduce by addition

1

त्रिकोणीयता , 49 बाइट्स

....)....
...D7)...
..14)21..
.WM)IEtu.
}u)70s/..

इसे ऑनलाइन आज़माएं!

व्याख्या

)D7)14)21WM)IEtu}u)70s/ – Full program.
)D7)14)21               – Push the literals 0, 7, 14, 21 onto the stack.
         WM     }       – Wrap the stack to a list and run each element on a separate
                          stack, collecting the results in a list.
           )IEt         – Crop the elements of the input before those indices.
               u        – Sum that list.
                 u      – Then sum the list of sums.
                  )70   – Push the literal 70 onto the stack.
                     s/ – Swap and divide.


1

एपीएल + विन, 13 बाइट्स

पूर्णांक के वेक्टर के रूप में सरणी के लिए संकेत:

(+/⎕×7/⍳4)÷70

स्पष्टीकरण:

7/⍳4) create a vector comprising 7 1s, 7 2s, 7 3s and 7 4s

+/⎕× prompt for input, multiply by the vector above and sum result

(....)÷70 divide the above sum by 70

1

जावा 8, 57 बाइट्स

a->{int r=0,i=35;for(;i-->7;)r+=i/7*a[i-7];return r/70d;}

इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

a->{              // Method with integer-array parameter and double return-type
  int r=0,        //  Result-sum, starting at 0
      i=35;       //  Index-integer, starting at 35
  for(;i-->7;)    //  Loop `i` downwards in the range (35,7]
    r+=           //   Add the following to the result-sum:
       i/7        //    `i` integer-divided by 7,
       *a[i-7];   //    multiplied by the item at index `i-7`
  return r/70d;}  //  Return the result-sum, divided by 70.0


1

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

#(/(apply +(for[i[0 7 14 21]v(drop i %)]v))70)

यह मेपसैट + सबवेक संयोजन की तुलना में कम हो गया।


1

टीआई-बेसिक, 25 बाइट्स

mean(Ansseq(sum(I>{0,7,21,42}),I,1,70

वैकल्पिक समाधान, 39 बाइट्स

Input L1
For(I,1,70
Ans+L1(I)sum(I>{0,7,21,42
End
Ans/70

1

रूबी , 65 बाइट्स

->r{(b=(0..r.size/7).map{|a|r[a*7..-1]}.flatten).sum/b.size.to_f}

इसे ऑनलाइन आज़माएं!


इनपुट का आकार यहां 28 पर तय किया गया है - इसलिए आप sizeसंपत्ति का उपयोग करने के बजाय मानों को हार्डकोड करके कई बाइट्स बचा सकते हैं। इसे ऑनलाइन आज़माएं!
सूंदर -

1

एक्सेल, 36 33 बाइट्स

-3 बाइट्स @tsh को धन्यवाद।

=SUM(1:1,H1:AB1,O1:AB1,V1:AB1)/70

पहली पंक्ति में इनपुट ( A1को AB1)।


हो सकता है कि A1:AB1-> 1:1?
tsh

1

जूलिया 0.6 , 27 बाइट्स

p->repeat(1:4,inner=7)'p/70

इसे ऑनलाइन आज़माएं!

repeatकॉल 28 मूल्यों का एक स्तंभ मैट्रिक्स रूपों, सात 1 की, तो सात 2 के, आदि हम तो साथ यह स्थानांतरित युक्त 'है, तो इनपुट के साथ एक मैट्रिक्स गुणा करना (mutiplication यहाँ निहित है)। चूंकि यह 28x1 मैट्रिक्स के साथ 1x28 मैट्रिक्स का मैट्रिक्स गुणा है, इसलिए हम एक एकल मूल्य के साथ समाप्त होते हैं, जो भारित राशि है जो हमें चाहिए। विभाजित है कि 70हमारे वजन मतलब पाने के लिए।

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