ত্রিভুজগুলি যোগ করুন


19

ইনপুট হিসাবে ধনাত্মক পূর্ণসংখ্যার একটি ম্যাট্রিক্স নিন এবং ম্যাট্রিক্সের মাধ্যমে তির্যক রেখায় উপাদানগুলির পৃথক সংখ্যার আউটপুট নিন।

আপনি কেবল লাইনগুলি গণনা করতে পারেন যা তির্যকভাবে নীচে এবং ডানদিকে যায়। আপনাকে অবশ্যই নীচে বাম উপাদানগুলির সাথে ত্রিভুজ দিয়ে শুরু করতে হবে, তারপরে দৈর্ঘ্য-দুটি তির্যকের উপরে (যদি এটি বিদ্যমান থাকে) এবং তেমনিভাবে নীচের চিত্রিত হিসাবে কেবল শীর্ষ-ডান উপাদান রয়েছে এমন তির্যকটি দিয়ে।

উদাহরণ:

Input:
 8   14    5    1
10    5    5    8
 6    6    8   10
15   15    4   11

Output:
15, 21, 20, 32, 29, 13, 1
(Diagonals: {{15},{6,15},{10,6,4},{8,5,8,11},{14,5,10},{5,8},{1}})

Input:
1
Output:
1

Input: 
1 5
Output:
1, 5

Input:
4
1

Output: 
1, 4

Input:
17    4    5
24   16    5
 9   24   10
 1   14   22
 1   21   24
 4    4   17
24   25   17

Output:
24, 29, 22, 39, 47, 70, 43, 9, 5

ইনপুট এবং আউটপুট ফর্ম্যাটগুলি বরাবরের মতো areচ্ছিক।

এটি , তাই প্রতিটি ভাষার সংক্ষিপ্ততম জমাটি জয়লাভ করে।


উত্তর:


6

হাস্কেল , 40 37 বাইট

z=0:z
foldl1$(.(++z)).zipWith(+).(0:)

এটি অনলাইন চেষ্টা করুন! ব্যবহার: (foldl1$(.(++z)).zipWith(+).(0:)) [[1,2,3],[4,5,6]]

সম্পাদনা: -৩ বাইটের জন্য আরজান জোহানসেনকে ধন্যবাদ!

Ungolfed:

z = 0:z
s#t = zipWith(+)(0:s)(t++z)
f m = foldl1 (#) m

zঅসীম বহু শূন্যের একটি তালিকা। ইন fআমরা তালিকার তালিকা উপর ভাঁজ mফাংশন দুটি তালিকা মিশ্রন দ্বারা #। ইন #প্রথম তালিকাটি sএতদূর সঞ্চিত কলাম অঙ্কের রয়েছে এবং দ্বিতীয় তালিকা tনতুন সারি যা যোগ করা হবে। আমরা নামান sসামনে এবং উপাদান ভিত্তিক যোগ করার জন্য একটি শূন্য যোগ করে ডান প্রান্তের একটির উপাদান sএবং tসঙ্গে zipWith(+)। যেহেতু sনির্বিচারে বড় হতে পারে, তাই tসংযোজন দ্বারা আমাদের পর্যাপ্ত শূন্যের সাথে প্যাড করতে হবে z


যে খাটো পয়েন্ট-বিনামূল্যে: foldl1$(.(++z)).zipWith(+).(0:)
janর্জন জোহানসেন

6

গণিত, 53 54 বাইট

l=Length@#-1&;Tr@Diagonal[#,k]~Table~{k,-l@#,l@#&@@#}&

খাঁটি ফাংশন ইনপুট হিসাবে 2D-অ্যারে গ্রহণ করে একটি তালিকা ফেরত দেয়। (এন্ট্রি পূর্ণসংখ্যার বা এমনকি সংখ্যা হতে হবে না।) Diagonal[#,k]ফেরৎ kতম তির্যক উপরে (অথবা নীচে যদি kনেতিবাচক হয়) প্রধান তির্যক। {k,-l@#,l@#&@@#}ইনপুট অ্যারের মাত্রার উপর ভিত্তি করে প্রয়োজনীয় ত্রিভুজগুলির পরিসীমা গণনা করে। এবং Trপ্রতিটি তির্যকের এন্ট্রি যোগ করে।


একই বাইট গণনায় বিকল্প, তবে আপনি কি আরও গল্ফ করতে পারেন? এই বন্ধনীগুলি দেখতে খারাপ দেখাচ্ছে। Tr@Diagonal[m,#]&/@Range@@({-1,1}(Dimensions[m=#]-1))&
মার্টিন ইন্ডার

5

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

T&XdXs

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

ব্যাখ্যা

T&Xd   % All diagonals of implicit input arranged as zero-padded columns
Xs     % Sum of each column. Implicitly display

শুধু কৌতূহলী: আপনারা কি মনে করেন যে s==sum(x(:))এমএটিএল যেমন মনে করছে ম্যাটল্যাব কনভেনশনটিতে লেগে থাকার পরিবর্তে এটি সামগ্রিকভাবে করা ভাল হবে?
স্টিভি গ্রিফিন

@ স্টিওগ্রিফিন আমি মাঝে মাঝে এটি সম্পর্কে ভেবে দেখেছি। আমার সন্দেহ আরো মধ্যে ছিল sum(x)এবং sum(x,1)। একটি ম্যাট্রিক্সের জন্য x, sum(x)ম্যাট্রিক্সের 1 টি সারি থাকলে ভিন্ন যে আচরণ করে তা কখনও কখনও বিরক্ত হয়। তবে শেষ পর্যন্ত আমি সিদ্ধান্ত নিয়েছি মতলবকে নিয়ে যাব, তাই দুটি ভাষা আরও কাছে; এবং fun(x,1)সর্বাধিক সাধারণ ক্ষেত্রে কিছু ফাংশন যুক্ত করুন
লুইস মেন্ডো

5

জেলি , 5 বাইট

0;+µ/

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

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

0;+µ/  Main link. Argument: M (matrix / array of rows)

   µ   Combine all links to the left into a chain (arity unknown at parse time) and
       begin a new monadic chain.
    /  Reduce M by that chain. This makes the chain dyadic.
       Let's call the arguments of the chain L and R (both flat arrays).
0;         Prepend a 0 to L.
  +        Perform element-wise addition of the result and R.
           When the chain is called for the n-th time, R has n less elements, so
           the last n elements of L won't have matching elements in R and will be
           left unaltered.

হ্রাস করার জন্য কেবল প্রথম আর এর একটি কম উপাদান রয়েছে; এটি প্রতিটি সারিতে আরও একটি উপাদান দ্বারা বৃদ্ধি পায়।
janর্জন জোহানসেন 12'17

এটা ঠিক চালাক ... না ŒD?
এরিক দ্য আউটগল্ফার

@ এরিকথ আউটগল্ফার আবার, ŒDএর অদ্ভুত আদেশ এটি কার্যকর হতে বাধা দেয়।
ডেনিস

@Dennis তারপর আমি কিছু যে তাই অদ্ভুত ক্রম নেই করতে চাই ... ওহ, হয়তো 3 monads পারে ইনকামিং হও।
এরিক দি আউটগল্ফার

5

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

a=>a.map(b=>b.map((c,i)=>r[i]=~~r[i]+c,r=[,...r]),r=[])&&r

63-বাইট বৈকল্পিক:a=>a.map(r=>r.map(v=>s[i]=~~s[i++]+v,i=--y),s=[],y=a.length)&&s
অ্যারনল্ড

@ আরনাউল্ড আমি সম্মত, বিপরীত করা একটি খারাপ পদক্ষেপ ছিল। তবে দৈর্ঘ্য নেওয়াও অনেক দীর্ঘ!
নিল

3

সিজেম , 22 21 বাইট

মার্টিন ইন্ডারকে 1 বাইট সংরক্ষণ করা হয়েছে

{_,({0\f+}*ee::m<:.+}

বেনামে ব্লকটি স্ট্যাকের উপর যুক্তির প্রত্যাশা করে এবং ফলটিকে স্ট্যাকের উপরে ছেড়ে দেয়।

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

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

_                   e# Duplicate the matrix
 ,(                 e# Get its length (# of rows) minus 1
   {0\f+}*          e# Prepend that many 0s to each row
          ee        e# Enumerate; map each row to [index, row]
            ::m<    e# Rotate each row left a number of spaces equal to its index
                :.+ e# Sum each column




1

জেলি , 8 বাইট

ŒDS€ṙZL$

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

অর্ধেক কোড ব্যবহার করা হয় ফলাফলগুলি সঠিক ক্রমে রাখার জন্য।

কিভাবে?

ŒDS€ṙZL$ - Main link: list of lists of numbers
ŒD       - diagonals (starts with the diagonal containing the top left element,
         -            then the next diagonal to the right, and so on wrapping around)
  S€     - sum €each
       $ - last two links as a monad
     Z   - transpose the matrix
      L  - length (width of the matrix)
    ṙ    - rotate the results left by that amount

1

পার্ল 5, 47 বাইট

map{$j=--$.;map{@a[$j++]+=$_}split}<>
print"@a"

1

আর, 45 বাইট

একটি ম্যাট্রিক্স-শ্রেণীর অবজেক্টটিকে ইনপুট হিসাবে গ্রহণ করা নামহীন ফাংশন:

function(x)sapply(split(x,col(x)-row(x)),sum)

এই উত্তরে বর্ণিত ধারণাটি ব্যবহার করে ।


আমি বিশ্বাস করি যে এই চ্যালেঞ্জের নিয়মগুলি আপনাকে কলটি থেকে মুক্তি দিতে দেয় unnameতবে এটি নির্বিশেষে এটি একটি দুর্দান্ত সমাধান!
জিউসেপ

1

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

ধরে নেওয়া একটি একটি ম্যাট্রিক্স, উদাহরণস্বরূপ:

A = [17 4 5;24 16 5; 9 24 10; 1 14 22; 1 21 24; 4 4 17;24 25 17];

তারপর আমাদের আছে:

[m,n]=size(A);
a=[zeros(m,m-1),A]';
for i=1:m+n-1
trace(a(i:end,:))
end

লক্ষ্য করুন যে ম্যাট্রিক্স স্থানান্তর করায় তির্যক অঙ্কগুলির ক্রমটি বিপরীত হয়, যা লুপের জন্য সামগ্রিকভাবে দুটি বাইট সংরক্ষণ করে।

আউটপুট:

ans =  24
ans =  29
ans =  22
ans =  39
ans =  47
ans =  70
ans =  43
ans =  9
ans =  5

1
[m,n]=size(A);for i=1:m+n-1,trace([zeros(m-1,m);A'](i:end,:)),end6 বাইট সঞ্চয় অক্টাভা সরাসরি ইনডেক্সিং এবং ইনলাইন অ্যাসাইনমেন্টগুলি করতে পারে। দুর্ভাগ্যবশত, অভিমানী যে কাজের স্থান কোড চালনাকারী পূর্বে একটি পরিবর্তনশীল বিদ্যমান, অনুমোদিত নয় তাই আমি মনে করি আপনি ব্যবহার করা আবশ্যক inputমত, এই আনয়ন এটা 75 বাইট ব্যাকআপ করুন। যদিও ভাল পন্থা, তাই আমার কাছ থেকে +1 :) এবং পিপিসিজিতে আপনাকে স্বাগতম! =)
স্টিভি গ্রিফিন

এছাড়াও, 4 বাইট সংরক্ষণ করে zeros(m-1,m)লেখা যেতে পারে ~e(m-1,m):) ঝরঝরে হাহ?
স্টিভি গ্রিফিন

0

পাইথন, 126 বাইট

x=input()
f=lambda k:[x[i+k][i]for i in range(len(x)-k)]
a=map(f,range(4)[::-1])
x=zip(*x)
print(map(sum,a+map(f,range(1,4))))

fকেবল নিম্ন ত্রিভুজাকার অংশে কাজ করে, তাই আমি এটিকে স্থানান্তর করি এবং উপরের ত্রিভুজাকার অংশটি সেভাবেই পাই। কেন fফাংশনটি নেতিবাচক মানগুলির জন্য কাজ করে না জানি (আমি fসংক্ষিপ্ত হয়ে গেলাম কারণ theণাত্মক হওয়ার অংশটি কাজ করে না)।


আমি সর্বশেষ পরীক্ষার মামলার জন্য একটি ত্রুটি পেয়েছি। tio.run/nexus/…
ডেনিস



0

আওক, 67 বাইট

{for(f=0;f++<NF;)s[NF-NR+f]+=$f}END{i=0;while(i++<NR*2)print s[i]}

Ungolfed:

{
    for (f = 0; f++ < NF;)
        s[NF-NR+f] += $f
}
END {
    i = 0
    while (i++ < NR*2)
        print s[i]
}

হোয়াইটস্পেসে অজগর বিভাজক $nহ'ল nক্ষেত্র (1-ইনডেক্সড); NFলাইনের ক্ষেত্রের সংখ্যা NRহ'ল বর্তমান সারিটির সংখ্যা। অপরিজ্ঞাত ভেরিয়েবলগুলি 0 হয় এবং প্রথম ব্যবহারে তৈরি হয়।


0

পিএইচপি, 86 বাইট

দুটি রূপে একটি মেমরি বান্ধব সমাধান:

<?for($i=$c=count($a=$_GET);--$i>-$c;print$s._)for($s=0,$d=$c;$d--;)$s+=$a[$i+$d][$d];
<?for($i=$c=count($a=$_GET);--$i>-$c;print$s._)for($s=$d=0;$d<$c;)$s+=$a[$i+$d][$d++];

স্ক্রিপ্ট প্যারামিটারগুলি থেকে ইনপুট নেয়, ডিলিমিটার হিসাবে আন্ডারস্কোর ব্যবহার করে;
ডিফল্ট সেটিংস (ডিফল্ট php.ini নয়) ব্যবহার করুন বা তাদের অনলাইনে চেষ্টা করুন


0

ক্লোজার, 81 বাইট

#(apply map +(map(fn[i c](concat(repeat(-(count %)i 1)0)c(repeat i 0)))(range)%))

বেশ ভার্বোজ, যেমন এটি শূন্যের সাথে তালিকাগুলি তৈরি করে যাতে আমরা কেবল কলাম-ভিত্তিক সমষ্টি গণনা করতে পারি।


0

গণিত 73 বাইট

Plus@@@Table[Diagonal[Partition[#1,#2[[1]]],k],{k,-#2[[2]]+1,#2[[1]]-1}]&

এইটি কোডের
শেষে এই জাতীয় কোনও শেষ 2D-অ্যারে এমএক্সএন (কেবলমাত্র এনএক্সএন নয়) এর জন্য কাজ করে (শেষ পরীক্ষার কেস)

[{17,4,5,24,16,5,9,24,10,1,14,22,1,21,24,4,4,17,24,25,17},{3,7}]

{24, 29, 22, 39, 47, 70, 43, 9, 5}

আকারে ইনপুট [{a, b, c, d ...}, {m, n}]

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