এটি কি পাস্কালের ম্যাট্রিক্স?


25

ইন প্যাসকেলের ত্রিভুজ প্রতিটি নম্বরে সরাসরি উপরে দুটি সংখ্যার যোগফল হয়, শূন্য হিসাবে খালি দাগ চিকিত্সা:

সূত্র: https://en.wikedia.org/wiki/File:Passal_triangle_small.png

ত্রিভুজটি ঘোরানোর মাধ্যমে আমরা বিভিন্ন আকারের এবং ঘূর্ণনের বর্গক্ষেত্রের ম্যাট্রিক্সগুলি কেটে ফেলতে পারি যা আমি পাস্কালের ম্যাট্রিকগুলিতে কল করব । মনে রাখবেন যে এই ম্যাট্রিকগুলিতে সর্বদা শীর্ষ থাকতে হবে । এখানে কিছু উদাহরন:1

1  1  1  1
1  2  3  4
1  3  6 10
1  4 10 20

6  3  1
3  2  1
1  1  1

1  5 15 35 70
1  4 10 20 35
1  3  6 10 15
1  2  3  4  5
1  1  1  1  1

1

1  1
2  1

কাজটি

যেকোন যুক্তিসঙ্গত ফর্ম্যাটে ধনাত্মক সংখ্যাযুক্ত বর্গক্ষেত্রের ম্যাট্রিক্স দেওয়া, এটি পাস্কালের ম্যাট্রিক্স কিনা তা স্থির করুন ।

ইনপুটটি পাস্কালের ম্যাট্রিক্স কিনা তার উপর নির্ভর করে সত্যবাদী বা মিথ্যা মানগুলি প্রত্যাবর্তনের সিদ্ধান্ত গ্রহণের অর্থ , বা দুটি ধ্রুবক মান স্থির করে সত্যিকারের ইনপুটগুলির জন্য একটি এবং অন্যটি মিথ্যা ইনপুটগুলির জন্য ফিরে আসা।

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

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

সত্য

[[1, 1, 1, 1], [1, 2, 3, 4], [1, 3, 6, 10], [1, 4, 10, 20]]
[[6, 3, 1], [3, 2, 1], [1, 1, 1]]
[[1, 5, 15, 35, 70], [1, 4, 10, 20, 35], [1, 3, 6, 10, 15], [1, 2, 3, 4, 5], [1, 1, 1, 1, 1]]
[[1]]
[[1, 1], [2, 1]]

মিথ্যা

[[2]]
[[1, 2], [2, 1]]
[[1, 1], [3, 1]]
[[1, 1, 1, 1], [1, 2, 3, 4], [1, 4, 6, 10], [1, 4, 10, 20]]
[[6, 3, 1], [1, 1, 1], [3, 2, 1]]
[[2, 2, 2, 2], [2, 4, 6, 8], [2, 6, 12, 20], [2, 8, 20, 40]]
[[40, 20, 8, 2], [20, 12, 6, 2], [8, 6, 4, 2], [2, 2, 2, 2]] 
[[1, 5, 15, 34, 70], [1, 4, 10, 20, 34], [1, 3, 6, 10, 15], [1, 2, 3, 4, 5], [1, 1, 1, 1, 1]]

প্রস্তাবিত পরীক্ষা মামলা: [[40, 20, 8, 2], [20, 12, 6, 2], [8, 6, 4, 2], [2, 2, 2, 2]]। আমার প্রাথমিক উত্তরটি এইটির জন্য ভুলভাবে সত্য ছিল, তবে বর্তমান পরীক্ষার সমস্ত ক্ষেত্রেই সঠিক।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন ধন্যবাদ, যোগ করা হয়েছে।
লাইকোনি

উত্তর:


6

ব্র্যাচল্যাগ , 28 24 23 বাইট

এটি বেশ দীর্ঘ বোধ করে তবে এখানে এটি যাইহোক

  • -4 বাইটগুলি Lচ্ছিক ফ্লিপগুলি সঙ্কুচিত করে ডিএলসকে ধন্যবাদ জানায়
  • -1 বাইটস আবার একবারে আংশিক অঙ্কগুলি করে ডিএলসকে ধন্যবাদ জানায়

{|↔}\↰₁{k{a₀ᶠ+ᵐ}ᵐ⊆?h=₁}

ব্যাখ্যা

{|↔}\↰₁{k{a₀ᶠ+ᵐ}ᵐ⊆?h=₁}       # Tests if this is a pascal matrix:
{|↔}\↰₁                       #     By trying to get a rows of 1's on top
{|↔}                          #       Through optionally mirroring vertically
     \                        #       Transposing
      ↰₁                      #       Through optionally mirroring vertically

       {k{a₀ᶠ+ᵐ}ᵐ⊆?h=₁}       #     and checking the following
                  ?h=₁        #        first row is a rows of 1's
        k{     }ᵐ             #        and for each row except the last
          a₀ᶠ+ᵐ               #          calculate the partial sum by
          a₀ᶠ                 #             take all prefixes of the input
             +ᵐ               #             and sum each
               ⊆?             #        => as a list is a subsequence of the rotated input

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



4

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

4:"Gas2YLG@X!X=va

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

অন্যথায় 1, পাস্কাল ম্যাট্রিক্সের আউটপুট 0

ব্যাখ্যা

4:      % Push [1 2 3 4]
"       % For each
  G     %   Push input: N×N
  a     %   1×N vector containing 1 for matrix columns that have at least a nonzero
        %   entry, and 0 otherwise. So it gives a vector containing 1 in all entries
  s     %   Sum. Gives N
  2YL   %   Pascal matrix of that size
  G     %   Push input
  @     %   Push current iteration index
  X!    %   Rotate the matrix that many times in steps of 90 degress
  X=    %   Are they equal?
  v     %   Concatenate with previous accumulated result
  a     %   Gives 1 if at least one entry of the vector is nonzero
        % End (implicit). Display (implicit)

2

আর , 104 বাইট

function(m,R=row(m)-1,y=nrow(m):1,Z=choose(R+t(R),R))any(sapply(list(Z,Z[,y],Z[y,y],Z[y,]),identical,m))

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

কদর্য ...

একটি ক্যানোনিকাল প্যাসকেলের ম্যাট্রিক্স তৈরি করা হয় Zমাত্রা যে সমান সঙ্গে m, তারপর যদি ইনপুট ম্যাট্রিক্স পরীক্ষা mহয় identicalথেকে anyএর ঘুর্ণন এর Z


2

কাঠকয়লা , 41 বাইট

F‹¹⌈§θ⁰≔⮌θθF‹¹⌈Eθ§ι⁰≦⮌θ⌊⭆θ⭆ι⁼λ∨¬κΣ…§θ⊖κ⊕μ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

F‹¹⌈§θ⁰

যদি এর প্রথম সারির সর্বাধিকতা 1 এর চেয়ে বেশি হয়,

≔⮌θθ

তারপরে ইনপুট অ্যারে ফ্লিপ করুন।

F‹¹⌈Eθ§ι⁰

যদি এর প্রথম কলামটির সর্বোচ্চটি 1 এর চেয়ে বেশি হয়,

≦⮌θ

তারপরে ইনপুট অ্যারে মিরর করুন।

⌊⭆θ⭆ι

ইনপুট অ্যারের উপাদানের উপর লুপ করুন এবং সর্বনিম্ন ফলাফল মুদ্রণ করুন (যেমন লজিকাল এবং ফলাফলগুলির সমস্ত),

⁼λ∨¬κΣ…§θ⊖κ⊕μ

প্রতিটি মান 1 টির সাথে তুলনা করুন যদি এটি প্রথম সারিতে থাকে অন্যথায় উপরের সারির যোগফল এবং উপরের ঘরটি সহ।



1

05 এ বি 1 ই , 29 বাইট

¬P≠iR}DøнP≠ií}¬PΘsü)ε`sηOQ}P*

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

ব্যাখ্যা:

¬Pi }        # If the product of the first row of the (implicit) input-matrix is NOT 1:
    R         #  Reverse the order of the rows
D             # Duplicate the resulting matrix
 øнPi }      # If the product of the first column is NOT 1:
      í       #  Reverse each row individually
¬PΘ           # Check if the product of the first row is exactly 1
           *  # AND
          P   # And check if everything after the following map is truthy:
sü)ε     }    #  Map over each pair of rows:
    `sη       #   Get the prefixes of the first row
       O      #   Sum each prefix
        Q     #   And check if it's equal to the second row
              # (and output the result implicitly)



1

জাভা (জেডিকে) , 234 বাইট

m->{int l=m.length,L=l-1,p=1,s=0,S=0,e=l,E=l,d=1,D=1,i,j;if(m[0][0]>1|m[0][L]>1){s=L;e=d=-1;}if(m[0][0]>1|m[L][0]>1){S=L;E=D=-1;}for(i=s;i!=e;i+=d)for(j=S;j!=E;j+=D)p=(i==s|j==S?m[i][j]<2:m[i][j]==m[i-d][j]+m[i][j-D])?p:0;return p>0;}

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

ক্রেডিট


1
সুন্দর উত্তর, কিন্তু ডাং, ভেরিয়েবলের বোঝা। ;) ওহ, এবং -1: i==s||j==Sথেকে i==s|j==S
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন যদি আপনি আরও ভাল অ্যালগরিদম জানেন তবে আমি এটি নিচ্ছি! তবে ঘূর্ণনটি সমস্ত ভেরিয়েবলের কারণ। কিছু ভাষাগুলি এগুলি 1-2 বাইটে পরিচালনা করতে পারে, জাভাতে, আপনার চারপাশের কোডটি ভাবতে হবে। মূল অ্যালগরিদম আসলে খুব সংক্ষিপ্ত: m->{int l=m.length,i=0,j;for(;i<l;i++)for(j=0;j<l;j++)p=(i<1|j<1?m[i][j]<2:m[i][j]==m[i-1][j]+m[i][j-1])?p:0;return p>0;}(122 বাইট)
অলিভিয়ের গ্রাগোয়ার

0

জেলি , 22 বাইট

Ż€Iṫ2⁼ṖaFḢ=1Ʋ
,Ṛ;U$Ç€Ẹ

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

ব্যাখ্যা

সহায়ক লিঙ্ক, ম্যাট্রিক্সের এই ঘূর্ণন বৈধ কিনা তা পরীক্ষা করে

Ż€            | prepend each row with zero
  I           | find differences within rows
   ṫ2         | drop the first row
     ⁼Ṗ       | compare to the original matrix
              |   with the last row removed
       a      | logical and
        FḢ=1Ʋ | top left cell is 1

প্রধান লিঙ্ক

,Ṛ            | copy the matrix and reverse the rows
  ;U$         | append a copy of both of these
              |   with the columns reversed
     ǀ       | run each version of the matrix
              |   through the helper link
       Ẹ      | check if any are valid
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.