सबसे बड़ी पंक्ति ज्ञात कीजिए


14

आपको पूर्णांक का एक 2-डी सरणी ए, और एक लंबाई एन दिया जाएगा। आपका काम एन तत्वों की सीधी रेखा (क्षैतिज, ऊर्ध्वाधर या विकर्ण) के भीतर खोजना है जो उच्चतम कुल योग प्राप्त करता है, और उस राशि को लौटाता है। ।

उदाहरण

 N = 3, A = 
 3    3    7    9    3
 2    2   10    4    1
 7    7    2    5    0
 2    1    4    1    3

इस सरणी में 34 मान्य लाइनें हैं, जिनमें शामिल हैं

 Vertical
 [3]   3    7    9    3
 [2]   2   10    4    1
 [7]   7    2    5    0
  2    1    4    1    3       [3,2,7] = 12
 Horizontal
  3    3    7    9    3
  2    2   10    4    1
  7    7   [2]  [5]  [0]
  2    1    4    1    3       [2,5,0] = 7
 Diagonal
  3    3   [7]   9    3
  2    2   10   [4]   1
  7    7    2    5   [0]
  2    1    4    1    3       [7,4,0] = 11

अधिकतम लाइन है

 3    3    7   [9]   3
 2    2  [10]   4    1
 7   [7]   2    5    0
 2    1    4    1    3        [7,10,9] = 26

नोट: लाइनें सरणी के किनारों के आसपास नहीं लपेटी जा सकती हैं।

इनपुट

  • AX, Y 2-D सरणी A द्वारा X, Y> 0. के साथ AX के प्रत्येक तत्व में पूर्णांक मान होता है जो सकारात्मक, शून्य या नकारात्मक हो सकता है। यदि आप चाहें तो आप इस सरणी को एक वैकल्पिक प्रारूप (जैसे 1-डी सरणियों की सूची) में स्वीकार कर सकते हैं।
  • एक एकल, धनात्मक पूर्णांक N, अधिकतम (X, Y) से अधिक नहीं।

उत्पादन

  • एक एकल मान जो अधिकतम पंक्ति योग का प्रतिनिधित्व करता है जो सरणी में पाया जा सकता है। ध्यान दें कि आपको उस पंक्ति के व्यक्तिगत तत्वों को प्रदान करने की आवश्यकता नहीं है या यह कहाँ स्थित है।

परीक्षण के मामलों

N = 4, A = 
-88    4  -26   14  -90
-48   17  -45  -70   85
 22  -52   87  -23   22
-20  -68  -51  -61   41
Output = 58

N = 4, A =
 9    4   14    7
 6   15    1   12
 3   10    8   13
16    5   11    2
Output = 34

N = 1, A = 
 -2
Output = -2

N = 3, A =
1    2    3    4    5
Output = 12

N = 3, A = 
-10   -5    4
 -3    0   -7
-11   -3   -2
Output = -5 

क्या आप एक परीक्षण मामला जोड़ सकते हैं जहां परिणामी आउटपुट नकारात्मक है? जैसे [[-10, -5, 4],[-3, 0, -7],[-11,-3,-2]]-> -5( 4 + -7 + -2)
केविन क्रूज़सेन

@KevinCruijssen ज़रूर, जोड़ा
user2390246

1
वैसे: एक स्पष्टीकरण के साथ सभी जवाब मेरे पास से एक लाभ प्राप्त करेंगे, लेकिन अन्यथा मेरे पास उन भाषाओं को पहचानने का कोई तरीका नहीं है जिनसे मैं परिचित नहीं हूं (और उनमें से ज्यादातर)।
user2390246

जवाबों:


10

जेली , 15 बाइट्स

,ZṚ¥;ŒD$+⁹\€€FṀ

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

,ZṚ¥;ŒD$+⁹\€€FṀ  Main link. Left argument: M (matrix). Right argument: n (integer)

 ZṚ¥             Zip/transpose and reverse M. This is equivalent to rotating M 90°
                 counterclockwise.
,                Pair M and the result to the right.
    ;ŒD$         Append the diagonals of both matrices to the pair.
        +⁹\€€    Take the sums of length n of each flat array.
             FṀ  Flatten and take the maximum.

¥वहाँ का अच्छा दुरुपयोग ...
१ol'१ Out से १ol:

भविष्य के लिए (नए) उपयोगकर्ता: $से एक मोनाड बनाता है ZṚ, जबकि ¥एक डाईएड बनाता है ZṚजिससे उसी फ़ंक्शन के परिणाम (90 सीसीडब्ल्यू को घुमाएं) उसके बाएं ऑपरेंड पर लागू होता है। जो पैटर्न से मेल खाता है + ×और मूल्यांकन करता है v+(λ×ρ)(यह v = v , (M ZṚ¥ n)इस मामले में है)। हालाँकि सिर्फ उपयोग से $काम नहीं चलता है क्योंकि + Fडेडिक चेन में कोई पैटर्न नहीं है ।
user202729

6

वोल्फ्राम लैंग्वेज (मैथमेटिका) , 73 बाइट्स

Max[Tr/@Join[#,#,{#,Reverse@#}]&/@Join@@Partition[#2,{#,#},1,1,-∞]]&

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

पहले लेता है NAइनपुट के रूप में मैट्रिक्स और फिर मैट्रिक्स ।

Join@@Partition[#2,{#,#},1,1,-∞] हर पाता है NNमैट्रिक्स के सबमेट्रिक्स द्वारा है A, -∞जहां आवश्यक हो, यह सुनिश्चित करने के लिए कि ग्रिड से बाहर चलने वाली लाइनें चल रही हैं।

उन प्रत्येक ब्लॉकों के लिए जिनकी हम गणना करते हैं Tr/@Join[#,#,{#,Reverse@#}]: प्रत्येक पंक्ति का ट्रेस (यानी योग), प्रत्येक कॉलम का ट्रेस (यानी योग), ट्रेस ( वास्तव में ट्रेस, ब्लॉक के गणितज्ञ कोड गोल्फिंग के इतिहास में पहली बार) , और ब्लॉक का निशान उलट गया। #है Transpose@#

फिर हम Maxइन सभी को ढूंढते हैं।


के लिए सबसे आदानों, 57-बाइट Max@BlockMap[Tr/@Join[#,#,{#,Reverse@#}]&,#2,{#,#},1]&भी काम करता है। लेकिन हमें -∞उन मामलों को संभालने के लिए पैड करने की आवश्यकता है जहां पंक्तियों या स्तंभों की Aतुलना में कम है N, और BlockMapपैडिंग का समर्थन नहीं करता है।
मिशा लावरोव

1
TIO- फ्रेंडली वर्जन (Mathematica script mode): के लिए U + F3C7 ( \[Transpose]) टाइप किया जा सकता है \:f3c7
user202729

3
इसके अलावा, मेरा मानना ​​है कि यह पहली बार Trट्रेस के रूप में उपयोग नहीं किया गया है।
user202729

धन्यवाद! और जब मैं अतिशयोक्ति नहीं कर रहा हूं, तो मुझे यकीन है कि Trमैट्रिक्स का पता लगाने से पहले का उपयोग हो रहा है, लेकिन यह अभी भी दुर्लभ और आश्चर्यजनक है।
मिशा लावरोव

3
मुझे पता है कि मैंने पहले भी कहा है, लेकिन गैर-एएससीआईआई कोड को अभी ठीक काम करना चाहिए। इसे ऑनलाइन आज़माएं!
डेनिस

4

मैथेमेटिका, 135 123 बाइट्स

Max[(s=#;r=#2;Max[Tr/@Partition[#,r,1]&/@Join[s,s~Diagonal~#&/@Range[-(t=Tr[1^#&@@s])+2,t-1]]])&@@@{#|#2,Reverse@#|#2}]&


इसे ऑनलाइन आज़माएं!


कुछ अनुकूलन: Diagonal[s,#]करने के लिए s~Diagonal~#, और {{Transpose@#,#2},{Reverse@#,#2}}करने के लिए {#|#2,Reverse@#|#2}। (गंदा U + F3C7 = है \[Transpose]: TIO हालांकि, इस तरह प्रतीत नहीं होता है वैकल्पिक। {Transpose@#|#2,Reverse@#|#2})
JungHwan मिन

@JungHwanMin यह TIO की गलती नहीं है, TIO पर Mathematica स्क्रिप्ट मोड में चलाया जाता है, जो केवल DCII के लिए समर्थन करता है। आपको टाइप करने की आवश्यकता है \[Transpose]या \:f3c7(कम से कम बाद वाले की तुलना में कम है Thread@) हालांकि यदि उत्तर Mathematica REPL है (मैथमेटिका स्क्रिप्ट नहीं) तो आप 3-बाइट समाधान मान सकते हैं।
user202729

@ user202729 धन्यवाद, पता नहीं था!
जुंगवान मिन ऑक्ट


3

जावास्क्रिप्ट, 151 129 बाइट्स

a=>n=>a.map((l,x)=>l.map((v,y)=>[...'01235678'].map(d=>m=(g=i=>i--&&g(i)+(a[x+d%3*i-i]||[])[y+i*~-(d/3)])(n)>m?g(n):m)),m=-1/0)|m

करी फ़ंक्शन दो तर्क लेता है, पहला नंबर की एक सरणी है, दूसरा नंबर है।

Arnauld के लिए धन्यवाद , 20+ बाइट्स बचाएं।


1/sइसके बजाय s==sउम्मीद के मुताबिक काम करना चाहिए।
अरनौलड

: दोनों eval के से छुटकारा 130 बाइट्स
Arnauld

@ अर्नुलद धन्यवाद और 1 बाइट बचाने के (s=(g=...)(n))>m?s:mलिए बदलें (g=...)(n)>m?g(n):m
1

2

Jq 1.5 , 211 बाइट्स

def R:reverse;def U:[range(length)as$j|.[$j][$j:]]|transpose|map(map(select(.))|select(length>=N));def D:U+([R[]|R]|U|map(R)[1:]);[A|.,transpose,D,(map(R)|D)|.[]|range(length-N+1)as$i|.[$i:$i+N]]|max_by(add)|add

में इनपुट की उम्मीद है Nऔर A, जैसे:

def N: 3;
def A: [
  [ 3, 3,  7, 9, 3 ],
  [ 2, 2, 10, 4, 1 ],
  [ 7, 7,  2, 5, 0 ],
  [ 2, 1,  4, 1, 3 ]
];

विस्तारित

def chunks:      .[] | range(length-N+1) as $i | .[$i:$i+N] ;
def flip:        [ reverse[] | reverse ] ;
def upperdiag:   [ range(length) as $j | .[$j][$j:] ] | transpose | map(map(select(.))|select(length>=N)) ;
def lowerdiag:   flip | upperdiag | map(reverse)[1:] ;
def diag:        upperdiag + lowerdiag ;
def allchunks:   A | ., transpose, diag, (map(reverse)|diag) | chunks ;

[allchunks]|max_by(add)|add

ध्यान दें कि यह चुनौती मूल रूप से प्रोजेक्ट यूलर समस्या 11 के समान है

इसे ऑनलाइन आज़माएं!


1

पायथन 2 , 208 184 183 176 बाइट्स

  • -float("inf")यह दर्शाने के लिए 24 बाइट्स का उपयोग करके सहेजा गया है कि चेक की गई रेखा सभी मैट्रिक्स तत्वों के ऋणात्मक योग की गणना करने के बजाय मैट्रिक्स के बाहर पहुंच गई।
  • R,L=range,lenअंतर्निहित कार्यों को छोटा करने और y in R(L(A))...R(L(A[y]))इसके बजाय उपयोग करने के लिए परिभाषित करके एक बाइट को बचाया y,Y in e(A)...x,_ in e(Y)
  • गोल्फिंग द्वारा सात बाइट्स सहेजे float("inf")गए 9e999
lambda N,A:max(sum(A[y+q*j][x+p*j]if-1<x+p*j<L(A[y])>-1<y+q*j<L(A)else-9e999for j in R(N))for y in R(L(A))for x in R(L(A[y]))for p,q in[(1,0),(0,1),(1,1),(1,-1)]);R,L=range,len

इसे ऑनलाइन आज़माएं!

व्याख्या

lambda N,A:                                                                                                                                                       ;R,L=range,len # lambda function, golfed built-ins
           max(                                                                                                                                                  )               # return the maximum line sum
                                                                                          for y in R(L(A))                                                                       # loop through matrix rows
                                                                                                          for x in R(L(A[y]))                                                    # loop through matrix columns
                                                                                                                             for p,q in[(1,0),(0,1),(1,1),(1,-1)]                # loop through four directions; east, south, south-east, north-east
               sum(                                                                      )                                                                                       # matrix line sum
                                                                            for j in R(N)                                                                                        # loop through line indices
                                  if-1<x+p*j<L(A[y])>-1<y+q*j<L(A)                                                                                                               # coordinates inside the matrix?
                   A[y+q*j][x+p*j]                                                                                                                                               # true; look at the matrix element
                                                                  else-9e999                                                                                                     # false; this line cannot be counted, max(...) will not return this line

1

आर , 199 बाइट्स

function(m,n,i=1,j=1){y=1:n-1
x=j-y;x[x<1]=NA
y=i-y;y[y<1]=NA
'if'(i>nrow(m)|j>ncol(m),NA,max(c(v(m[i,x]),v(m[y,j]),v(m[b(y,x)]),v(m[b(y,rev(x))]),f(m,n,i+1,j),f(m,n,i,j+1)), na.rm=T))}
v=sum
b=cbind

इसे ऑनलाइन आज़माएं!

एक पुनरावर्ती समाधान। मैट्रिक्स के प्रत्येक तत्व (i, j) के लिए यह पंक्ति के साथ योग के बीच अधिकतम रिटर्न देता है, कॉलम के साथ योग, विकर्ण के साथ योग, और फ़ंक्शन का परिणाम (i + 1, j) और (i, j +1)। परीक्षण मामलों के परिणाम TIO में दिखाए गए हैं।


मुझे आशा है कि मैं इसे याद कर रहा हूं, लेकिन आर एक वर्ग मैट्रिक्स के ट्रेस की गणना करने के लिए आधार फ़ंक्शन की कमी है।
एनओएफपी

काम नहीं किया अगर यह आपको बाइट्स बचा लेगा, लेकिन आप ट्रेस के लिए योग (डायग (एम)) का उपयोग कर सकते हैं
user2390246


0

जावास्क्रिप्ट 170 बाइट्स

अभी भी गोल्फ भाग पर पोंछ 4 और आकर्षण जोड़े क्योंकि मैंने ऐसा मामला प्रबंधित नहीं किया है जहां अधिकतम नकारात्मक है और एन 1 से बड़ा है

M=-1e9
G=(A,N)=>eval(`for(y in m=M,A)
for(x in R=A[y])
{for(a=b=c=d=j=0;j<N;d+=Y[x-j++])
{a+=R[X=+x+j]
b+=(Y=A[+y+j]||[])[x]
c+=Y[X]}
m=Math.max(m,a||M,b||M,c||M,d||M)}`)

console.log(G([ [3,3,7,9,3],
 [2,2,10,4,1],
 [7,7,2,5,0],
 [2,1,4,1,3]],3)==26)
 
 console.log(G([[-88,4,-26,14,-90],
[-48,17,-45,-70,85],
[22,-52,87,-23,22],
[-20,-68,-51,-61,41]],4)==58)

console.log(G([[9,4,14,7],[6,15,1,12],[3,10,8,13],[16,5,11,2]],4)==34)

console.log(G([[-2]],1)==-2)
console.log(G([[1,2,3,4,5]],3) ==12)


@ हर्मनलॉन्स्टीन मैं रिक्त स्थान हटाता हूं, लेकिन अधिक कवरेज को जोड़ा गया है जो कुल अधिक वर्णों में जोड़ा गया है, लेकिन thx :)
डैनियलइंडी

अनावश्यक ब्युटी हटाकर 164 बाइट्स ( G=गिना नहीं जाता)
हरमन एल

के a||M,b||M,c||M,d||Mबजाय आपने क्यों इस्तेमाल किया a,b,c,d?
हरमन एल

@ हर्मनलॉस्टीन मैथ.मैक्स (NaN / अपरिभाषित, 6) = NaN
डैनियलइंडी

0

पायथन 2 , 222 218 बाइट्स

n,a=input()
W=len(a[0]);Q=['']*W;R=range;a+=[Q]*n
for l in a:l+=Q
print max(sum(x)for y in[zip(*[(a[j][i+k],a[j+k][i],a[j+k][i+k],a[j+k][i+n+~k])for k in R(n)])for j in R(len(a)-n)for i in R(W)]for x in y if''not in x)

इसे ऑनलाइन आज़माएं!



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.