উপযুক্ত অঙ্কের সাথে ম্যাট্রিকের সংখ্যা গণনা করুন


12

স্টেনরোড বীজগণিতের জন্য মিলনোর ভিত্তিতে মনোমিয়ালগুলি গুন করার সময় অ্যালগরিদমের কিছু অংশে কিছু "অনুমোদিত ম্যাট্রিক্স" গণনা করা হয়।

আর 1 , ..., r মি এবং এস 1 , ..., এস এন , ননেজেটিভ পূর্ণসংখ্যা এক্স এর একটি ম্যাট্রিক্সের দুটি তালিকা দেওয়া হয়েছে

একটি ম্যাট্রিক্স

অনুমোদিত যদি হয়

  1. Jth কলামের যোগফল s j এর চেয়ে কম বা সমান :

    কলামের সীমাবদ্ধতার যোগফল

  2. Ith সারি 2 ক্ষমতা দ্বারা পরিমেয় এর সমষ্টি কম বা সমান দ আমি :

    সারি সীমাবদ্ধতার যোগফল

কার্য

এমন একটি প্রোগ্রাম লিখুন যা তালিকার একজোড়া তালিকাভুক্ত r 1 , ..., r m এবং s 1 , s 1 , ..., s n এবং এই তালিকাগুলির জন্য অনুমোদিত ম্যাট্রিকের সংখ্যা গণনা করে। আপনার প্রোগ্রামটি প্রয়োজনমতো m এবং n কে অতিরিক্ত যুক্তি হিসাবে গ্রহণ করতে পারে।

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

  • আউটপুটটি ইতিবাচক পূর্ণসংখ্যার হওয়া উচিত

  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।

স্কোরিং

এটি কোড গল্ফ: বাইট জেতে সংক্ষিপ্ততম সমাধান।

উদাহরণ:

জন্য [2]এবং [1], দুই মঞ্জুরিযোগ্য ম্যাট্রিক্স আছেন:

উদাহরণ 1

এর জন্য [4]এবং [1,1]সেখানে তিনটি অনুমোদিত ম্যাট্রিক রয়েছে:

উদাহরণ 2

এর জন্য [2,4]এবং [1,1]এখানে পাঁচটি অনুমোদিত ম্যাট্রিক রয়েছে:

উদাহরণ 3

পরীক্ষার কেস:

   Input: [1], [2]
   Output: 1

   Input: [2], [1]
   Output: 2

   Input: [4], [1,1]
   Output: 3

   Input: [2,4], [1,1]   
   Output: 5      

   Input: [3,5,7], [1,2]
   Output: 14

   Input: [7, 10], [1, 1, 1]
   Output: 15       

   Input: [3, 6, 16, 33], [0, 1, 1, 1, 1]
   Output: 38      

   Input: [7, 8], [3, 3, 1]
   Output: 44

   Input: [2, 6, 15, 18], [1, 1, 1, 1, 1]
   Output: 90       

   Input: [2, 6, 7, 16], [1, 3, 2]
   Output: 128

   Input: [2, 7, 16], [3, 3, 1, 1]
   Output: 175

1
আইএমও সংজ্ঞাটি বোঝা সহজ হবে যদি আপনি ম্যাট্রিকের প্রথম সারি এবং কলামটি 1 থেকে সূচকে হারিয়ে ফেলেন এবং == এর পরিবর্তে <= ব্যবহার করেন।
— পিটার টেলর

ঠিক আছে, করবে। আমি গণিতের পাঠ্যপুস্তকের বাইরে সংজ্ঞাটি অনুলিপি করেছিলাম এবং সেই প্রবেশগুলিতে এটির প্রকৃত ব্যবহার ছিল।
— হুড

উত্তর:


3

জাভাস্ক্রিপ্ট (ES7), 163 বাইট

f=([R,...x],s)=>1/R?[...Array(R**s.length)].reduce((k,_,n)=>(a=s.map((_,i)=>n/R**i%R|0)).some(c=>(p+=c<<++j)>R,p=j=0)?k:k+f(x,s.map((v,i)=>v-a[i])),0):!/-/.test(s)

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

এনবি : আমি এই স্নিপেট থেকে সবচেয়ে বেশি সময় ব্যয়কারী দুটি পরীক্ষার কেস সরিয়েছি, তবে তাদেরও পাশ করা উচিত।

মন্তব্য

f = (                               // f = recursive function taking:
  [R,                               //   - the input array r[] splitted into:
      ...x],                        //     R = next element / x = remaining elements
  s                                 //   - the input array s[]
) =>                                //
  1 / R ?                           // if R is defined:
    [...Array(R**s.length)]         //   for each n in [0, ..., R**s.length - 1],
    .reduce((k, _, n) =>            //   using k as an accumulator:
      (a =                          //     build the next combination a[] of
        s.map((_, i) =>             //     N elements in [0, ..., R - 1]
          n / R**i % R | 0          //     where N is the length of s[]
        )                           //
      ).some(c =>                   //     for each element c in a[]:
        (p += c << ++j)             //       increment j; add c * (2**j) to p
        > R,                        //       exit with a truthy value if p > R
        p = j = 0                   //       start with p = j = 0
      ) ?                           //     end of some(); if truthy:
        k                           //       just return k unchanged
      :                             //     else:
        k +                         //       add to k the result of
        f(                          //       a recursive call to f() with:
          x,                        //         the remaining elements of r[]
          s.map((v, i) => v - a[i]) //         s[] updated by subtracting the values of a[]
        ),                          //       end of recursive call
      0                             //     initial value of the accumulator k
    )                               //   end of reduce()
  :                                 // else:
    !/-/.test(s)                    //   return true if there's no negative value in s[]

1

জেলি , 26 বাইট

UḄ€Ḥ>⁴
0rŒpṗ⁴L¤µS>³;ÇẸµÐḟL

এস , আর গ্রহণের একটি সম্পূর্ণ প্রোগ্রাম যা গণনা প্রিন্ট করে

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

কিভাবে?

UḄ€Ḥ>⁴ - Link 1, row-wise comparisons: list of lists, M
U      - upend (reverse each)
 Ḅ€    - convert €ach from binary (note bit-domain is unrestricted, e.g. [3,4,5] -> 12+8+5)
   Ḥ   - double (vectorises) (equivalent to the required pre-bit-shift by one)
     ⁴ - program's 2nd input, R
    >  - greater than? (vectorises)

0rŒpṗ⁴L¤µS>³;ÇẸµÐḟL - Main link: list S, list R
0r                  - inclusive range from 0 to s for s in S
  Œp                - Cartesian product of those lists
       ¤            - nilad followed by link(s) as a nilad:
     ⁴              -   program's 2nd input, R
      L             -   length
    ṗ               - Cartesian power = all M with len(R) rows & column values in [0,s]
        µ      µÐḟ  - filter discard if:
         S          -   sum (vectorises) = column sums
           ³        -   program's 1st input, S
          >         -   greater than? (vectorises) = column sum > s for s in S
             Ç      -   call the last link (1) as a monad = sum(2^j × row) > r for r in R
            ;       -   concatenate
              Ẹ     -   any truthy?
                  L - length

1

ওল্ফ্রাম ভাষা (ম্যাথমেটিকা) , 101 বাইট

ম্যাথামেটিকাকে এটি পূর্ণসংখ্যার তুলনায় অসমতার ব্যবস্থা হিসাবে সমাধান করুন। আমি একটি প্রতীকী অ্যারে সেট আপ করেছি fএবং অসম্পূর্ণতার তিনটি সেটকে থ্রেড করেছি। Join@@শুধু জন্য তালিকা সমতল Solve।

Length@Solve[Join@@Thread/@{Tr/@(t=f~Array~{q=(l=Length)@#2,l@#})<=#2,2^Range@q.t<=#,t>=0},Integers]&

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


0

গণিতের 139 বাইট

Tr@Boole[k=Length[a=#]+1;AllTrue[a-Rest[##+0],#>=0&]&@@@Tuples[BinCounts[#,{2r~Prepend~0}]&/@IntegerPartitions[#,All,r=2^Range@k/2]&/@#2]]&

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

ব্যাখ্যা: পার্টিশন প্রতিটি দ আমি 2 ক্ষমতা মধ্যে এবং তারপর প্রতিটি পূর্ণসংখ্যা জন্য দুটি শক্তি মধ্যে এক পচানি সঙ্গে সব tuples করে তোলে, তালিকা থেকে কলাম মোট বিয়োগ এর গুলি আমি । বাকী সমস্ত এন্ট্রি ইতিবাচক হয় এমন টিউপলের সংখ্যা গণনা করুন।


2
সাধারণত অন্যরা ইতিমধ্যে সেই ভাষাতে জমা না দেওয়া পর্যন্ত আপনার নিজের চ্যালেঞ্জের জবাব দিতে নিরুৎসাহিত করা হয়।
— হাইপারনিউটারিনো

@ হাইপারনিট্রিনো আপনি যদি মনে করেন যে এটি একটি ভাল ধারণা I এটি অতি সাবধানে গল্ফ হয় না, তাই সম্ভবত অন্যরা আরও ভাল করতে পারে।
— হুড

3
এটি দ্রবণযোগ্য প্রমাণ করতে সক্ষম হওয়া কোনও খারাপ জিনিস না হলেও আমি এত তাড়াতাড়ি সমাধানটি নষ্ট করার প্রস্তাব দিচ্ছি না। আগে একসপ্তাহ বা কিছু অপেক্ষা করুন।
— এরিক আউটগল্ফার

তাহলে আমি কি এটি মুছে ফেলব বা এখনই এটি পোস্ট করা উচিত?
— হুড

আমি এটা ছেড়ে যেতে হবে। পেস এরিক আমি মনে করি না যে এটি কোনও কিছু ক্ষতিগ্রস্থ করেছে: সমাধানের অস্তিত্ব এই বিষয়টি থেকে স্পষ্ট যে কলামের সীমাবদ্ধতার প্রতি সম্মান দেখানো ম্যাট্রিকগুলি সীমাবদ্ধ এবং সহজেই উত্পন্ন হয়।
— পিটার টেলর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.