क्या यह पास्कल की मैट्रिक्स है?


25

में पास्कल त्रिकोण प्रत्येक संख्या को ठीक उसके ऊपर दो संख्याओं का योग है, शून्य के रूप में रिक्त स्थान न इलाज:

स्रोत: https://en.wikipedia.org/wiki/File:Pascal_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]]। मेरा प्रारंभिक उत्तर इस एक के लिए गलत रूप से सत्य था, लेकिन वर्तमान परीक्षण के सभी मामलों के लिए सही है।
केविन क्रूज़सेन

@KevinCruijssen धन्यवाद, जोड़ा गया।
लकोनी

जवाबों:


6

ब्रेकीलॉग , 28 24 23 बाइट्स

यह काफी लंबा लगता है लेकिन यहाँ वैसे भी है

  • -4 बाइट्स वैकल्पिक flips को संपीड़ित करके DLosc के लिए धन्यवाद
  • -1 बाइट्स को फिर से 1 बार में आंशिक रकम देकर DLosc को धन्यवाद

{|↔}\↰₁{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

MATL , 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

05AB1E , 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

जावा (JDK) , 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
केविन क्रूज़सेन

यदि आप एक बेहतर एल्गोरिथ्म जानते हैं तो मैं इसे ले सकता हूँ @KevinCruijssen! लेकिन रोटेशन सभी चर का कारण है। कुछ भाषाएं उन्हें 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.