বিজ্ঞপ্তি লিমিটেড সমষ্টি


10

চ্যালেঞ্জ

আসুন N0 এবং সমেতের মধ্যে পূর্ণসংখ্যার একাধিক ধারণা কল্পনা করা যাক Mএবং এটিকে কল করি F

মোট (M + 1) ** Nসম্ভব আছে F

এই জাতীয় কতগুলি Fনীচের সমস্ত বৈষম্য পূরণ করে (সূচকটি একটি ভিত্তিক)?

  • F[n] + F[n+1] <= M জন্য 1 <= n < N
  • F[N] + F[1] <= M

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা দুটি ধনাত্মক পূর্ণসংখ্যার গ্রহণ করে N এবং Mউত্তরটি কোনও সুবিধাজনক আকারে আউটপুট করে।

পরীক্ষার কেস

(N,M) => Answer

(1,1) => 1
(2,1) => 3
(3,1) => 4
(4,1) => 7

(1,2) => 2
(2,2) => 6
(3,2) => 11
(4,2) => 26

(10,3) => 39175
(10,4) => 286555
(10,5) => 1508401

(25,3) => 303734663372
(25,4) => 43953707972058
(25,5) => 2794276977562073

(100,3) => 8510938110502117856062697655362747468175263710
(100,4) => 3732347514675901732382391725971022481763004479674972370
(100,5) => 60964611448369808046336702581873778457326750953325742021695001

ব্যাখ্যা

M (max value of element) = 1

F[1] + F[1] <= 1; F = [0]
(1,1) => 1

F[1] + F[2] <= 1; F = [0,0], [0,1], [1,0]
(2,1) => 3

F = [0,0,0], [0,0,1], [0,1,0], [1,0,0]
(3,1) => 4

F = [0,0,0,0], [0,0,0,1], [0,0,1,0], [0,1,0,0], [0,1,0,1], [1,0,0,0], [1,0,1,0]
(4,1) => 7

---

M = 2

F[1] + F[1] <= 2; F = [0], [1]
(1,2) => 2

F = [0,0], [0,1], [0,2], [1,0], [1,1], [2,0]
(2,2) => 6

F = [0,0,0], [0,0,1], [0,0,2], [0,1,0], [0,1,1], [0,2,0], [1,0,0], [1,0,1],
[1,1,0], [1,1,1], [2,0,0]
(3,2) => 11

(4,2) => 26 (left as exercise for you)

বিধি

  • এটি একটি চ্যালেঞ্জ। আপনার কোডের সময় জটিলতাটি বহুপদী হতে হবে MএবংN (যেমন আপনি সমস্ত (M + 1) ** Nটিপলস তৈরি করতে পারবেন না এবং তারপরে শর্তটি পরীক্ষা করতে পারবেন না )। আপনার জমা দেওয়ার ক্ষেত্রে আপনার পদ্ধতির ব্যাখ্যা করুন।
  • স্ট্যান্ডার্ড বিধি প্রযোজ্য। বাইটস মধ্যে সংক্ষিপ্ত উত্তর।

উত্তর:


7

পাইথন সঙ্গে numpy , 59 বাইট

lambda M,N:trace(mat(tri(M+1)[::-1])**N)
from numpy import*

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

পাথ গণনা করতে ম্যাট্রিক্সের গুণটি ব্যবহার করে। যদি ফ্লোট স্পষ্টতা কোনও সমস্যা হয় তবে matএটি নির্দিষ্ট করতে পারে mat(...,int)


ব্যবহার mat(...,int)করে n=100কেসগুলি কার্যকর হবে বলে মনে হয় না । পদ্ধতিটি সঠিক (উদাহরণস্বরূপ বৈশিষ্ট্যযুক্ত বহুবর্ষের শিকড়গুলির শক্তিগুলির যোগফলের জন্য সিম্পি ব্যবহার করে) কাজ করে, তবে সংখ্যাটি বৃদ্ধি **পাওয়ার সাথে সাথে নমপি কোথাও ভুল হয়ে যায় (সম্ভবত এটি পাওয়ার অপারেটর?)
জোনাথন অ্যালান

4

পাইথ , 27 বাইট

.N?Ys:RTtYh-QNgQ+NTs:Rdtszh

প্রদর্শন

বিন্যাসে ইনপুট আশা করে:

M
N

এটি এখন পর্যন্ত সেট করা মানগুলির বাম প্রান্ত, ডান প্রান্ত এবং ফাঁকের বর্তমান আকারের উপরে ক্লাসিক গতিশীল প্রোগ্রামিং।

সিউডোকোড / পাইথনে এটি কীভাবে কাজ করে:

.N          | define memoized fill(left, right, gap):
?           | if cap > 0 then
s:RTtY      | sum(fill(i, right, gap - 1)
h-QN        |     for i in range(M - left + 1))
gQ+NT       | else M >= left + right
            | output:
s:Rdtsz     | sum(fill(i, i, N - 1)
h           |     for i in range(M + 1))

Qজন্য ব্যবহার করা হয় M, zজন্য ব্যবহার করা হয় N, :হয় fill, Nহয় left, Tহয় right, Yহয় gap


4

এমএটিএল , 13 12 বাইট

Q:&>~PiY^Xds

এটি অনলাইন চেষ্টা করুন! এটি এক্সনোর পাইথন উত্তর এবং আমার প্রথম এমএটিএল উত্তরের সরাসরি অনুবাদ , সুতরাং এটি সম্ভবত সর্বোত্তম নয়। উদাহরণস্বরূপ, এর চেয়ে উপরের বাম ত্রিভুজাকার ম্যাট্রিক্স পাওয়ার জন্য আরও একটি ছোট উপায় রয়েছে t&lYRPসম্পাদনা করুন: এবং এটি দেখা যাচ্ছে যে আছে :&>~P। -1 বাইটের জন্য লুইস মেন্ডোকে ধন্যবাদ!

               M is the first input and N the second
Q:             increment M and generate range from 1 to M+1
  &>           compare vector element wise with itself with greater-than function
               results in a upper-right triangular matrix
    ~          inverse to get lower-left triangular matrix
     P         flip rows to get upper-left triangular matrix
      i        input N
       Y^      take the matrix to the power of N
         Xds   compute the sum of the main diagonal

@ লুইস মেন্ডো ধন্যবাদ! যদিও এটি কেবলমাত্র একটি বাইট বা অন্য কিছু রয়েছে যা বাদ পড়তে পারে?
লাইকোনি

1
না, এটাই, আমি গণনা করতে পারি না :
লুইস মেন্ডো 10:58

2

স্ট্যাক্স , 17 বাইট

°(√&╒íƽ╨⌂'├╖▼1_Z

এটি চালান এবং এটি ডিবাগ করুন

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এটির মতো দেখাচ্ছে।

^1](    [1, 0, ... 0] with M zeroes
:)      get all rotations of the array
{       begin block
  {:+rm map each array to reverse(prefixSums(arr))
},v*    execute preceding block N-1 times
F       for each array, execute the rest of the program
  iT    remove the last i elements from the array, where i is the iteration index
  F+    add the remaining elements to the running total
        implicitly print output

এটি চালান


2

আর , 72 বাইট

function(M,N)sum(diag(Reduce(`%*%`,rep(list(outer(0:M,0:M,"+")<=M),N))))

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

বন্দরগুলি এক্সনরের পদ্ধতির।

বৃহত্তর পরীক্ষার ক্ষেত্রে ব্যর্থ হওয়ায় কেবলমাত্র 32-বিট পূর্ণসংখ্যার সমর্থন রয়েছে (তারা doubleসর্বাধিক int মানটি পৌঁছে গেলে এটি কাস্ট হয়ে যায়), সুতরাং gmpঅন্য কোনও স্বেচ্ছাচারিত নির্ভুলতা পাটিগণিতের প্রয়োজন হবে।

আশ্চর্যের বিষয় হল, আর এর মতো একটি ম্যাট্রিক্স পাওয়ার অপারেটর নেই ^always


আসলে, %^%প্যাকেজে একটি সঠিকভাবে প্রয়োগ করা অপারেটর রয়েছে expmযা -5 বাইটের জন্য অনুমতি দেয় তবে দুর্ভাগ্যক্রমে, এটি টিআইওতে পাওয়া যায় না (আমাকে স্থানীয়ভাবে পরীক্ষা করতে হয়েছিল)।
কিরিল এল।

@KirillL। হ্যাঁ, আমি এটি বিবেচনা করেছিলাম তবে আমি মনে করি আমি আমার বেস আর প্রতিক্রিয়াটি ধরে রাখব। পুরো প্যাকেজটি লোড না করে আপনি এটি 60 বাইটে গল্ফ করতে পারেন:function(M,N)sum(diag(expm::`%^%`(outer(0:M,0:M,"+")<=M,N)))
জিউস্পে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.