পছন্দসই যোগফল পেতে ম্যাট্রিক্স কেটে ফেলুন


21

সংজ্ঞা

একটি ম্যাট্রিক্স দেওয়া M অ নেতিবাচক পূর্ণসংখ্যার একটি অ-নেতিবাচক পূর্ণসংখ্যা এর k , আমরা সংজ্ঞায়িত Fk "চপ বন্ধ" ফাংশন যা সব সারি এবং সব কলাম সরিয়ে ফেলা হবে যেমন M যেগুলিতে k

উদাহরণ:

M=(615128985604)F5(M)=(1260)

তোমার কাজ

প্রদত্ত এবং একটি টার্গেট সমষ্টি , আপনার টাস্ক সব সম্ভাব্য মান খুঁজে পেতে যেমন যে অবশিষ্ট উপাদানের সমষ্টি সমান ।এস কে এফ কে ( এম ) এসMSkFk(M)S

উদাহরণ:

উপরের ম্যাট্রিক্স এবং :এস = 9MS=9

  • k=5 একটি সমাধান, কারণ এবং 1 + 2 + 6 + 0 = 9F5(M)=(1260)1+2+6+0=9
  • k=1 হ'ল একমাত্র অন্যান্য সম্ভাব্য সমাধান: এবং 5 + 4 =F1(M)=(54)5+4=9

সুতরাং প্রত্যাশিত আউটপুট হবে ।{1,5}

ব্যাখ্যা এবং বিধি

  • ইনপুটটি কমপক্ষে একটি সমাধান স্বীকার করার গ্যারান্টিযুক্ত।
  • মূল ম্যাট্রিক্সের উপাদানের যোগফল চেয়ে বড় হওয়ার গ্যারান্টিযুক্ত ।S
  • আপনি ধরে নিতে পারেন । এর অর্থ হ'ল কোনও খালি ম্যাট্রিক্স কখনই কোনও সমাধানের দিকে নিয়ে যায় না।S>0
  • মান মুদ্রণ বা কোনো অনুক্রমে এবং কোন যুক্তিসঙ্গত, দ্ব্যর্থহীন বিন্যাসে ফেরত পাঠানো হতে পারে।k
  • আপনাকে আউটপুটটি করার অনুমতি নেই (যেমন বা উপরের উদাহরণের জন্য বৈধ উত্তর হিসাবে বিবেচিত)।[1,1,5,5][1,5,1,5]
  • এটি

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

M = [[6,1,5],[1,2,8],[9,8,5],[6,0,4]]
S = 9
Solution = {1,5}

M = [[7,2],[1,4]]
S = 7
Solution = {4}

M = [[12,5,2,3],[17,11,18,8]]
S = 43
Solution = {5}

M = [[7,12],[10,5],[0,13]]
S = 17
Solution = {0,13}

M = [[1,1,0,1],[2,0,0,2],[2,0,1,0]]
S = 1
Solution = {2}

M = [[57,8,33,84],[84,78,19,14],[43,14,81,30]]
S = 236
Solution = {19,43,57}

M = [[2,5,8],[3,5,8],[10,8,5],[10,6,7],[10,6,4]]
S = 49
Solution = {2,3,4,7}

M = [[5,4,0],[3,0,4],[8,2,2]]
S = 8
Solution = {0,2,3,4,5,8}

ইনপুট অ্যারের মূল কাঠামো ধরে রাখা (উদাহরণস্বরূপ, [[1,5],[1],[5],[]]প্রথম পরীক্ষার ক্ষেত্রে) আউটপুটটির বৈধ উপায় হতে পারে?
শেগি

@ শেগি হ্যাঁ এটা যুক্তিসঙ্গত দেখাচ্ছে।
আর্নৌল্ড

উত্তর:


10

কে (এনএনজি / কে) , 39 বাইট

{a@&y=x{+//x*(&/'b)&\:&/b:~x=y}/:a:,/x}

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

এই ব্যাখ্যার জন্য @ অ্যাডম ধন্যবাদ :

{... }ফাংশন, xহয় এম এবং yহয় এস

,/x সমতল এম (এগুলি কে প্রার্থী)

a: ধার্য a

x{… নির্দিষ্ট বাম আর্গুমেন্ট ( ) হিসাবে এম}/:  ব্যবহার করার সময় প্রত্যেকের সাথে নিম্নলিখিত ফাংশনটি প্রয়োগ করুন :x

  x=y বুলিয়ান ম্যাট্রিক্স নির্দেশ করে যেখানে এম এর উপাদানগুলি বর্তমান কে পরীক্ষার্থীর সমান

  ~ অবহেলা করা

  b: এটি বরাদ্দ করুন b

  &/ এবং হ্রাস (এটি কে ছাড়াই কলামগুলি সন্ধান করে )

  ()&\: এবং এটি নিম্নলিখিত প্রতিটি সাথে:

   &/'b এবং প্রতিটি হ্রাস (যে কে ছাড়াই সারি সন্ধান করে )

  x*এম দ্বারা এটি  গুণ

  +// গ্র্যান্ড যোগ

y= বুলিয়ানগুলির তালিকা নির্দেশ করে যেখানে এস su পরিমাণগুলির সমান

& ট্রুসের সূচকগুলি

a@ উপাদানগুলিতে সূচিতে এটি ব্যবহার করুন ( কে প্রার্থীরা)


ব্যাখ্যা সংশোধন নির্দ্বিধায়।
অ্যাডম

অনুলিপি-অনুলিপি করার বিপদ ...
এডম

6

এপিএল (ডায়ালগ ইউনিকোড) , 35 33 28 বাইট এসবিসিএস

-7 ngn ধন্যবাদ।

নামবিহীন ইনফিক্স ল্যাম্বদা। লাগে এস বাম যুক্তি এবং এম অধিকার আর্গুমেন্ট হিসাবে।

{⍵[⍸⍺=(+/∘,⍵×∧/∘.∧∧⌿)¨⍵≠⊂⍵]}

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

{} "ডিএফএন", এবং যথাক্রমে বাম এবং ডান যুক্তি ( এস এবং এম ) হয়:

⍵[… নিম্নলিখিত সমন্বয়গুলির সাথে ] সূচক এম :

  ⊂⍵এটিকে একক উপাদান হিসাবে বিবেচনা করতে এম  বন্ধ করুন

  ⍵=এম এর  প্রতিটি উপাদান (অর্থাৎ কে প্রার্থী) পুরো এম এর সাথে তুলনা করুন

  ( প্রত্যেকের জন্য নিম্নলিখিত সূক্ষ্ম ফাংশন প্রয়োগ করুন:

   ∧⌿ উল্লম্ব এবং হ্রাস (যে কে প্রার্থী ব্যতীত কলামগুলি সন্ধান করে )

∘.∧ কার্টেসিয়ান বুলিয়ান পণ্য এর সাথে:

    ∧/ অনুভূমিক এবং হ্রাস ( কে প্রার্থী ছাড়াই সারি সন্ধান করে )

   ⍵×এমটি মাস্কটি দিয়ে এম  গুণ করুন

   +/∘, সমতল ম্যাট্রিক্স যোগফল

  ⍺= বুলিয়ান নির্দেশ করে যেখানে এস ms পরিমাণগুলির সমান

   সূচকগুলি যেখানে সত্য


1
{M[⍸⍺={+/,(∧⌿d)/M⌿⍨∧/d←M≠⍵}¨M←⍵]}
এনজিএন

ধন্যবাদ আমি বৈশ্বিক ব্যবহার করব না, যদিও এটি মূল্যায়নের ক্রমকে বিভ্রান্তিকর করে তোলে: - Mযখন এটি এখনও তৈরি করা হয়নি তখন আপনি কীভাবে সূচক করতে পারেন ?
অ্যাডম

ক্ষণস্থায়ী যেমন ভেতরের dfn সমানভাবে আমাকে বিভ্রান্তিকর
ngn

{⍵[⍸⍺=+/¨(,⍵×∧/∘.∧∧⌿)¨⍵≠⊂⍵]}
এনজিএন

@ জিএন হ্যাঁ, আমি এরকম কিছু করতে চাইছিলাম। ধন্যবাদ!
অ্যাডম

6

আর , 78 73 বাইট

function(m,s)m[Map(function(y)sum(m[(w=-which(m==y,T))[,1],w[,2]]),m)==s]

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

আউটপুটটি বাছাই বা ডুপ্লিকেট করে না।

জে.ডো এবং জিউস্পে -5 বাইটের জন্য ক্রেডিট।




5

জেলি , 20 19 17 15 14 বাইট

pZnⱮFȦ€€ḋFẹƓịF

এটি একটি মোনাডিক লিঙ্ক যা এমকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং এসটিডিএন থেকে এস পড়ে ।

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

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

pZnⱮFȦ€€ḋFẹƓịF  Main link. Argument: M

 Z              Zip; transpose the rows and columns of M.
p               Take the Cartesian product of M and its transpose, yielding all pairs
                (r, c) of rows and columns of M.
    F           Flatten; yield the elements of M.
  nⱮ            Not equal map; for each element e of M, compare the elements of the
                pairs (r, c) with e.
     Ȧ€€        All each each; for each array of Booleans corresponding to an (r, c)
                pair, test if all of them are true.
         F      Flatten; yield the elements of M.
        ḋ       Take the dot product of each list of resulting Booleans and the
                elements of M.
           Ɠ    Read an integer S from STDIN.
          ẹ     Find all indices of S in the dot products.
             F  Flatten; yield the elements of M.
            ị   Retrieve the elements of the right at the indices from the left.


5

হাস্কেল , 88 86 84 77 বাইট

m!s=[k|k<-m>>=id,s==sum[x|r<-m,all(/=k)r,(i,x)<-zip[0..]r,all((/=k).(!!i))m]]

সমস্ত টেস্টকেস যাচাই করুন

ব্যাখ্যা

m ! s =                                         -- function !, taking m and s as input
    [k |                                        -- the list of all k's such that
        k <- m >>= id,                          -- * k is an entry of m
        s == sum                                -- * s equals the sum of
            [x |                                --     the list of x's such that
                r <- m,                         --     * r is a row of m
                all (/= k) r,                   --     * r does not contain k
                (i, x) <- zip [0 ..] r,         --     * i is a valid column index; also let x = r[i]
                all ((/= k) . (!! i)) m         --     * none of the rows contain k at index i
            ]
    ]

যে "ফাংশন চ" বলতে হবে?
কুইন্টেক

1
@ কুইন্টেক আসলে এটি থাকা উচিত, তবে আমি এটিকে "ফাংশন"! 2 বাইট সংরক্ষণ করতে BWO
ডেল্ফ্যাড 0

5

পাইথ ,  27 23 22 21  20 বাইট

fqvzss.DRsxLTQ-I#TQs

পরীক্ষা স্যুট!

প্রতিলিপি দেয় না।

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

fqvzss.DRsxLTQ-I#TQs     Full program.
f                  s     Flatten M and keep only those elements T which satisfy:
 qvzss.DRsxLTQ-I#TQ      The filtering function. Breakdown:
              -I#TQ      Discard the rows that contain T. More elaborate explanation:
                # Q         |-> In M, keep only those elements that are...
               I            |-> Invariant under (equal to themselves after...)
              -  T          |-> Removing T.
                         Let's call the result of this expression CR (chopped rows).
          xLTQ           Map over the rows M and retrieve all indices of T.
         s               Collect indices in 1D list (flatten). Call this I.
      .DR                For each row left in CR, remove the elements at indices in I.
    ss                   Sum all the elements of this matrix flattened.
 qvz                     And then finally check whether they equal S.


4

পার্ল 6 , 80 74 বাইট

->\m,\s{grep {s==sum m[m.$_;[[Z](m).$_]]}o{*.grep(:k,!*.grep($_))},m[*;*]}

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

ব্যাখ্যা

->\m,\s{...}  # Anonymous block taking arguments m and s
  grep {...}o{...},m[*;*]   # Filter matrix elements
                            # with combination of two functions
    *.grep(:k,!*.grep($_))  # (1) Whatever code returning matching rows
    s==sum m[               # (2) s equals sum of elements
      m.$_;                 #     in matched rows
      [                     #     (array supporting multiple iterations)
       [Z](m).$_            #     and matched columns (matched rows
                            #     of m transposed with [Z])
      ]
    ]

3

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

²˜ʒQεZ+}øεZ<~}ø_*OO¹Q

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

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

শস্য আলগোরিদিম

k=5

M=(615128985604)

k

(001000001000)

MRmax(R)R

(112000112000)

MC(max(C)1) || c  cC||~+

(113001113001)

010এম

(000110000110)(000120000600)

যার পরে ফলাফল ম্যাট্রিক্সের যোগফল গণনা করা হয়।


1
চমৎকার উত্তর! আমি জানতাম আমার নিশ্চিতভাবে গল্ফযোগ্য হবে। আমি ইতিমধ্যে এটির কাজ করতে পেরে যথেষ্ট খুশি ছিলাম, বিরক্তিকর মামলা সহ [[1,1,0,1],[2,0,0,2],[2,0,1,0]]যা আমাকে সংখ্যার জন্য চাপিয়ে দিয়েছিল 1(যা প্রতিটি কলামটি সরিয়ে দেয় ..) আমার মাথার মধ্যে সম্ভবত 20 এর নিচে এবং সম্ভাবনা ছিল। খুব খারাপ এখানে ম্যাট্রিকের জন্য সবে কোনও বিল্টইন নেই, সম্প্রতি যুক্ত হওয়া পণ্যগুলি সত্ত্বেও। হিসাবে 1|2( 1 2~05AB1E সিন্থ্যাক্সে) 3 এর ফলস্বরূপ, এটি কারণ / যখন অন্যান্য সংখ্যা জড়িত তখনকার logical ORমতো কাজগুলি (আমি মনে করি / ধরে নিই) কারণ। binary OR01
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন ওহ আপনি ঠিক বলেছেন! তারপরে, দস্তাবেজগুলিকে বিটওয়াইজ OR লিখতে হবে , লজিক্যাল ওআর নয় । আমি শীঘ্রই এটি সংশোধন করতে হবে। যাইহোক, বিটওয়াইস OR এর পাশাপাশি কাজ করা উচিত বলে আমি মনে করি। এটি +যেভাবেই হোক অনুমান করে এটি প্রতিস্থাপন করা যেতে পারে , তাই আমি আশা করি এটি নিয়ে কোনও সমস্যা হবে না :)
মিঃ এক্সকোডার

2

05 এ বি 1 ই (উত্তরাধিকার) , 27 26 বাইট

˜ʒ©¹ε®å_}¹ζʒ®å_}ζ‚ζ€€OPOIQ

ফলাফলকে বাছাই করে না বা আলাদা করে দেয় না।
কেবলমাত্র উত্তরাধিকারেই কাজ করে (এখনের জন্য), কারণ অভ্যন্তরীণ তালিকার একটি অংশ পূর্ণসংখ্যা এবং অন্যগুলি তালিকাগুলি হলে যোগফলগুলি কিছু কিছু বিজোড় কাজ করে বলে মনে হয় ..

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

ব্যাখ্যা:

˜              # Flatten the (implicit) matrix-input
               #  i.e. [[6,1,5],[1,2,8],[9,8,5],[6,0,4]] → [6,1,5,1,2,8,9,8,5,6,0,4]
 ʒ             # Filter this list by:
  ©            #  Store the current value in a register-variable
   ¹           #  Take the matrix-input
    ε   }      #  Map it to:
     ®å_       #   0 if the current number is in this row, 1 if not
               #    i.e. [[6,1,5],[1,2,8],[9,8,5],[6,0,4]] and 6 → [0,1,1,0]
   ¹           #  Take the matrix-input again
    ζ          #  Swap its rows and columns
               #   i.e. [[6,1,5],[1,2,8],[9,8,5],[6,0,4]] → [[6,1,9,6],[1,2,8,0],[5,8,5,4]]
     ʒ   }     #  Filter it by:
      ®å_      #   Only keep the inner lists that does not contain the current number
               #    i.e. [[6,1,9,6],[1,2,8,0],[5,8,5,4]] and 6 → [[1,2,8,0],[5,8,5,4]]
               #    i.e. [[1,2,2],[1,0,0],[0,0,1],[1,2,0]] and 1 → []
          ζ    #  After filtering, swap it's rows and columns back again
               #   i.e. [[1,2,8,0],[5,8,5,4]] → [[1,5],[2,8],[8,5],[0,4]]
   ‚ζ          #  Pair both lists together and zip them
               #   i.e. [0,1,1,0] and [[1,5],[2,8],[8,5],[0,4]]
               #    → [[0,[1,5]],[1,[2,8]],[1,[8,5]],[0,[0,4]]]
               #   i.e. [0,1,0] and [] → [[0,' '],[1,' '],[0,' ']]
              #  Map each inner list / value to:
      O       #   Sum each
               #    i.e. [[0,[1,5]],[1,[2,8]],[1,[8,5]],[0,[0,4]]]
               #     → [[0,6],[1,10],[1,13],[0,4]]
               #    i.e. [[0,' '],[1,' '],[0,' ']]
               #     → [[0,0],[1,0],[0,0]]
               #  (NOTE: For most test cases just `O` instead of `€€O` would be enough,
               #   but not if we removed ALL zipped inner lists for a number, like the 
               #   second example above with input [[1,1,0,1],[2,0,0,2],[2,0,1,0]] and 1)
        P      #  Now take the product of each inner list
               #   i.e. [[0,6],[1,10],[1,13],[0,4]] → [0,10,13,0]
         O     #  Then take the sum of those
               #   i.e. [0,10,13,0] → 23
          IQ   #  And only keep those that are equal to the number-input
               #   i.e. 23 and 9 → 0 (falsey), so it's removed from the flattened input


1

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

FθFι⊞υκIΦυ⁼ηΣEθ∧¬№λιΣEλ∧¬№Eθ§πξιν

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

FθFι⊞υκ

qপূর্বনির্ধারিত তালিকায় প্রথম ইনপুট অ্যারে সমতল করুন u

  υ                          Flattened array
 Φ                           Filter elements
       θ                     Input array
      E                      Map over rows
            ι                Current element
           λ                 Current row
          №                  Count matching elements
         ¬                   Logical Not
        ∧                    Logical And
               λ             Current row
              E              Map over columns
                    θ        Input array
                   E         Map over rows
                      π      Inner row
                       ξ     Column index
                     §       Inner element
                        ι    Current element
                  №          Count matching elements
                 ¬           Logical Not
                ∧            Logical And
                         ν   Current element
             Σ               Sum
     Σ                       Sum
    η                        Second input
   ⁼                         Equals
I                            Cast to string
                             Implicitly print each result on its own line

তালিকার প্রতিটি উপাদানের জন্য অ্যারের যোগফল যোগ করুন, তবে যদি সারিটিতে উপাদান থাকে তবে 0তার যোগফলের পরিবর্তে ব্যবহার করুন এবং যখন উপাদানটিতে নেই এমন সারিগুলি যোগ করার সময়, কলামটিতে উপাদান থাকে তবে 0কলামের মানের পরিবর্তে ব্যবহার করুন । চারকোল খালি তালিকার সমষ্টি করতে না পারায় উপাদানগুলি ফিল্টার করার চেয়ে এটি খুব সামান্য গল্ফিয়ার।


1

পরিষ্কার , 92 বাইট

import StdEnv
$m s=[c\\r<-m,c<-r|sum[b\\a<-m|all((<>)c)a,b<-a&x<-[0..]|all(\u=u!!x<>c)m]==s]

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

ব্যাখ্যা:

$ m s                       // the function $ of `m` and `s`
 = [                        // is equal to
  c                         // the value `c`
  \\ r <- m                 // for every row `r` in `m`
  , c <- r                  // for every value `c` in `r`
  | sum [                   // where the sum of
   b                        // the value `b`
   \\ a <- m                // for every row `a` in `m`
   | all ((<>)c) a          // where `c` isn't in `a`
   , b <- a                 // for every value `b` in `a`
   & x <- [0..]             // with every column index `x` from zero
   | all (\u = u!!x <> c) m // where `c` isn't in column `x`
  ] == s                    // equals `s`
 ]

1

ম্যাটল্যাব - 80 বাইট

( সংশোধন এবং ) সন্নিবিষ্ট:

function f(M,s);for k=M(:)';if sum(sum(M(~sum(M==k,2),~sum(M==k))))==s;k,end;end

এবং একটি সম্পূর্ণ বিকাশযুক্ত সংস্করণে:

function getthesum(M,s)

for k=M(:)'                         % For each element of M
    x = M==k ;                      % Index elements equal to "k"
    N = M( ~sum(x,2) , ~sum(x) ) ;  % New matrix with only the appropriate rows/columns
    if sum(sum(N))==s               % sum rows and columns and compare to "s"
        k                           % display "k" in console if "k" is valid
    end
end

আমার প্রাথমিক ভুলটি তুলে ধরতে মন্তব্যে ধন্যবাদ। মনে রাখবেন যে এই সংস্করণটি আউটপুটটিকে ডি-সদৃশ করে না।

আরও 5 টি বাইট দিয়ে আউটপুট নকল করা সম্ভব:

% This will only cycle through the unique elements of 'M' (85 bytes):

function f(M,s);for k=unique(M)';if sum(sum(M(~sum(M==k,2),~sum(M==k))))==s;k,end;end

1
k ম্যাট্রিক্সের কোনও উপাদান হতে পারে।
ডেনিস

@ ডেনিস, উফ! ঠিক আছে ... আমার খারাপ, আমি আজ এটি পরে সংশোধন করব। এটা ইশারা জন্য ধন্যবাদ।
Hoki

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