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.