অ-ওভারল্যাপিং ম্যাট্রিক্স যোগফল


25

অ-ওভারল্যাপিং ম্যাট্রিক্স যোগফল

প্রদত্ত দৈর্ঘ্যের অ্যারে এন , আউটপুট সর্বোচ্চ সম্ভব সমষ্টি প্রতিটি অ্যারের যেমন যে কোন দুটি উপাদান একই সূচক থেকে এসেছ থেকে এক উপাদান ব্যবহার করে। এটি গ্যারান্টিযুক্ত যে কে <= এন।

ইনপুট

পূর্ণসংখ্যার মজাদার অ্যারেগুলির একটি অজানা তালিকা।

আউটপুট

একটি পূর্ণসংখ্যা যা সর্বোচ্চ যোগফলকে উপস্থাপন করে।

উদাহরণ

Input -> Output
[[1]] -> 1
[[1, 3], [1, 3]] -> 4
[[1, 4, 2], [5, 6, 1]] -> 9
[[-2, -21],[18, 2]] -> 0
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] -> 15
[[1, 2, 3, 4], [5, 4, 3, 2], [6, 2, 7, 1]] -> 16
[[-2, -1], [-1, -2]] -> -2

5
গণিত মজাদার ঘটনা: বর্গাকার অ্যারেগুলির জন্য, এটি গ্রীষ্মমন্ডলীয় সেমিরিংয়ের উপর স্থায়ী ম্যাট্রিক্স যা (+, *) এর জায়গায় ক্রিয়াকলাপ (সর্বোচ্চ, +) ব্যবহার করে।
xnor

উত্তর:


9

জেলি , 10 6 বাইট

ZŒ!ÆṭṀ

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

(@ ডেনিসের দ্বারা সংরক্ষিত 4 বাইট, যিনি উল্লেখ করেছিলেন যে জেলি একটি "প্রধান তির্যক" বিল্টিন রয়েছে) আমি এর মধ্যে একটির প্রত্যাশা করছিলাম না ; পূর্ববর্তী সমাধানটি বিল্টিনটি ব্যবহার না করেই অপারেশন বাস্তবায়ন করেছিল। প্রশ্নটিতে অপারেশন, Æṭ, "ট্রেস" হিসাবে সংজ্ঞায়িত করা হয় তবে ট্রেসটি কেবল বর্গক্ষেত্রের জন্যই সংজ্ঞায়িত হয়; জেলি আয়তক্ষেত্রাকার ম্যাট্রিকগুলিতেও একটি সাধারণীকরণ প্রয়োগ করে))

অন্যান্য উত্তরের তুলনায় উন্নতিটি বেশিরভাগ সরল (এভাবে প্রকাশের জন্য ক্ষুদ্র) আলগোরিদিম থেকে হয়; এই প্রোগ্রামটি প্রথমে ব্র্যাচল্যাগ ভি 2 ( {\p\iᶠ∋₎ᵐ+}ᶠot) এ লিখিত ছিল , তবে জেলি প্রোগ্রামটির কিছু অংশের জন্য কিছু বিল্টিন রয়েছে যা ব্র্যাচল্যাগে বানান করতে হয়, তাই এটি আরও সংক্ষিপ্ত হয়ে এলো।

ব্যাখ্যা

ZŒ!ÆṭṀ
Z            Swap rows and columns
 Œ!          Find all permutations of rows (thus columns of the original)
   Æṭ        {For each permutation}, take the sum of the main diagonal
     Ṁ       Take the maximum

এটি পরিষ্কার হওয়া উচিত যে সমস্যার যে কোনও সমাধানের জন্য, আমরা মূল ম্যাট্রিক্সের কলামগুলিকে সেই সমাধানটি মূল তির্যকটিতে রেখে দিতে পারি। সুতরাং এই সমাধানটি সহজেই বিপরীত হয়, ক্রমীয়মানের সমস্ত সম্ভাব্য প্রধান ত্রিভুজ খুঁজে বের করে।

নোট করুন যে "কলামগুলিকে অনুমতি দিন" অপারেশনটি "ট্রান্সপোজ, সারিগুলিকে সারণী" হিসাবে সম্পন্ন করা হয়েছে; বাকী অ্যালগরিদম মূল তির্যকটি সম্পর্কে প্রতিসম হিসাবে ঘটে তাই আমাদের ট্রান্সপোজকে পূর্বাবস্থায় ফেরাতে হবে না এবং এইভাবে একটি বাইট সংরক্ষণ করতে পারে।


ZŒ!ÆṭṀচারটি বাইট সংরক্ষণ করে এটি অনলাইন চেষ্টা করুন!
ডেনিস

দেখলে মনে হয় ডেনিস শেষ শব্দটি পেয়েছিল: পি
কুইনটেক

আমি অবাক হয়েছি যদি সেই বিল্টিন কখনও আগে আসে?
ais523

নিশ্চিত নয়, তবে সম্ভবত না। আমি আসলে মনে ZŒ!ŒD§ṀḢকরার আগে Æṭএটি একটি জিনিস ছিল পরামর্শ দেওয়া ।
ডেনিস

8

জে , 28 বাইট

>./@({.+1$:@|:\.|:@}.)@[^:]#

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

 >./ @  (   {.   +         1 $:@|:\. |:@}.       )       @[^:] #
(max of (1st row + recursive call on each "minor")) or count of arg if 0

এখানে পুনরাবৃত্তির কলটি করা হয় $:যা এতে থাকা বৃহত্তম বেনাম ফাংশনকে উপস্থাপন করে। আমরা জেতে আদিমকে ভাগ্যবান x u\. y, যা আইটেমগুলির দৈর্ঘ্যের ক্রমবর্ধমান uইনফিক্সগুলি yদমন করে প্রাপ্ত ক্রমাগত "আউটফিক্সগুলি" প্রয়োগ করে ; এখানে আমরা "নাবালিকাগুলি" পেতে ধারাবাহিক কলামগুলিকে ছাড়িয়ে যেতে চাই, তাই আমরা নীচের সারিগুলি (বা লেজ ) স্থানান্তর করি এবং তারপরে আউটপিক্সগুলি স্থানান্তর করার জন্য পুনরাবৃত্তি করি।xy|:}.y


2
হাই এবং পিপিসি তে আপনাকে স্বাগতম! আপনার সমাধানের জন্য আমি এটি ব্যবহার করে অনলাইনে লিঙ্ক যুক্ত করেছি , যাতে অন্যরা এটি যাচাই করতে পারে।
গ্যালেন ইভানভ

7

পাইথন 3 , 94 90 89 84 80 বাইট

-4 বাইট ধন্যবাদ xnor (তালিকার পরিবর্তে সেট ব্যবহার করে)!

f=lambda x,y={-1}:x>[]and max(e+f(x[1:],y|{i})for(i,e)in enumerate(x[0])if{i}-y)

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


দুর্দান্ত পদ্ধতি! আপনি করতে পারেন yসদস্যপদ চেক কমান করার জন্য একটি সেট: f=lambda x,y={-1}:x>[]and max(e+f(x[1:],y|{i})for(i,e)in enumerate(x[0])if{i}-y)
xnor

@ এক্সনর: সেই -1কৌশলটি সত্যিই চালাক :) অনেক অনেক ধন্যবাদ!
ბიმო

7

হুশ , 12 11 9 বাইট

▲mȯΣ►L∂PT

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

ধন্যবাদ BMO একটি বন্দর পরামর্শ জন্য ais523 এর উত্তর এবং একটি 2-বাইট সংরক্ষণ, যা আমি আরও উন্নত করতে পেরেছিলেন, পালাক্রমে BMO 2 আরও বেশি বাইট বন্ধ চাঁচা।


পূর্ববর্তী সমাধান (14 বাইট)

▲moΣz!¹fS=uΠmŀ

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

আমি একটি পরীক্ষা স্যুট করতে সক্ষম হইনি কারণ এই উত্তরটি প্রথম কমান্ড লাইন আর্গুমেন্ট কমান্ডটি স্পষ্টভাবে ব্যবহার করে। তবে হুস্ট মোটেও STDIN ব্যবহার করে না তাই আমি সেখানে সমস্ত পরীক্ষার কেসগুলি অন্তর্ভুক্ত করেছি, তাই এটি পরীক্ষা করার জন্য আপনি কেবল যুক্তি ক্ষেত্রের পেস্টটি অনুলিপি করতে পারেন। এছাড়াও লক্ষ করুন যে হুস্কের অ্যারেগুলিতে ইনপুট হওয়ার সময় উপাদানগুলির মধ্যে ফাঁকা স্থান থাকতে পারে না।

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

কোড ভাঙ্গা

▲moΣz!¹fS=uΠmŀ     Full program. Takes a 2D list from CLA 1 and outputs to STDOUT.
            mŀ     Length range of each list. 
           Π       Cartesian product.
       fS=u        Discard those combinations which have at least 1 non-unique element.
 mo                Map over the combinations with the following predicate:
    z!¹            Zip the 2D list input with the current combination and index accordingly.
   Σ               Sum the resulting elements.
▲                  Finally, pick the maximum.

উদাহরণ

(142561)

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

(121323213132)

তারপরে, সংযুক্তিটির প্রতিটি উপাদান সহ ইনপুট তালিকাগুলিতে প্রোগ্রাম সূচীগুলি ফিরে আসে:

(141242651516)

9


5

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

@Tsh কে ধন্যবাদ 2 টি অকেজো বাইট সনাক্ত করার জন্য যা একটি বাগ সংরক্ষিত 3 বাইট ঠিক করার জন্য ব্যবহৃত হয়েছিল
@tsh কে ধন্যবাদ

f=([a,...r],k,i=1)=>a?Math.max(...a.map(n=>k&(i+=i)?-1/0:n+f(r,k|i))):0

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


@Shaggy কিন্তু এটি রচনা করা অসম্ভব 0, ইনপুট অ্যারে থেকে -1+(-1)হয় -2এবং এটি সঠিক উত্তর।
বলেছেন মনিকা পুনরায় ইনস্টল করুন

1
f=([a,...r],k,i=1)=>a?Math.max(...a.map(c=>k&(i+=i)?-1/0:c+f(r,k|i))):0এটি অদ্ভুত, তবে Math.maxবাইটস সংরক্ষণ করে ...
tsh

4

জেলি , 13 12 বাইট

ẈŒpQƑƇị"€¹§Ṁ

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

বিকল্প সংস্করণ, 11 বাইট

ZLœ!Lị"€¹§Ṁ

এটি নতুন œ!অন্তর্নির্মিত অন্তর্নির্মিত ব্যবহার করে , যা প্রদত্ত দৈর্ঘ্যের সমস্ত ক্রম উত্পাদন করে।

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

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

ẈŒpQƑƇị"€¹§Ṁ  Main link. Argument: M (matrix)

Ẉ             Widths; compute the length of each row.
              For an n×m matrix, this yields an array m copies of n.
 Œp           Cartesian product; promote each n to [1, ..., n], then form all arrays
              that pick one k out of all m copies of [1, ..., n].
   QƑƇ        Comb by fixed unique; keep only arrays that do not change by
              deduplicating their entries.
         ¹    Identity; yield M.
      ị"€     For each of the arrays of unique elements, use its m entries to index
              into the m rows of M.
          §   Take the sums of all resulting vectors.
           Ṁ  Take the maximum.

আহ ... আমি প্রায় XLṗLপরিবর্তে এর সাথে একই উত্তর পোস্ট করেছি J€Œp
এরিক আউটগলফার

4

হাস্কেল , 65 বাইট

f(u:v)=maximum[e+f(take i<>drop(i+1)<$>v)|(i,e)<-zip[0..]u]
f _=0

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

ব্যাখ্যা এবং অবহেলিত

ফাংশন take i<>drop(i+1)একটি তালিকা নেয় এবং অবস্থানের উপাদানটি সরিয়ে দেয় i

ফাংশন fপ্রতিটি সম্ভাব্য উপাদান পায় eঅবস্থানে i, অবস্থানে উপাদান সরিয়ে ফেলা iঅবশিষ্ট উপাদান থেকে এবং যোগ eযাও recursively নির্ণিত সর্বোত্তম হবে:

f(u:v)=maximum[e+f(removeElementAt i<$>v)|(i,e)<-zip[0..]u]

এবং খালি তালিকার বেস কেসটি কেবল 0:

f _=0

2

ব্র্যাচল্যাগ , 18 বাইট

{hl⟦kp;?z₀∋₍ᵐ+}ᶠot

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

ব্যাখ্যা

                ot      The output is the biggest result of…
{             }ᶠ        …finding all outputs to the following predicate:
 hl⟦k                     Construct the range [0, …, n-1]
     p                    Take a permutation of that range
      ;?z₀                Zip that permutation with the Input, stopping when all elements of
                            the input are used (important because the range is possibly
                            bigger than the length of the input)
          ∋₍ᵐ             In each element of the zip, take the head'th element of the tail
             +            Sum the result

2

পার্ল 6 , 50 49 বাইট

{max map *.map({.[$++]}).sum,permutations [Z] $_}

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

দীর্ঘ permutationsকল করা সত্ত্বেও, শালীনভাবে সংক্ষিপ্ত । এটি একটি বেনামে কোড ব্লক যা তালিকার একটি তালিকা নেয় এবং একটি নম্বর দেয়।

ব্যাখ্যা:

{                                               } # Anonymous code block
 max                                              # Finds the maximum
                             permutations         # Of all permutations
                                          [Z] $_  # Of the transposed input
     map                                          # When mapped to
                        .sum # The sum of
         *.map({.[$++]})     # The diagonal of the matrix

2

কে (ওকে) , 40, 32, 28, 19 বাইট

-13 বাইট ধন্যবাদ এনএনজি!

{|/+/(prm'x)@''!#x}

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

প্রাথমিক সমাধান:

{|/+/'x./:/:(*t),'/:t:{x~?x}#+!(#x)##*x}

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

দ্রষ্টব্য: প্রথম পরীক্ষার মামলায় কাজ করে না [[1]]

ব্যাখ্যা:

{ } - যুক্তি দিয়ে ফাংশন x

                                   #     - creata a list
                               (#x)      - with length number of rows of x
                                    #*x  - of the length of the first row
                              !          - odometer (ranged permutations)
                             +           - transpose
                            #            - filter out the rows
                      {x~?x}             - that have duplicates
                    t:                   - save it to t 
                ,'/:                     - pair up each number in each row with
            (*t)                         - a number from the first row
      x./:/:                             - index x with each of the above
   +/'                                   - find the sum of each row
 |/                                      - reduce by max

1
ইঙ্গিত: prmএর অনুমতিগুলি তৈরি করতে সরাসরি তালিকায় প্রয়োগ করা যেতে পারে
ngn

@ ধন্যবাদ! আমি এর সাথে মূল তির্যকটি ব্যবহার করতে চেয়েছিলাম =, তবে ফলাফলটি আরও দীর্ঘ ছিল। আছে কি flattenঠিক আছে কি?
গ্যালেন ইভানভ

flattenকি অর্থে?
ngn

@ জিএনএন(1 2 3; 4 5 6; 7 8 9) -> (1 2 3 4 5 6 7 8 9)
গ্যালেন ইভানভ

1
এটি ঠিক ,/বা আপনি যদি এটি আরও গভীর কাঠামোর মধ্যে যেতে চান:,//
ngn

2

হাস্কেল , 65 বাইট

([]%)
p%(h:t)=maximum[x+(i:p)%t|(i,x)<-zip[0..]h,all(/=i)p]
p%_=0

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


71 বাইট

f m=maximum[sum b|(a,b)<-unzip<$>mapM(zip[0..])m,[x|x<-a,y<-a,x==y]==a]

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

[x|x<-a,y<-a,x==y]==aচেক যে উপাদান aস্বতন্ত্র হয়। এটি একটি অবাক করা সংখ্যক অক্ষর ব্যবহার করে, তবে আমি আরও ছোট উপায় দেখিনি।


1

পাইথ, 15 12 বাইট

eSms@VQd.plh

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

eSms@VQd.plhQ   Implicit: Q=eval(input())
                Trailing Q inferred
          lhQ   Length of first element of Q
        .p      Generate all permutaions of 0 to the above
  m             Map the elements of the above, as d, using:
    @VQd          Vectorised index into Q using d
                    For i in [0-length(Q)), yield Q[i][d[i]]
   s              Take the sum of the above
 S              Sort the result of the map
e               Take the last element of the above, implicit print

সম্পাদনা: ইস্যাকের সৌজন্যে 3 বাইট সংরক্ষণ করা হয়েছে


1
.PUlhQlদ্বারা প্রতিস্থাপন করা যেতে পারে .plhVস্পষ্টত কোনও অতিরিক্ত এন্ট্রি উপেক্ষা করে।
isaacg

1

05 এ বি 1 ই , 18 13 বাইট

нgLœε‚øε`è]OZ

আমি অনুভূতি আছে এটা মাত্রাতিরিক্ত দীর্ঘ, কিন্তু আমি নিশ্চিত 05AB1E মধ্যে ভেক্টরকৃত ইন্ডেক্স বাইট-দক্ষতার করতে কিভাবে নই .. আর আমি প্রকৃতপক্ষে ছিল ডান যে এটি ছিল অত্যন্ত দীর্ঘ .. -5 ধন্যবাদ বাইট @Emigna

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

ব্যাখ্যা:

н                # Take the first inner list (of the implicit input list of lists)
 g               # Pop and take its length
  L              # Create a list in the range [1, inner-length]
   œ             # Create each possible permutation of this range-list
    ε            # Map each permutation to:
                #  Pair it with the (implicit) input
      ø          #  Transpose; swap rows/columns
       ε         #  Map each to:
        `        #   Push both to the stack
         è       #   Index the permutation-nr into the inner list of the input
    ]            # Close both maps
     O           # Take the sum of each inner list
      à          # Pop and push the maximum (and output implicitly)

উদাহরণ রান:

  • ইনপুট: [[1,4,2],[5,6,1]]
  • পদক্ষেপ 1 ( нgL) পরে :[1,2,3]
  • পদক্ষেপ 2 ( œ) পরে :[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
  • পদক্ষেপ 3 ( ε‚) পরে :[[[[1,4,2],[5,6,1]],[1,2,3]],[[[1,4,2],[5,6,1]],[1,3,2]],[[[1,4,2],[5,6,1]],[2,1,3]],[[[1,4,2],[5,6,1]],[2,3,1]],[[[1,4,2],[5,6,1]],[3,1,2]],[[[1,4,2],[5,6,1]],[3,2,1]]]
  • পদক্ষেপ 4 ( ø) পরে :[[[[1,4,2],1],[[5,6,1],2]],[[[1,4,2],1],[[5,6,1],3]],[[[1,4,2],2],[[5,6,1],1]],[[[1,4,2],2],[[5,6,1],3]],[[[1,4,2],3],[[5,6,1],1]],[[[1,4,2],3],[[5,6,1],2]]]
  • পদক্ষেপ 5 ( ε`è]) এর পরে : [[4,1],[4,5],[2,6],[2,5],[1,6],[1,1]](দ্রষ্টব্য: 05AB1E 0-সূচকযুক্ত (স্বয়ংক্রিয় র‌্যাপারপাউন্ড সহ), ফলে ফলাফলগুলিতে সূচিকর্ম 3করা ))[5,6,1]5
  • পদক্ষেপ After ( O) পরে :[5,9,8,7,7,2]
  • আউটপুট / পদক্ষেপ 7 পরে ( à):9

1
আমার 13нgLœε‚øε বছরের জন্য `] ওজেড ছিল ।
Emigna

@ এমিগনা ধন্যবাদ! এটি আমি যা দেখলাম তার সাথে আশ্চর্যের সাথে একই রকম, আমি বাদ দিয়েছি এমন একটি গুচ্ছ সংযোজন যা অপ্রয়োজনীয় ছিল। ; পি
কেভিন ক্রুইজসেন



0

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

øœ€Å\Oà

@ আইস ৫২৩ এর জেলি সিডাব্লু উত্তরটির বন্দর, সুতরাং এটিও আপগ্রেটেড নিশ্চিত করুন!

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

ব্যাখ্যা:

ø          # Transpose the (implicit) input; swapping row/columns
 œ         # Get all permutations
  ہ\      # Take the main diagonal of each
     O     # Sum each
      à    # Pop and push the maximum (which is output implicitly)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.