একটি তির্যক গ্রিডে আয়তক্ষেত্রগুলি গণনা করুন


21

এই চ্যালেঞ্জটির অনুসরণ হিসাবে , আমরা এখন আর সারি এবং সি কলাম সহ গ্রিডে আয়তক্ষেত্রগুলির সংখ্যা গণনা করতে চাই যেখানে গ্রিডের প্রতিটি বর্গক্ষেত্রের প্রতিটি তির্যকটি দিয়ে একটি লাইন ক্রস করে। এখন, আমরা এখনও আগের মতো একই আয়তক্ষেত্রগুলি গণনা করছি, তবে এবার আমাদের 45 ডিগ্রি দ্বারা কাত হওয়া আয়তক্ষেত্রগুলিও অবশ্যই অন্তর্ভুক্ত করতে হবে।

আপনার লক্ষ্য একটি ফাংশন বা প্রোগ্রাম তৈরি করতে সারি নম্বর দেওয়া হয় r এবং কলাম মাত্রা (সঙ্গে একটি তির্যক গ্রিড আয়তক্ষেত্র সংখ্যা আউটপুট , )।

একটি প্রদর্শন হিসাবে, এটি একটি অ্যানিমেশন যা একটি (2 x 3) তির্যক গ্রিড দ্বারা গঠিত সমস্ত 37 আয়তক্ষেত্রগুলির মধ্য দিয়ে পুনরাবৃত্তি করে।

উদাহরণ

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

Each case is [rows, columns] = # of rectangles
[0, 0] = 0
[0, 1] = 0
[1, 0] = 0
[1, 1] = 1
[3, 2] = 37
[2, 3] = 37
[6, 8] = 2183
[7, 11] = 5257
[18, 12] = 40932
[42, 42] = 2889558
[51, 72] = 11708274

বিধি

  • এটি তাই সংক্ষিপ্ততম কোডটি জয়ী।
  • বিল্টিনগুলি যা এটি সমাধান করে তা অনুমোদিত নয়।

7
শুধুমাত্র গণিতের এই এক্সডি
কনর


5
সংশ্লিষ্ট চ্যালেঞ্জ দেখুন projecteuler.net/problem=147
মার্কাস অ্যাণ্ড্রুজ

1
আমি মনে করি বিল্ট-ইনগুলি অনুমতি দেওয়া উচিত। আমি এই উত্তরগুলি দেখতে পছন্দ করি।
mbomb007

উত্তর:


8

রুবি, 58 বাইট

এটি হেলিয়াম নিউক্লির সি উত্তর প্রকাশের ক্ষেত্রে অ্যালগরিদমের একটি সরল বাস্তবায়ন ।

g=->m,n{n>m ?g[n,m]:m*~m*n*~n/4+n*((2*m-n)*(4*n*n-1)-3)/6}

সীমিত সাফল্যের সাথে কেন এই সূত্রটি কাজ করে তা আমি তদন্ত করে যাচ্ছি। খাঁটি আয়তক্ষেত্রের সংখ্যা সমান (m+1)*m/2 * (n+1)*n/2, এটি তির্যক আয়তক্ষেত্রের সংখ্যাটি আরও কিছুটা অধরা অধিক এটি নিশ্চিত করা সহজ ।

নীল নিশ্চিত করেছে m==nযে কোনও n*nবর্গক্ষেত্রে কাতরা আয়তক্ষেত্রগুলির সংখ্যা (4*n**4-n*n-3*n)/6এবং যখন m>n আপনাকে একটি অতিরিক্ত যুক্ত করতে হবে (m-n)(n*(4*n*n-1)/3)( OEIS A000447 সম্পর্কিত ) তবে এটি এই দুটি সূত্রটি কোথা থেকে এসেছে তা ব্যাখ্যা করে না। আমি উত্তরের একটি অংশ খুঁজে পেয়েছি।

কারণ m==n, গ্রিডের অভ্যন্তরের আকারটি একটি অ্যাজটেক হীরা

ওল্ফ্রাম আলফা থেকে অ্যাজটেক ডায়মন্ড চিত্র

একটি অ্যাজটেক হীরা মধ্যে আয়তক্ষেত্র সংখ্যা বৃহৎ আয়তক্ষেত্র সংখ্যা এর সমষ্টি এটা (চতুর্থ হীরা, যা একটি পাওয়া যায় জন্য করতে superimposed হয় 5x5গ্রিড, 2x8, 4x6, 6x4, এবং 8x2বিয়োগ আয়তক্ষেত্র সংখ্যা) দুইবার গণনা (সংখ্যা পূর্ববর্তী আয়তক্ষেত্র অ্যাজটেক হীরার )।

সূত্রটি এখানে (পরে যুক্ত করার জন্য টেক্স):

# superimposed rectangles, 2x(2n-2), 4*(2n-4), ...
f = lambda n: sum( (2*k)*(2*k+1)/2 * (2*n-2*k)*(2*n-2*k+1)/2 for k in range(1, n) )
aztec_rect = f(n) - f(n-1)

উল্ফর্যাম আলফা, জন্য বদ্ধ ফর্ম অনুযায়ী fহয় 1/30*(n-1)*n*(4*n**3+14*n**2+19*n+9)এবং জন্য বদ্ধ ফর্ম aztec_rect, কারণ নিল আবিষ্কৃত 1/6*n*(n-1)*(4*n**2+4*n+3) == 1/6*(4*n**4-n**2-3*n)

আমি এখনো কেন আবিষ্কার আছে (m-n)(n*(4*n*n-1)/3)কাজ, যদিও আমি সন্দেহ তার কারণ হল, এক সংজ্ঞা A000447 হয় binomial(2*n+1, 3)। আমি তোমাকে পদে রাখবো.

আপডেট: আমার বিশ্বাস করার যুক্তি আছে যে একটি বর্ধিত অ্যাজটেক ডায়মন্ডের আয়তক্ষেত্রের সংখ্যার কার্যকারিতা হীরা m>nবিয়োগের উচ্চমানের 2k*2(n-k)আয়তক্ষেত্রের সংখ্যার সাথে সম্পর্কিতF(m-1,n-1) । আমার কাছে এগুলি থাকলে আরও ফলাফল

আপডেট: আমি একটি পৃথক রুট চেষ্টা করেছি এবং প্রসারিত অ্যাজটেক হীরার জন্য অন্য একটি সূত্র দিয়ে শেষ করেছি যা বেশিরভাগই ব্যাখ্যাযোগ্য তবে এর একটি শব্দ রয়েছে যা আমি এখনও বুঝতে পারি না। Huzzah! : ডি

def f(m,n):
 if n > m:
     return f(n,m)
 if n == 0:
     return 0
 else:
     return(m-n+1)*(4*n**4-n*n-3*n)/6-f(m-1,n-1)+(m-n)*2+(m-n)*(n-2)-(m-n-1)*f(n-1,n-1)

শেষ সূত্রটির দ্রুত ভাঙ্গন:

  • (m-n+1)*(4*n**4-n*n-3*n)/6nকাঠামোর আকারের সুপারপোজড অ্যাজটেক হীরার সংখ্যা f(n,n) = (4*n**4-n*n-3*n)/6f(7,3)5 সুপারম্পোজড অ্যাজটেক হীরার আকার রয়েছে 3, যখন f(3,3)রয়েছে মাত্র 1 টি হীরা।
  • -f(m-1,n-1) সুপারিপোজড হীরার মাঝামাঝি থেকে কয়েকটি সদৃশ আয়তক্ষেত্র সরান।
  • +(m-n)*22 অতিরিক্ত- 2দ্বারা-(2n-1)প্রতিটি অতিরিক্ত হীরার আয়তক্ষেত্রগুলির জন্য ।
  • +(m-n)*(n-2)প্রতিটি অতিরিক্ত হীরাটির জন্য অতিরিক্ত n- nবর্গক্ষেত্রের অ্যাকাউন্ট রয়েছে ।
  • -(m-n-1)*f(n-1,n-1)এটি নতুন চমকপ্রদ শব্দ। স্পষ্টতই আমি আমার গণনায় কিছু অতিরিক্ত স্কোয়ারের জন্য জবাবদিহি করিনি, তবে বর্ধিত হীরাটি কোথায় আছে তা আমি খুঁজে পাইনি।

দ্রষ্টব্য: কখন m==n, এর m-n-1 = -1অর্থ এই শেষ শব্দটি গণনাতে স্কোয়ার যুক্ত করে। আমি আমার নিয়মিত সূত্রে কিছু অনুপস্থিত হতে পারি। সম্পূর্ণ প্রকাশ, এটি কেবলমাত্র এই সূত্রের পূর্ববর্তী খসড়ার প্যাচ হিসাবে বোঝানো হয়েছিল যা সবেমাত্র কাজের ক্ষেত্রে ঘটেছিল। স্পষ্টতই, আমার এখনও কী চলছে তা খনন করতে হবে এবং এটি হতে পারে যে আমার সূত্রে এটিতে কিছু বাগ রয়েছে। আমি আপনাকে পোস্ট রাখতে হবে।

রাসেল, গ্যারি এবং ওয়েইস্টেইন, এরিক ডব্লিউ। "অ্যাজটেক ডায়মন্ড।" ম্যাথওয়ার্ল্ড থেকে - একটি ওল্ফ্রাম ওয়েব রিসোর্স। http://mathworld.wolfram.com/AztecDiamond.html


আমি পছন্দ করি যে কীভাবে এই উত্তরটির মূল উত্তরের চেয়ে আরও বেশি উত্স রয়েছে এবং একটি +100 অনুগ্রহ ...: পি
হাইপারনিউটারিনো

5

সি, 71 64 বাইট

f(m,n){return n>m?f(n,m):m*~m*n*~n/4+n*((2*m-n)*(4*n*n-1)-3)/6;}

আইডিয়নে চেষ্টা করে দেখুন


2
আমি এখানে কী চলছে এবং আপনি কীভাবে এই সমাধানটিতে পৌঁছেছেন তা জানতে আগ্রহী।
জর্দান

1
@ জর্ডান এখনও পর্যন্ত আমি সূত্রের দ্বিতীয়ার্ধটি যাচাই করেছি m==n: একটি n*nবর্গক্ষেত্রে নগ্ন আয়তক্ষেত্রের সংখ্যা (4*n*n*n*n-n*n-3*n)/6। ক্রম 0, 9, 51, 166, 410, 855, 1589, 2716, 4356, 6645 তবে এটি OEIS তে উপস্থিত হয় না।
নীল

1
আমি এখন যাচাই করেছি যে যখন m>nআপনাকে অতিরিক্ত (m-n)(n*(4*n*n-1)/3)(ওইআইএস A000447 থেকে নেওয়া সূত্রের শেষ অংশ) যুক্ত করতে হবে। পুনরায় সাজানো এবং যুক্ত করা @ বিটসেকের সূত্র দেয়।
নীল

@ নীল আপনি কীভাবে এই সূত্রগুলিতে পৌঁছেছেন?
শার্লক

2
@ শার্লক 9 আমি প্রথম 10 স্কোয়ারে ম্যানুয়ালি টিল্টেড আয়তক্ষেত্রগুলির সংখ্যা গণনা করেছি এবং ওইআইএস অনুসন্ধান ইঞ্জিনটিতে অনুক্রমটি খাওয়ালাম যা অনুক্রমটি সনাক্ত করতে পারে নি তবে এর জন্য একটি সূত্র খুঁজে পেয়েছে যা ওপি'র সূত্রের সাথে মিলেছে m==n। আমি তখন ম্যানুয়ালি ছোট আয়তক্ষেত্রগুলিতে কাত হওয়া আয়তক্ষেত্রগুলির সংখ্যা গণনা করেছি এবং লক্ষ্য করেছি যে দীর্ঘতর মাত্রা বরাবরই একটি নির্দিষ্ট সংক্ষিপ্ত মাত্রার জন্য একই পরিমাণ আয়তক্ষেত্র যুক্ত করে। আমি ওআইআইএস-তে বর্ধিত খাবারগুলি খাওয়ালাম যা A000447 এ একটি মিল খুঁজে পেয়েছে।
নীল

4

পাইথন, 73 68 বাইট

x=lambda m,n:m*~m*n*~n/4+n*((2*m-n)*(4*n*n-1)-3)/6if m>n else x(n,m)

এবং নিম্নোক্ত সংস্করণটির বাইটকাউন্ট (75) বেশি রয়েছে, তবে এটি ব্যবহারের জন্য জায়গাগুলি খুঁজে পাওয়ার জন্য একটি দুর্দান্ত অনুশীলন ছিল ~:

def f(r,c):
 if r<c:r,c=c,r
 x=(4*c**3-c)/3
 return r*c*~r*~c/4+x*r--~x*c/2

আপনি যদি x=lambda m,n:m*~m*n*~n/4+n*((2*m-n)*(4*n*n-1)-3)/6if m>n else x(n,m)
ল্যাম্বদা

আহ, কিছু কারণে আমি ধরেছিলাম আমাদের ব্যবহার করতে হবে def। ধন্যবাদ! আপডেট করা হয়েছে।
মার্কাস অ্যান্ড্রুজ

3

উত্তল, 37 36 বাইট

__:)+×½½\~æ<{\}&:N\¦\-N¦¦N*(*3-N*6/+

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

স্ট্যাক-ভিত্তিক ভাষার জন্য বেটসেকের অ্যালগরিদম সংশোধিত এবং অনুকূলিতকরণ ব্যবহার করে। আমার আরও কিছু ফ্রি সময় পেলে ব্যাখ্যাটি আসবে। আমি বাজি ধরছি এটিকে ছোট করা যেতে পারে তবে আমি এই মুহুর্তে বিরক্ত হচ্ছি না।


2

ব্যাচ, 82 বাইট

@if %2 gtr %1 %0 %2 %1
@cmd/cset/a%1*~%1*%2*~%2/4+((%1+%1-%2)*(%2*%2*4-1)-3)*%2/6
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.