চ্যালেঞ্জগুলির একটি অ্যারে # 3: চলমান গড়


16

দ্রষ্টব্য: চ্যালেঞ্জগুলির একটি সিরিজের এটি # 3 । পূর্ববর্তী চ্যালেঞ্জের জন্য, এখানে ক্লিক করুন

একটি তালিকার গড় সরানো

গড় চলন্ত একটি তালিকা একটি হিসাব একটি নতুন, তালিকা খুঁজে মসৃণ, মূল ছোট ওভারল্যাপিং sublists গড় দ্বারা নির্মিত ফলে হয়।

চলন্ত গড় তৈরি করার সময়, আমরা প্রথমে একটি নির্দিষ্ট 'উইন্ডো আকার' ব্যবহার করে ওভারল্যাপিং সাবলিস্টগুলির তালিকা তৈরি করি, প্রতিবার একবার এই উইন্ডোটিকে ডানদিকে সরানো।

উদাহরণস্বরূপ, তালিকা [8, 4, 6, 2, 2, 4]এবং উইন্ডো আকার দেওয়া 3, সাবলিস্টগুলি হবে:

[8,  4,  6,  2,  2,  4]          Sublists:
(         )                  <-  [8, 4, 6]
    (         )              <-  [4, 6, 2]
        (         )          <-  [6, 2, 2]
            (         )      <-  [2, 2, 4]

এরপরে ফলাফলটি পেতে আমরা প্রতিটি সাবলিস্টের গড় গড় গণনা করি : [6.0, 4.0, 3.3, 2.7](প্রতিটি মান এক দশমিক স্থানে গোল হয়)।


চ্যালেঞ্জ

আপনার টাস্কটি এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি তালিকা এল এবং একটি পূর্ণসংখ্যা 1 ≤ n ≤ দৈর্ঘ্য (এল) দিয়ে দেওয়া হয় , উইন্ডোর আকার এন ব্যবহার করে এল এর চলমান গড় গণনা করে ।

নিয়মাবলী:

  • আপনার প্রোগ্রামটি পূর্ণসংখ্যা বিভাগ বা ফ্লোট বিভাগ ব্যবহার করতে পারে । ভাসা বিভাগের ক্ষেত্রে, ডেটা টাইপের সীমাবদ্ধতার কারণে ছোট অকার্যকরতা অনুমোদিত, যতক্ষণ মান অন্যথায় সঠিক হয়।
  • আপনি একটি সম্পূর্ণ প্রোগ্রাম, বা একটি ফাংশন (তবে একটি স্নিপেট নয়) জমা দিতে পারেন।
  • আপনি ধরে নিতে পারেন যে তালিকায় কেবল ইতিবাচক পূর্ণসংখ্যা থাকবে
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি , তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জিতেছে!

পরীক্ষার কেস

দ্রষ্টব্য, পাঠযোগ্যতার স্বাচ্ছন্দ্যের জন্য, সমস্ত মান এক দশমিক স্থানে গোল করা হয়।

n=5, [1, 2, 3, 4, 5, 6, 7, 8]      ->      [3, 4, 5, 6]
n=3, [100, 502, 350, 223, 195]     ->      [317.3, 358.3, 256]
n=1, [10, 10, 10]                  ->      [10, 10, 10]
n=3, [10, 20, 30]                  ->      [20]
n=2, [90, 40, 45, 100, 101]        ->      [65, 42.5, 72.5, 100.5]

আমাদের কি ভাসমান মানগুলি গোল করতে হবে, না আমরা সেগুলিকে যেমন রেখে দিতে পারি?
কায়ার্ড কইনিরিংহিংহ

3
@Cairdcoinheringaahing নোট করুন যে, পাঠযোগ্যতার স্বাচ্ছন্দ্যের জন্য , সমস্ত মান একটি দশমিক স্থানে নিয়ে গেছে । আমার মতে, আপনি অবশ্যই তাদেরকে যেমন তারা থাকতে পারেন (অন্তত আমি এটি বুঝতে পারি)।
মিঃ এক্সকোডার 16

@ কায়ারডকোইনরিঙ্গিংহিং I / O এর সাথে আমি বেশ উদার ছিলাম: পূর্ণসংখ্যা বা ভাসমান মান ভাল হয়, আপনি চাইলে গোল করতে পারেন তবে প্রয়োজন নেই, এবং ভাসমান পয়েন্টের ত্রুটিগুলি অনুমোদিত হয়
ফ্লিপট্যাক

ভাসমান পয়েন্ট সংখ্যার পরিবর্তে ভগ্নাংশ ফিরে পাওয়া কি ঠিক আছে?
জংহওয়ান মিন

@ জংহওয়ানমিন নির্ভুলতার জন্য যদি আপনার ভাষা ভাসমানের চেয়ে ভগ্নাংশ হিসাবে মানগুলি সঞ্চয় করে রাখে, তবে তাদের সরল আকারে সঠিক ভগ্নাংশ হিসাবে মুদ্রণ করা ভাল।
ফ্লিপট্যাক

উত্তর:



7

ওল্ফ্রাম ভাষা (গণিত) , 13 বাইট by

ম্যাথামেটিকায় সবকিছুর জন্য অন্তর্নির্মিত ব্যবস্থা রয়েছে

MovingAverage

এটি অনলাইন চেষ্টা করুন!

একটি তালিকা এবং তার পরে ব্যাসার্ধ নেয় ...


6
MovingAverageಠ _____ ಠ আমি এটি বিশ্বাস করতে অস্বীকার করি
মিঃ এক্সকোডার

টুইটারে MovingAverageভগ্নাংশের একটি সেট প্রদান করে। এখন এটি ওপি দ্বারা অনুমোদিত হয়েছে, MovingAverageসত্যই যথেষ্ট should
মিঃ এক্সকোডার


7

ডায়ালগ এপিএল, 4 বাইট

1 গ্রেট @ গ্রাহামকে ধন্যবাদ রক্ষা করেছে

@ জিমি 23013 কে 2 বাইট সংরক্ষণ করা হয়েছে saved

আমি উল্লেখ করেছেন APL হয় না একটি golfing ভাষা?

⊢+/÷

সঙ্গে nডান দিকে, অথবা

+/÷⊣

সঙ্গে Lডান দিকে।

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

÷- Lদ্বারা বিভক্তn

⊢+/- +উইন্ডোতে হ্রাসn


হ্রাসের আগে কেন এল দ্বারা ভাগ করবেন না। একটি বাইট সংরক্ষণ করুন
গ্রাহাম



@ জিমি 23013 অনেক ধন্যবাদ! আমি এটির আগে চেষ্টা করেছি, তবে অবশ্যই ভুল যুক্তি যুক্ত করে টাইপ করেছি যা কার্যকর হয়নি didn't
ঊরীয়েল

6

পাইথন , 48 বাইট

f=lambda n,l:l[n-1:]and[sum(l[:n])/n]+f(n,l[1:])

এটি অনলাইন চেষ্টা করুন!

একটি পুনরাবৃত্তি ফাংশন। প্রোগ্রামের চেয়ে কম (50 বাইট)

n,l=input()
while l[-n]:print sum(l[:n])/n;l=l[1:]

এটি অনলাইন চেষ্টা করুন!

এটি whileশর্তে ত্রুটি সহ শেষ করে 2 বাইট সংরক্ষণ করে ।



4

পার্ল 6 , 33 বাইট

{@^a.rotor($^b=>1-$b)».sum X/$b}

এটা পরীক্ষা করো

সম্প্রসারিত:

{  # bare block with placeholder parameters 「@a」, 「$b」

  @^a                # declare and use first param

  .rotor(            # split it into chunks
    $^b              # declare and use second param
    =>               # pair it with
    1 - $b           # one less than that, negated

  )».sum             # sum each of the sub lists

  X/                 # cross that using &infix:«/»

  $b                 # with the second param
}


4

জে, 7 5 বাইট

]+/\%

এটি অনলাইন চেষ্টা করুন!

nডান যুক্তি হিসাবে এবং বাম হিসাবে তালিকা হিসাবে নেয় T ইনফিক্সে কেবল সামিট করার চিন্তাভাবনার জন্য উরিলের সমাধানটিকে ক্রেডিট।

ব্যাখ্যা

]+/\%
    %  Divide list by n
]+/\   Sum on overlapping intervals of size n

পূর্ববর্তী সমাধান (7 বাইট)

(+/%#)\
      \  Apply to overlapping intervals of size n
(+/%#)   Mean
 +/        Sum
   %       Divided by
    #      Length



3

অক্টাভা , 33 31 বাইট

@(x,n)conv(x,~~(1:n)/n,'valid')

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

কনভলিউশন ( conv) মূলত চলন্ত ওজনযুক্ত যোগফল। যদি ওজনগুলি [1/n, ..., 1/n]( হিসাবে প্রাপ্ত ~~(1:n)/n) হিসাবে বেছে নেওয়া হয় তবে ফলাফলটি একটি চলন্ত গড় হয়, যার মধ্যে কেবল 'valid'অংশটি রাখা হয়।


2

আর , 72 বাইট

function(l,n)(k=sapply(0:sum(l|1),function(x)mean(l[x+1:n])))[!is.na(k)]

এটি অনলাইন চেষ্টা করুন!

meanসমস্ত আকারের nউইন্ডোগুলির গণনা করে ; উইন্ডোটি যখন প্রান্ত পেরিয়ে যায় l, ফলাফলগুলি হয়NA তাই আমরা সেগুলি ফিল্টার আউট করি।

আর + চিড়িয়াখানা প্যাকেজ, 13 বাইট

zoo::rollmean

zooপ্যাকেজ (নিয়মিত এবং অনিয়মিত টাইম সিরিজ জন্য এস 3 পরিকাঠামো) কুশলী ফাংশন অনেক আছে। আপনি এটি এখানে চেষ্টা করতে পারেন (আর-ফিডাল)


2

জাপট v2.0a0, 7 বাইট

ãV ®x÷V

চেষ্টা করে দেখুন


ব্যাখ্যা

অ্যারে Uএবং পূর্ণসংখ্যার অন্তর্নিহিত ইনপুট V

ãV

Uদৈর্ঘ্যের সাথে সাবসেকশনগুলি পানV

®

সাবসেকশনগুলির উপর মানচিত্র।

÷V

দ্বারা প্রতিটি উপাদান ভাগ V

x

সমস্ত উপাদান যোগ।







1

সিজেম, ১৪ 12 বাইট

-২ বাইটস @ অ্যাডিটসুকে ধন্যবাদ

{_@ew::+\f/}


0

জাভাস্ক্রিপ্ট (ES6), 53 বাইট

(l,n)=>l.map(e=>(s+=e-=a[i-n]||0)/n,s=i=0).slice(n-1)



0

স্ট্যাকড , 22 বাইট

[infixes[:sum\#'/]map]

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

infixesপ্রদত্ত দৈর্ঘ্যের সমস্ত উইন্ডো উত্পন্ন করে। তারপরে, আমরা প্রতিটি ইনপিক্সের উপরে আমাদের নিজস্ব ফাংশনটি ম্যাপ করি।



0

কে (ওকে) , 13 11 বাইট

সমাধান:

{+/+x':y%x}

এটি অনলাইন চেষ্টা করুন!

উদাহরণ:

{+/+x':y%x}[3;8 4 6 2 2 4]
6 4 3.3333 2.6667
{+/+x':y%x}[5;1 2 3 4 5 6 7 8]
3 4 5 6

ব্যাখ্যা:

oK একটি স্লাইডিং উইন্ডো তৈরি করার জন্য একটি অন্তর্নির্মিত রয়েছে, তারপরে ফলাফলের অ্যারেগুলি যোগ করুন এবং উইন্ডো আকারটি স্লাইডিং করে বিভাজককে ভাগ করতে হবে:

{+/+x':y%x} / the solution
{         } / lambda function taking x and y as implicit parameters
       y%x  / y (list) by x (sliding array size)
    x':     / sliding window of size x over list y
   +        / flip array (rotate by 90 degrees)
 +/         / sum up array

দেখে মনে হচ্ছে আপনার ফ্লিপ অ্যারে + লাগবে না, এবং কে-এর এপিএলের মতো যাতায়াত থাকলে x%[commute]আপনি বামে যেতে পারেন এবং পেরেনগুলি ফেলে দিতে পারেন
উরিয়েল

প্রতিটি তালিকা নীচের চেয়ে সমষ্টিটি অতিক্রম করতে হবে এবং সুনির্দিষ্টভাবে কোনও যাত্রী অপারেটর নেই, ম্যানুয়ালটিতে এটি প্রস্তাব দেওয়ার জন্য কমপক্ষে কিছুই নেই তা নিশ্চিত করার জন্য ফ্লিপটি প্রয়োজন । চিয়ার্স যদিও!
স্ট্রিস্টার

0

ডেটাউইভ , 50 বাইট

fun s(l,w)=0 to(sizeOf(l)-w)map avg(l[$ to $+w-1])
%dw 2.0
output application/json

fun sma(list: Array<Number>, window: Number) =
  0 to (sizeOf(list) - window)  // generate starting indices of sublists
  map list[$ to $ + window - 1] // generate sublists
  map avg($)                    // calculate averages

---
sma([90, 40, 45, 100, 101], 2)


0

জাভা 8, 111 বাইট

a->n->{int l=a.length-n+1,i=0,j;float[]r=new float[l];for(;i<l;r[i++]/=n)for(j=i;j<i+n;r[i]+=a[j++]);return r;}

ব্যাখ্যা:

এখানে চেষ্টা করুন।

a->n->{                 // Method with array and int parameters and float-array return-type
  int l=a.length-n+1,   //  New length of the return-array
      i=0,j;            //  Index-integers
  float[]r=new float[l];//  Return-array
  for(;i<l;             //  Loop (1) from 0 to `l` (exclusive)
      r[i++]/=n)        //    After every iteration, divide the current item by input `n`
    for(j=i;j<i+n;      //   Inner loop (2) from `i` to `i+n` (exclusive)
      r[i]+=a[j++]      //    Sum the result at index `i` with the items of the input-array
    );                  //   End of inner loop (2)
                        //  End of loop (1) (implicit / single-line body)
  return r;             //  Return the resulting float-array
}                       // End of method
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.