2D পার্টিশনযুক্ত সমষ্টিগত যোগফল


16

চ্যালেঞ্জ

একটি ম্যাট্রিক্স দেওয়া এম সঙ্গে দ সারি এবং গ কলাম, এবং দুই বুলিয়ান তালিকা ভী দৈর্ঘ্যের R এবং এইচ দৈর্ঘ্যের গ , পার্টিশন করা ক্রমসঞ্চিত উল্লম্ব এবং অনুভূমিক অঙ্কের হিসাব।

বিধি

  • r এবং c এর চেয়ে বড় বা সমান

  • এইচ এবং ভি একটি সত্য মান দিয়ে শুরু হয়

  • এম এর মানগুলি আপনার ভাষার যুক্তিসঙ্গত সংখ্যাযুক্ত ডোমেনের মধ্যে are

  • পার্টিশন এবং সমষ্টি শীর্ষ বাম কোণে শুরু হয়।

দিয়ে চলুন

দেওয়া এম :

┌──────────────┐
│ 1  2  3  4  5│
│ 6  7  8  9 10│
│11 12 13 14 15│
│16 17 18 19 20│
└──────────────┘

এইচ :1 0 1 0 0

ভি :1 1 0 1

বিভক্ত এম কলামের দলের মধ্যে, প্রতিটি সত্য মূল্য এ একটি নতুন গ্রুপ শুরু এইচ

┌─────┬────────┐
│ 1  2│ 3  4  5│
│ 6  7│ 8  9 10│
│11 12│13 14 15│
│16 17│18 19 20│
└─────┴────────┘

প্রতিটি কলামের প্রতিটি দলকে সারিগুলির গ্রুপগুলিতে বিভক্ত করুন, ভি এর প্রতিটি আসল মান দিয়ে একটি নতুন গ্রুপ শুরু করুন :

┌─────┬────────┐
│ 1  2│ 3  4  5│
├─────┼────────┤
│ 6  7│ 8  9 10│
│11 12│13 14 15│
├─────┼────────┤
│16 17│18 19 20│
└─────┴────────┘

সংক্ষিপ্তভাবে প্রতিটি ঘরের অনুভূমিকভাবে যোগ করুন:

┌─────┬────────┐
│ 1  3│ 3  7 12│
├─────┼────────┤
│ 6 13│ 8 17 27│
│11 23│13 27 42│
├─────┼────────┤
│16 33│18 37 57│
└─────┴────────┘

সংক্ষিপ্তভাবে প্রতিটি ঘর উল্লম্বভাবে যোগ করুন:

┌─────┬────────┐
│ 1  3│ 3  7 12│
├─────┼────────┤
│ 6 13│ 8 17 27│
│17 36│21 44 69│
├─────┼────────┤
│16 33│18 37 57│
└─────┴────────┘

ফলাফল:

┌──────────────┐
│ 1  3  3  7 12│
│ 6 13  8 17 27│
│17 36 21 44 69│
│16 33 18 37 57│
└──────────────┘

অতিরিক্ত পরীক্ষার মামলা

এম :

┌───────────┐
│15 11 11 17│
│13 20 18  8│
└───────────┘

এইচ : 1 0 0 1 ভি :1 0

ফলাফল:

┌───────────┐
│15 26 37 17│
│28 59 88 25│
└───────────┘

এম :

┌─┐
│7│
└─┘

ফলাফল ( এইচ এবং ভি অবশ্যই হবে 1):

┌─┐
│7│
└─┘

এম :

┌──┐
│ 3│
│-1│
│ 4│
└──┘

ভি : 1 1 0( এইচ অবশ্যই হবে 1)

ফলাফল:

┌──┐
│ 3│
│-1│
│ 3│
└──┘

এম :

┌───────────────────────────────────────────────────────┐
│10    7.7 1.9 1.5 5.4  1.2 7.8 0.6 4.3 1.2  4.5 5.4 0.3│
│ 2.3  3.8 4.1 4.5 1    7.7 3   3.4 6.9 5.8  9.5 1.3 7.5│
│ 9.1  3.7 7.2 9.8 3.9 10   7.6 9.6 7.3 6.2  3.3 9.2 9.4│
│ 4.3  4.9 7.6 2   1.4  5.8 8.1 2.4 1.1 2.3  7.3 3.6 6  │
│ 9.3 10   5.8 9.6 5.7  8.1 2.1 3.9 4   1.3  6.3 3.1 9  │
│ 6.6  1.4 0.5 6.5 4.6  2.1 7.5 4.3 9   7.2  2.8 3.6 4.6│
│ 1.7  9.9 2.4 4.5 1.3  2.6 6.4 7.8 6.2 3.2 10   5.2 8.9│
│ 9.9  5.3 4.5 6.3 1.4  3.1 2.3 7.9 7.8 7.9  9.6 4   5.8│
└───────────────────────────────────────────────────────┘

এইচ :1 0 0 1 0 1 1 1 0 1 1 1 0

ভি :1 0 0 0 0 1 0 0

ফলাফল:

┌────────────────────────────────────────────────────────────────┐
│10   17.7 19.6  1.5  6.9  1.2  7.8  0.6  4.9  1.2  4.5  5.4  5.7│
│12.3 23.8 29.8  6   12.4  8.9 10.8  4   15.2  7   14    6.7 14.5│
│21.4 36.6 49.8 15.8 26.1 18.9 18.4 13.6 32.1 13.2 17.3 15.9 33.1│
│25.7 45.8 66.6 17.8 29.5 24.7 26.5 16   35.6 15.5 24.6 19.5 42.7│
│35   65.1 91.7 27.4 44.8 32.8 28.6 19.9 43.5 16.8 30.9 22.6 54.8│
│ 6.6  8    8.5  6.5 11.1  2.1  7.5  4.3 13.3  7.2  2.8  3.6  8.2│
│ 8.3 19.6 22.5 11   16.9  4.7 13.9 12.1 27.3 10.4 12.8  8.8 22.3│
│18.2 34.8 42.2 17.3 24.6  7.8 16.2 20   43   18.3 22.4 12.8 32.1│
└────────────────────────────────────────────────────────────────┘

উত্তর:


9

জেলি , 10 বাইট

Zœṗ@+\€Ẏð/

এটি অনলাইন চেষ্টা করুন! এবং সর্বশেষ পরীক্ষার কেস ( Gপাঠযোগ্যতার জন্য শেষের সাথে)।

ইনপুট তালিকা হিসাবে নেওয়া হয় [M, H, V]।

ব্যাখ্যা

Zœṗ@+\€Ẏð/  Input: [M, H, V]
        ð/  Insert the previous (f) as a dyadic link
            Forms f( f(M, H) , V)
            For f(x, y):
Z             Transpose x
 œṗ@          Partition the rows of x^T at each true in y
    +\€       Compute the cumulative sums in each partition
       Ẏ      Tighten (Joins all the lists at the next depth)

তোমার মত ফুটার ব্যবহার করতে পারেন এই , যাতে আপনি আপনার প্রকৃত কোড সহ অবৈধ প্রভাব বিস্তার করতে হবে না।
— এরিক আউটগল্ফার

7

এপিএল (ডায়ালগ) , 13 বাইট

এর IST লাগে VHM আর্গুমেন্ট হিসাবে।

{⍉⊃,/+\¨⍺⊂⍵}/

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

{… }/ নিম্নলিখিত বেনামী ফাংশন সন্নিবেশ করুন (দ্বারা হ্রাস), যেখানে বাম শব্দটি by দ্বারা প্রতিনিধিত্ব করে এবং ডানদিকে শব্দটি represented দ্বারা প্রতিনিধিত্ব করে ⍵ APL ফাংশন অধিকার মিশুক হচ্ছে কারণে, এই তাই হয় ভী চ ( এইচ চ এম )।

⍺⊂⍵ বিভাজন ⍵ অনুযায়ী ⍺

+\¨ প্রতিটি অংশের সংখ্যার যোগফল

,/ সংক্ষিপ্তকরণ দ্বারা হ্রাস করুন (এটি র‌্যাঙ্ক কমাতে ফলাফলকে সংযুক্ত করে)

⊃ প্রকাশ করা

⍉ TRANSPOSE


6

পাইথন 2 + নম্পি, 143 138 117 115 110 108 বাইট

-21 বাইটস অ্যাডামকে ধন্যবাদ !

lambda M,*L:reduce(lambda m,l:vstack(map(lambda p:cumsum(p,0),split(m,*where(l)))).T,L,M)
from numpy import*

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


1
পার্টিশন, বিভক্তকরণ এবং সিউসাম একবার জিজ্ঞাসা করুন, স্থানান্তর করুন, পুনরাবৃত্তি করুন।
— অ্যাডাম

@ অ্যাডাম ধন্যবাদ, আমি কোনও কারণে এটি নিয়ে ভাবি নি।
— notjagan

আমি যাইহোক যাইহোক দুটি ফাংশনগুলির তালিকা অনুসন্ধান পছন্দ করেছি :)
— জনাথন অ্যালান

2
দয়া করে শিরোনামটি "পাইথন 3 + নিম্পি" করুন
— লিকি নুন

5

জেলি ,  15  14 বাইট

œṗ+\€Ẏ
ḢçЀZð⁺

একটি ডায়াডিক লিঙ্কটি H,Vবাম এবং Mডানদিকে নিয়েছে এবং ফলাফল ম্যাট্রিক্স ফিরিয়ে আনছে।

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

বিকল্প হিসাবে একক লাইন হিসাবে 14 এর জন্যও: Ḣœṗ+\€Ẏ$¥Ð€Zð⁺

কিভাবে?

œṗ+\€Ẏ - Link 1: partition and cumSum: list of partition bools, list of values
œṗ     - partition (the values) at truthy indexes (of the bools)
    €  - for €ach part:
  +\   -   cumulative reduce by addition
     Ẏ - tighten (flattens back into a list)

ḢçЀZð⁺ - Main link: list of lists, [H,V]; list of lists, M
      ⁺ - perform this twice:
     ð  - [it's a dyadic chain for the second pass, first pass is dyadic implicitly]
Ḣ       -   head, pop it & modify (so H the first time, V the second)
  Ѐ    -   map across right: (M the first time, the intermediate result the second)
 ç      -     the last link (1) as a dyad
    Z   -   transpose the result (do the rows first time, and the columns the second)

আগে:

œṗ@+\€Ẏ
ç€Zç€⁵Z

ফলাফলের উপস্থাপনা মুদ্রণের একটি সম্পূর্ণ প্রোগ্রাম


ওহো -50% পূর্বের জেলি উত্তর থেকে!
— অ্যাডম

ওহ কি? কি দারুন. আপনি কীভাবে এটি করেছিলেন তা আমার সত্যিই অধ্যয়ন করা দরকার ... আমার তুলনায় অবিশ্বাস্য!
— হাইপারনিউটারিনো

ওহ এই দুটি দিক আলাদা করে করছেন, তাই না? স্মার্ট।
— হাইপারনিউটারিনো

আমি মনে করি এটি মোটামুটি একই জিনিস করছে ...
— জোনাথন অ্যালান

ভাল পদ্ধতি। এর অর্থ আমি এপিএল দিয়ে এটি মারতে পারি। আমি 14 বাইট পেয়েছি।
— অ্যাডম

4

এমএটিএল , 19 বাইট

,!ix"0GYs@12XQ!g]v!

ইনপুটগুলি হ'ল M(ম্যাট্রিক্স), H(কলাম ভেক্টর), V(কলাম ভেক্টর)। সারি বিভাজক হয় ;।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন: 1 , 2 , 3 , 4 , 5 ।

ব্যাখ্যা

এটি অনুভূমিকভাবে ক্রমবর্ধমান যোগফল করে, তারপর উল্লম্বভাবে।

,          % Do the following twice
  !        %   First time this inputs M implicitly. Transpose. Second time
           %   it transposes the result of the horizontal cumulative sum
  ix       %   Input H (first time) or V (second time). Delete it; but gets
           %   copied into clipboard G
  "        %   For each column of the matrix
    0G     %     Push most recent input: H (first time) or V (second)
    Ys     %     Cumulative sum. This produces a vector of integer values
           %     such that all columns (first time) or rows (second) of M 
           %     with the same value in this vector should be cumulatively
           %     summed
    @      %     Push current column of M transposed (first time) or M after
           %     horizontal cumulative sum (second time)
    12XQ   %     Cumulative sum. Gives a cell array of row vectors
    !g     %     Join those vectors into one row vector
  ]        %   End
  v        %   Concatenate the row vectors vertically into a matrix
  !        %   Transpose. This corrects for the fact that each column vector
           %   of the matrix was cumulatively summed into a row vector
           % Implicit end. Implicit display

1
সবচেয়ে চিত্তাকর্ষক. আমার ধারণা মাতলাব এই জাতীয় জিনিসগুলির জন্য দারুণভাবে তৈরি হয়েছিল।
— অ্যাডাম

@ অ্যাডাম আমি নিশ্চিত এপিএলের দৈর্ঘ্য খুব আলাদা হবে না :-)
— লুইস মেন্ডো

আমার পরীক্ষার কেস উত্পন্ন করতে ব্যবহৃত রেফারেন্স বাস্তবায়ন 26 বাইট।
— অ্যাডাম

@ অ্যাডম ডার্ন! জেলিকে মারছে এপিএল? এটা অগ্রহণযোগ্য! (অবশ্যই আমার গল্ফটি গল্ফ করুন ... লোল) এক্সডি
— হাইপারনিউটারিনো

@ হাইপার নিউট্রিনো ওয়েল, জেলি এর এপিএল এবং জে এর মতো মর্যাদা এবং গভীরতা উভয়ই নেই।
— অ্যাডাম

3

জে , 20 বাইট

;@(<@(+/\);.1|:)&.>/

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

ইনপুট সমন্বিত বাক্সগুলির একটি অ্যারে হিসাবে নেওয়া হয় [V, H, M]।

ব্যাখ্যা

;@(<@(+/\);.1|:)&.>/  Input: [V H M]
  (     g      )   /  Insert g and reduce (right-to-left)
                      Forms V g H g M = V g (H g M)
                & >     Unbox each
             |:         Transpose the right arg
          ;.1           Partition
      +/\               Reduce each prefix using addition (cumulative sum)
   <@                   Box each partition
;@                      Raze (Concatenate the contents in each box)
                &.>     Box the result

2

গণিত, 212 বাইট

(T=Transpose;A=AppendTo;J=Flatten;f[s_]:=Block[{},t=2;r=1;w={};While[t<=Length@s,If[s[[t]]==0,r++,w~A~r;r=1];t++];w~A~r];K[x_,y_]:=Accumulate/@#&/@(FoldPairList[TakeDrop,#,f@y]&/@x);d=J/@K[#,#2];T[J/@K[T@d,#3]])&


ইনপুট
[এম, এইচ, ভি]

[{{15, 11, 11, 17}, {13, 20, 18, 8}}, {1, 0, 0, 1}, {1, 0}]


2

সি # (.নেট কোর) , 164 বাইট

(M,H,V)=>{int a=M.Length,b=M[0].Length,i,j;for(i=0;i<a;i++)for(j=0;j<b;j++)if(!H[j])M[i][j]+=M[i][j-1];for(i=0;i<a;i++)for(j=0;j<b;j++)if(!V[i])M[i][j]+=M[i-1][j];}

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

মূলত এটি ওপিতে বর্ণিত ঠিক যেমনটি করে। এটি প্রথমে অনুভূমিকভাবে যোগফলকে পুনরাবৃত্তি করে এবং তারপরে আবার উল্লম্বভাবে যোগফল হয়।


2

হাস্কেল , 129 বাইট 119 বাইট

s m v=tail$scanl(\a(x,s)->if s then x else zipWith(+)a x)[](zip m v)
t=foldr(zipWith(:))$repeat[]
f m h v=t$s(t$s m v)h

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

@ সিসেটটোটারনকাউন্টার ক্লকুইসকে 10 বাইট সংরক্ষণ করা হয়েছে

t(স্থানান্তরের জন্য) সারি এবং কলামগুলি স্যুইচ করে। একটি দ্রুত ব্যাখ্যা:

foldr(zipWith(:))(repeat[])(r1,...,rn) =
zipWith(:) r1 (zipWith(:) r2 (... zipWith(:) rn (repeat [])))

ডান থেকে বামে পড়ুন: আমরা নীচে থেকে উপরে সারিগুলি ব্রাউজ করি এবং প্রতিটি মানকে তার গন্তব্য কলামে ঠেকি।

s মূলত ভেক্টরগুলির একটি ঘূর্ণায়মান যোগফল, তবে যখন একটি সত্য মান আসে তখন পুনরায় সেট করে v

fsনিম্নলিখিতগুলির সাথে সারিগুলি যোগ করে এবং নিম্নলিখিত vকলামগুলির সাথে একই করুনh


t=foldr(zipWith(:))(repeat[])। শুধুমাত্র খাটো নয়, অযোগ্যও।
— কাউন্টার

টিপস টিপস জন্য ধন্যবাদ।
— jferard

1

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

(a,h,v)=>a.map(b=>b.map((e,i)=>t=h[i]?e:t+e)).map((b,j)=>t=v[j]?b:t.map((e,i)=>e+b[i]))

0

জেলি , 31 বাইট

+\€€
œṗḊZ€⁵œṗ$€Ḋ€Ç€ÇZ€€Z€;/€€;/

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

গাহ এটি জেলি এক্সডি-এর পক্ষে অনেক দীর্ঘ

এই প্রোগ্রামের বিটিডব্লিউ, 11/31 বাইট ইউরো অক্ষর নিয়ে গঠিত। এটি প্রোগ্রামের এক তৃতীয়াংশেরও বেশি!


অনেক বেশি ইউরো।
— অ্যাডাম

@ অ্যাডম আমার চিন্তাভাবনাগুলি ঠিক: পি দ্বিগুণ বিভক্ত ম্যাট্রিক্সের সাথে কাজ করা যতটা মজাদার তা ভেবে
— দেখেনি

কেন আপনি এই € মত আপনার টাকা নষ্ট হয় - €
— ভি Courtois
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.