সর্বাধিক লাইনটি সন্ধান করুন


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

দ্রষ্টব্য: রেখাগুলি অ্যারের প্রান্তগুলির চারপাশে মোড়ানো নাও হতে পারে।

ইনপুট

  • এক্স, ওয়াই 2-ডি অ্যারের দ্বারা এক্স, ওয়াই> 0 সহ অ্যারের প্রতিটি উপাদানটিতে একটি পূর্ণসংখ্যার মান থাকে যা ইতিবাচক, শূন্য বা নেতিবাচক হতে পারে। আপনি যদি চান তবে বিকল্প অ্যারেমে এই অ্যারে গ্রহণ করতে পারেন (উদাহরণস্বরূপ 1-D অ্যারেগুলির তালিকা)।
  • একটি একক, ধনাত্মক পূর্ণসংখ্যা N, সর্বোচ্চ (এক্স, ওয়াই) এর চেয়ে বড় নয়।

আউটপুট

  • সর্বাধিক রেখার যোগফলকে উপস্থাপন করে এমন একক মান যা অ্যারেতে পাওয়া যাবে। মনে রাখবেন যে আপনাকে সেই লাইনের পৃথক উপাদান সরবরাহ করতে হবে না যেখানে এটি অবস্থিত।

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

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)
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন শিওর, যোগ করেছেন
ব্যবহারকারী 2390246

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

উত্তর:


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.

¥সেখানে দুর্দান্ত অপব্যবহার ...
এরিক দ্য আউটগল্ফার

ভবিষ্যতের (নতুন) ব্যবহারকারীদের জন্য: $একটি মোনাড তৈরি করে ZṚ, যখন ¥একটি ডায়াড তৈরি করে ZṚযা থেকে তার বাম অপারেণ্ডে প্রয়োগ করা একই ফাংশনের (90 সিসিডব্লু ঘোরানো) ফলাফল প্রদান করে। যা প্যাটার্নের সাথে মেলে + ×এবং মূল্যায়ন করুন v+(λ×ρ)(এটি v = v , (M ZṚ¥ n)এই ক্ষেত্রে রয়েছে)। তবে কেবল ব্যবহার $কাজ করে না কারণ + Fডায়াডিক চেইনে কোনও প্যাটার্ন নেই ।
ব্যবহারকারী 202729

6

ওল্ফ্রাম ভাষা (গণিত) , 73 বাইট matic

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

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

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

ইনপুট হিসাবে প্রথমে Nম্যাট্রিক্স নেয় A

Join@@Partition[#2,{#,#},1,1,-∞]খুঁজে বের করে যে Nদ্বারা Nম্যাট্রিক্স submatrix Aসঙ্গে padded -∞যেখানে প্রয়োজন গ্রিড চলমান আউট যে লাইন নিশ্চিত করার চলমান থেকে বের হতে হবে।

এই ব্লকের প্রত্যেকটির জন্য আমরা গণনা করছি Tr/@Join[#,#,{#,Reverse@#}]: প্রতিটি সারির ট্রেস (অর্থাত্ যোগফল), প্রতিটি কলামের ট্রেস (অর্থাত্ যোগফল), ব্লকের ম্যাথমেটিক কোড গল্ফিংয়ের ইতিহাসে প্রথমবারের মতো ট্রেস ( আসলে ট্রেস) , এবং ব্লকের ট্রেসটি বিপরীত হয়েছে। #হয় Transpose@#

তারপরে আমরা Maxএই সমস্তগুলির সন্ধান করি।


জন্য সবচেয়ে ইনপুট, 57-বাইট Max@BlockMap[Tr/@Join[#,#,{#,Reverse@#}]&,#2,{#,#},1]&এছাড়াও কাজ করে। তবে সারি বা কলামের চেয়ে কম -∞ক্ষেত্রে এবং প্যাডিং সমর্থন করে না এমন কেসগুলি পরিচালনা করতে আমাদের প্যাড করা দরকার । ANBlockMap
মিশা লাভরভ

1
টিআইও-বান্ধব সংস্করণ (ম্যাথমেটিকা ​​স্ক্রিপ্ট মোড) এর জন্য: U + F3C7 ( \[Transpose]) অক্ষরটি টাইপ করা যায় \:f3c7
ব্যবহারকারী 202729

3
এছাড়াও আমি বিশ্বাস করি এটি প্রথমবার Trট্রেস হিসাবে ব্যবহৃত হয় না ।
ব্যবহারকারী 202729

ধন্যবাদ! এবং যখন আমি অতিরঞ্জিত করছি না, তখন আমি নিশ্চিত যে 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}। (মুদ্রণযোগ্য টি ইউ + এফ 3 সি 7 = \[Transpose]; টিআইও যদিও এটি পছন্দ করবে বলে মনে হয় না {Transpose@#|#2,Reverse@#|#2}
Al

@ জংহওয়ানমিন এটি টিআইওর দোষ নয়, টিআইও-তে ম্যাথামেটিকাকে স্ক্রিপ্ট মোডে চালিত করা হয়, যা কেবলমাত্র এএসসিআইআইকে সমর্থন করে। আপনাকে টাইপ করতে হবে \[Transpose]বা \:f3c7(কমপক্ষে পরেরটির চেয়ে কম ছোট Thread@) তবে উত্তরটি যদি ম্যাথমেটিকা ​​আরপিএল হয় (ম্যাথমেটিক স্ক্রিপ্ট নয়) তবে আপনি 3-বাইট সমাধানটি ধরে নিতে পারেন।
ব্যবহারকারী 202729

@ 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

কারি ফাংশনটিতে দুটি আর্গুমেন্ট লাগে, প্রথমটি হ'ল সংখ্যার অ্যারে, দ্বিতীয়টি একটি সংখ্যা।

আরনাউল্ডকে ধন্যবাদ , 20+ বাইট সংরক্ষণ করুন।


1/sপরিবর্তে s==sপ্রত্যাশা হিসাবে কাজ করা উচিত।
আর্নৌল্ড

দুটিই এভালের হাত থেকে মুক্তি পাওয়া: 130 বাইট
আর্নাউল্ড

@ আরনাউল্ড ধন্যবাদ এবং 1 বাইট সংরক্ষণ (s=(g=...)(n))>m?s:mকরতে পরিবর্তন করুন (g=...)(n)>m?g(n):m
tsh

2

জেকিউ 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)
  • Golfing দ্বারা সাত বাইট সংরক্ষিত 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) প্রয়োগ করা ফাংশনের ফলাফল এবং (ঝ, জে +1)। পরীক্ষার মামলার ফলাফল টিআইওতে দেখানো হয়েছে।


আমি আশা করি আমি এটি মিস করেছি তবে আর বর্গীয় ম্যাট্রিক্সের ট্রেস গণনা করার জন্য আর এর কোনও বেস ফাংশন নেই বলে মনে হচ্ছে।
NofP

এটি আপনাকে বাইটস বাঁচাতে পারে কিনা তা নিয়ে কাজ করা হয়নি তবে আপনি
ট্রেসটির


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)


@ হারমানলৌনস্টেইন আমি স্পেসগুলি সরিয়ে দিয়েছি তবে আরও কভারেজ যোগ করেছে যা মোট আরও চর যোগ করেছে, তবে
থেক্স

অপ্রয়োজনীয় নিউলাইনগুলি সরিয়ে 164 বাইট ( G=গণনা করা হয় না)
হারমান এল

এর a||M,b||M,c||M,d||Mপরিবর্তে আপনি কেন ব্যবহার করলেন a,b,c,d?
হারমান এল

@ হারমানলাউনস্টেইন ম্যাথ.ম্যাক্স (NaN / অপরিজ্ঞাত, 6) =
নাএন

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)

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



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