বৃত্তাকারে চলমান যোগফল


24

দ্বারা অনুপ্রাণিত একটি প্রশ্ন স্ট্যাক ওভারফ্লো এ

পূর্ণসংখ্যার xএকটি শূন্য খালি অ্যারে এবং ধনাত্মক পূর্ণসংখ্যা দেওয়া n, অ্যারের পাশাপাশি দৈর্ঘ্যের প্রতিটি স্লাইডিং ব্লকের যোগফলটি গণনা করুন , বৃত্তাকারে অনুপস্থিত মানগুলি ডান থেকে মানগুলি নীচে নিম্নরূপে পূরণ করুন:nx

  • প্রথম ব্লকে প্রথম এন্ট্রি থাকে x, এর আগে n-1বৃত্তাকারে স্থানান্তরিত এন্ট্রি থাকে;
  • দ্বিতীয় ব্লকে প্রথম এবং দ্বিতীয় এন্ট্রি থাকে x, এর আগে n-2বৃত্তাকারে স্থানান্তরিত এন্ট্রি থাকে; ইত্যাদি।

আউটপুট অ্যারের yসমান আকার রয়েছে xnএর দৈর্ঘ্য অতিক্রম করা সম্ভব xএবং তারপরে মানগুলির xবৃত্তাকার সাথে বেশ কয়েকবার পুনরায় ব্যবহার করা হয়

উদাহরণ

উদাহরণ 1 (মানগুলি কেবল একবার পুনঃব্যবহার করা হয়)

x = [2, 4, -3, 0, -4]
n = 3

আউটপুট হিসাবে দিতে

y = [-2, 2, 3, 1, -7]

কোথায়

  • -2ব্লকের যোগফল [0, -4, 2](প্রথম দুটি মান বিজ্ঞপ্তি স্থানান্তর থেকে আসে)
  • 2যোগফল [-4, 2, 4](প্রথম মানটি বিজ্ঞপ্তি স্থানান্তর থেকে আসে)
  • 3এর যোগফল [2, 4, -3](আর কোনও বিজ্ঞপ্তি স্থানান্তরকরণের দরকার নেই)
  • 1 এর যোগফল [4, -3, 0]
  • -7এর যোগফল [-3, 0, -4]

উদাহরণ 2 (মানগুলি বেশ কয়েকবার পুনরায় ব্যবহৃত হয়)

x = [1, 2]
n = 5

দিতে

y = [7, 8]

কোথায়

  • 7এই ব্লকের যোগফল [1, 2, 1, 2, 1](প্রথম চারটি মান বৃত্তাকারে আবার ব্যবহার করা হয়েছে)
  • 8ব্লকের যোগফল [2, 1, 2, 1, 2](প্রথম তিনটি মান বৃত্তাকারে পুনরায় ব্যবহার করা হয়েছে)

অতিরিক্ত বিধি

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

পরীক্ষার মামলা

x, n, -> y

[2, 4, -3, 0, -4], 3          ->  [-2, 2, 3, 1, -7]
[1, 2], 5                     ->  [7, 8]
[2], 7                        ->  [14]
[-5, 4, 0, 1, 0, -10, -4], 4  ->  [-19, -15, -5, 0, 5, -9, -13]
[-5, 4, 0, 1, 0, -10, -4], 1  ->  [-5, 4, 0, 1, 0, -10, -4]
[-2, -1, 0, 1, 2, 3], 5       ->  [4, 3, 2, 1, 0, 5]
[-10, 0, 10], 4               ->  [-10, 0, 10]

6
বাহ, আপনাকে পূর্ববর্তী প্রবেশগুলি কেন ব্যবহার করতে হয়েছিল?
নীল

উত্তর:


3

জেলি , 5 বাইট

ṙC€}S

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

কিভাবে এটা কাজ করে

ṙC€}S  Main link. Arguments: A (array), n (positive integer)

   }   Apply the link to the left to the right argument (n).
 C€      Complement each; map (z -> 1-z) over [1, ..., n], yielding [0, ..., 1-n].
ṙ      Rotate A 0, ..., 1-n units to the left (i.e., 0, ..., n-1 units to the
       right), yielding a 2D array.
    S  Take the sum of the rows.

7

এমএটিএল, 11 10 9 7 বাইট

3 লুইসকে ধন্যবাদ লুইস সংরক্ষণ করেছে!

:gyn&Z+

প্রথম ইনপুটটি উইন্ডোর আকার এবং দ্বিতীয় ইনপুটটি অ্যারের হয়

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

ব্যাখ্যা

       % Implicitly grab the first input (n)
       %     STACK: { 3 }
:      % Create the array [1...n]
       %     STACK: { [1, 2, 3] }
g      % Convert it to a logical array, yielding an array of 1's of length n
       %     STACK: { [1, 1, 1] }
y      % Implicitly grab the second input and duplicate it
       %     STACK: { [2, 4, -3, 0, -4], [1, 1, 1], [2, 4, -3, 0, -4]}
n      % Determine the length of the array
       %     STACK: { [2, 4, -3, 0, -4], [1, 1, 1], 5}
&Z+    % Perform circular convolution
       %     STACK: { [-2, 2, 3, 1, -7] }
       % Implicitly display the result

6

গণিত, 29 বাইট

RotateLeft[#,1-n]~Sum~{n,#2}&

বা একই দৈর্ঘ্য:

ListConvolve[1~Table~#2,#,1]&

6

সিজেএম (16 বাইট)

{_2$*ew1fb\,~)>}

অনলাইন পরীক্ষা স্যুট । এটি একটি বেনামে ব্লক (ফাংশন) যা অ্যারে এবং দৈর্ঘ্যটি স্ট্যাকের উপরে নিয়ে যায় এবং স্ট্যাকের উপর একটি অ্যারে ছেড়ে দেয়।

ব্যবচ্ছেদ

{       e# Declare a block
  _2$*  e#   Repeat the array n times: this guarantees having enough windows even
        e#   if x is only a single element
  ew    e#   Take each window of n elements
  1fb   e#   Sum each of the windows
  \,~)  e#   Compute -n
  >     e#   Take the last n elements of the array of sums
}

4

হাস্কেল, 57 বাইট

a#n|l<-length a=[sum[a!!mod j l|j<-[i-n..i-1]]|i<-[1..l]]

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

সূচিতে ইনপুট তালিকাটি কেবলমাত্র কিছু সূচকের লুপিং এবং অ্যাক্সেসের তালিকাটির দৈর্ঘ্যকে মডিউল করে।


3

হাস্কেল , 69 65 64 বাইট

r=reverse
s#n=r$init[sum$take n$x++cycle(r s)|x<-scanr(:)[]$r s]

এটি অনলাইন চেষ্টা করুন! উদাহরণ ব্যবহার: [2, 4, -3, 0, -4] # 3


পূর্ববর্তী প্রবেশের পরিবর্তে n সফল ব্যবহার করা 50 বাইট হতে পারে (শুরু এবং শেষের দিকে বিপরীত থেকে মুক্তি পাওয়া):

s#n=init[sum$take n$x++cycle s|x<-scanr(:)[]s]

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



2

পাইথ , 18 16 বাইট

@ ফ্রাইআমএইজিগম্যানকে 2 বাইট সংরক্ষণ করা হয়েছে !

JEms<.>*JQ-JhdJl

এটি এখানে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন।

-6 বাইট ব্যয়ে সমস্ত ত্রুটিগুলি স্থির করে ! আমাকে চ্যাটে টাস্কটি বোঝার জন্য লুইসকে অনেক ধন্যবাদ।


ব্যাখ্যা (আপডেট করতে হবে)

KEms<>_*QhK-lQhdKU - Full program.

KE                 - Assign the second input to a variable K.
  m              U - Map over the range [0...len(first input)).
       *QhK        - First input * (Second input + 1).
      _            - Reverse.
     >     -lQhd   - All the elements of the above after len(x)-current element-1
    <          K   - Up until the second input.
   s               - Sum.

খুব শীঘ্রই গল্ফ চেষ্টা করে, বিপরীত আগে আরও ভাল উপায় হতে পারে।
মিঃ এক্সকডার

16 বাইট পেয়েছে তবে আমার মনে হচ্ছে কিছুটা আরও ছোট হওয়া উচিত।
FryAmTheEggman

@ ফ্রাইআম দ্য এজম্যান ধন্যবাদ আমি মনে করি এটি আরও খাটো হওয়া উচিত তবে আমি কীভাবে তা বুঝতে পারি না
মিঃ এক্সকডার

2

জাভা 8, 102 বাইট

ল্যামডা (curried) থেকে int[]ল্যামডা থেকে Integerথেকে int[]। এতে হস্তান্তর Function<int[], Function<Integer, int[]>>

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

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

অবহেলিত ল্যাম্বদা

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

(j % l + l) % lযে কোনও একটি জন্য একটি nonnegative অবশিষ্ট গণনা jএখান থেকে নেওয়া হয়েছে



2

অক্টাভা, 53 বাইট

@(x,n)shift(imfilter(x,+!!(1:n),'circular'),fix(n/2))

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

  • imfilterবিকল্প ফাংশন circularউইন্ডোর কেন্দ্রে বিজ্ঞপ্তি সংবর্তন নির্ণয় তাই ফলাফলের স্থানান্তরিত করতে হবে।


2

পার্ল 6 , 42 39 বাইট

{@^a;[«+»] map {@a.rotate(-$_)},^$^b}

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

আমার প্রথম পার্ল 6 এন্ট্রি। সম্ভবত উন্নতি করা যেতে পারে।


নোট করুন যে আপনি মাঝে মাঝে প্লেসমোল্ডার পরামিতিগুলির সাথে একটি ব্লকের পরিবর্তে সিগলেস ভেরিয়েবলগুলির সাথে পয়েন্টি ব্লক ব্যবহার করে দৈর্ঘ্য হ্রাস করতে পারেন ->\a,\b{[«+»] map {a.rotate(-$_)},^b}নোট করুন যে এটি এই ক্ষেত্রে নয় তবে কোডটিতে অন্য কোনও উদাহরণ থাকলে এটি হতে পারে $b
ব্র্যাড গিলবার্ট

2

কোটলিন , 141 140 138 বাইট

শুধু প্রথম যেতে

নমন

fun c(a:List<Int>,n:Int):List<Int>{
return (0..(a.size-1)).map{var t=0
for (o in 0..(n-1)){var i=it-o
while(i<0) {i+=a.size};t+=a[i]}
t}}

শোভিত

fun c(a: List<Int>, n: Int): List<Int> {
    return (0..(a.size - 1)).map {    // Iterate over the items
        var t = 0                     // Start the total at 0
        for (o in 0..(n - 1)) {       // Start at the item, go over the window backwards
            var i = it - o            // -------------------------
            while (i < 0) {           //  Make the index in range
                i += a.size           //
            }                         // -------------------------
            t += a[i]                 // Add the item to the total
        }
        t                             // Return the total
    }
}

TryItOnline

সম্পাদনাগুলি

  • শেষ বন্ধনী বন্ধনীর আগে নতুন লাইন সরানো হয়েছে

1

রাদা , 52 বাইট

f a,n{(a*n)|slide n|tail#a*n|{head n|sum}while open}

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

ব্যাখ্যা:

f a,n{
  (a*n)|    /* Push the items in a n times to the stream */
  slide n|  /* Create a sliding block of length n */
  tail#a*n| /* Push the last n*len(a) values in the stream to the stream */
  {         /* While there are elements in the stream (stream is open): */
    head n| /*   Pull n values from the stream */
    sum     /*   Sum them and push the sum to the stream */
  } while open
}

1

জাভাস্ক্রিপ্ট ES6 80 78 বাইট

x=>n=>x.map((_,i)=>eval('for(L=x.length,N=0,j=++i-n;j<i;j++)N+=x[(j%L+L)%L]'))

2 বাইট সংরক্ষিত নীলকে ধন্যবাদ

ব্যবহার:

f=x=>n=>x.map((_,i)=>eval('for(L=x.length,N=0,j=++i-n;j<i;j++)N+=x[(j%L+L)%L]'))

f([2, 4, -3, 0, -4])(3)

1
,Nসৌন্দর্য আমাকে অপ্রয়োজনীয় ...
নিল

আপনি @Neil করছি ঠিক আছে, ধন্যবাদ
Bálint


1

পাইথন 2 , 69 61 বাইট

- 8 বাইট অনেক ধন্যবাদ @ মুরু

lambda x,n:[sum((x[-n+1:]+x*n)[i:i+n])for i in range(len(x))]

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

ব্যাখ্যা:

প্রথমে আমাদের নিশ্চিত করতে হবে যে মূল তালিকার বামে পর্যাপ্ত সংখ্যা রয়েছে, এটি x*n+xঅংশ দ্বারা প্রাপ্ত হয় ।

উদাহরণস্বরূপ [2,4,-3,0,4],5:

                   ,2,4,-3,0,-4
 ....-4,2,4,-3,0,-4,2,4,-3,0,-4

তারপরে আমরা তালিকাটি বিপরীত করব:

 <original->
 -4,0,-3,4,2, -4,0,-3, 4........
           <-2's block->     

এরপরে আমরা প্রতিটি উপাদানের দ্বারা সংশ্লিষ্ট ব্লকগুলি পাই [len(x)+~i:][:n]। স্লাইসটি বিপরীত হবে অর্থাৎ 2 টি একটি ব্লক অর্জন করবে: [2,-4,0,-3,4]যা প্রত্যাশিত বিপরীত [4,-3,0,-4,2], তবে আমাদের সর্বোপরি যোগফলটি দরকার। সুতরাং, এটি কাজ করে। :)


নিশ্চিত না কেন আপনাকে প্রথমে বিপরীত করতে হবে? আপনি এর পরিবর্তে বিপরীত দিকের টুকরোগুলি পরে পরিবর্তন করতে পারবেন না?
মিঃ এক্সকডার

@ মিঃ এক্সকোডার আমার মনে হয় উপায় আছে তবে এই পথটি কম ক্লান্তিকর ছিল তাই আমি এটিকে আঁকড়ে ধরেছিলাম ...: ডি
অফিসিয়ালাইম

1
আমার মনে x[-n+1:]+x*nহয়, আপনাকে বিপরীত হওয়া ছাড়াই উভয় দিকে পর্যাপ্ত প্যাডিংয়ের তালিকা দেওয়া উচিত ( lambda x,n:[sum((x[-n+1:]+x*n)[i:i+n])for i in range(len(x))])
মার্উ

1
@ মুরু আপনি কি এটি সম্পাদনা করেছেন? এখন এটা কাজ করছে. অনেক ধন্যবাদ!
officialaimm


1

কে (ওকে) , 18 বাইট

সমাধান:

{+/+y':(1-y+#x)#x}

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

উদাহরণ:

{+/+y':(1-y+#x)#x}[1 2;5]
7 8
{+/+y':(1-y+#x)#x}[-5 4 0 1 0 -10 -4;4]
-19 -15 -5 0 5 -9 -13
{+/+y':(1-y+#x)#x}[-10 0 10;4]
-10 0 10

ব্যাখ্যা:

একটি 31 বাইট সমাধান পোস্ট করতে চলেছিল তখন মনে পড়ে গেল যে ওকে স্লাইডিং উইন্ডোজগুলির জন্য একটি বিল্ট-ইন রয়েছে ...

{+/+y':(1-y+#x)#x} / the solution
{                } / lambda with implicit x and y parameters
               #x  / take (#) from list x
       (    #x)    / length of x
          y+       / add y (window size)
        1-         / subtract from 1 to give a negative
    y':            / sliding window of size y
   +               / flip
 +/                / sum

বোনাস:

31 বাইট সমাধান যে কাজ করে K4 :

q)k){+/+x#y#'|+(:':\|(1-y+x:#x)#x)}[2 4 -3 0 -4;3]
-2 2 3 1 -7
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.