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


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.