একই বর্ণের গাণিতিক অগ্রগতি


15

ভ্যান ডার ওয়েয়ারডেনের উপপাদ্যটি বলে

যে কোনও ধনাত্মক পূর্ণ পূর্ণসংখ্যার জন্য rএবং এর kজন্য কয়েকটি সংখ্যক Nরয়েছে যেগুলি যদি পূর্ণ বর্ণগুলি {1, 2, ..., N}বর্ণযুক্ত হয়, প্রতিটি r বিভিন্ন বর্ণের সাথে একটি হয় , তবে কমপক্ষে kসংখ্যার অগ্রগতিতে একই বর্ণের কমপক্ষে পূর্ণসংখ্যার সংখ্যা থাকে। এর মধ্যে সবচেয়ে কম Nভ্যান ডার ওয়েয়ারডেন নম্বর W(r, k)

আপনার লক্ষ্য ভ্যান Waerden ডের সংখ্যা গণনা হয় W(r, k)প্রদত্ত ধনাত্মক-পূর্ণসংখ্যা ইনপুট rএবং k। সবচেয়ে কম বাইট জেতা

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

এই ফাংশনটি গণনা করে এমন বিল্ট-ইনগুলি অনুমোদিত নয়।

উদাহরণ

জন্য r = 2রং এবং দৈর্ঘ্য progressions, k = 3, একটি length- হয় 8ক্রম যে এই ধরনের অগ্রগতি এড়াতে, অর্থাত্ 3একই রং এর সমানভাবে-ব্যবধানযুক্ত উপাদান:

B R R B B R R B

তবে, এর মতো কোনও দৈর্ঘ্য- 9অনুক্রম নেই W(2, 3) == 9। এই ক্ষেত্রে,

R B B R B R R B R
  ^     ^     ^      

দৈর্ঘ্যে 3একই রঙের গাণিতিক অগ্রগতি দেখানো হয়েছে।

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

আপনি সম্ভবত কেবলমাত্র ছোট মামলাগুলি পরীক্ষা করতে সক্ষম হবেন।

+-----+-----+-----+-----+-----+-----+------+
|     | k=1 | k=2 | k=3 | k=4 | k=5 | k=6  |
+-----+-----+-----+-----+-----+-----+------+
| r=1 |   1 |   2 |   3 |   4 |   5 |    6 |
| r=2 |   1 |   3 |   9 |  35 | 178 | 1132 |
| r=3 |   1 |   4 |  27 | 293 |     |      |
| r=4 |   1 |   5 |  76 |     |     |      |
+-----+-----+-----+-----+-----+-----+------+

উত্তর:


7

পাইথন 3.5, 125 124 119 বাইট

f=lambda r,k,*L:any(L[:x*k:x]==k*(*{*L[:x*k:x]},)for x in range(1,len(L)+1))*len(L)or max(f(r,k,i,*L)for i in range(r))

এটি মজার কারণ কারণ এটিকে গল্ফ করার সময়, প্রোগ্রামটি আরও কার্যকর হয়েছিল। যদিও এর বাইরে f(2,4)বা f(3,3)এখনও কিছু চিরকাল লাগে।

ব্যাখ্যা

প্রাথমিক সংস্করণটি পরীক্ষা করে দেখেছে যে কোনও অনুক্রমে kসমস্ত সম্ভাব্য সূচনা সূচক এবং পদক্ষেপ চেষ্টা করে দৈর্ঘ্যের অগ্রগতি রয়েছে ।

def f(r,k,L=[]):
 for i in range(len(L)):
  for j in range(len(L)):
   if len(set(L[i::j+1]))==1 and len(L[i::j+1])==k:
    return len(L)
 return max(f(r,k,L+[i])for i in range(r))

গল্ফযুক্ত সংস্করণটিতে কেবল সমস্ত সম্ভাব্য পদক্ষেপের চেষ্টা করা দরকার কারণ এটি নতুন ক্রম উপাদানগুলিকে প্রিপেন্ড করে। x*kটুপি ক্ষেত্রে যত্ন নিতে মত হল [0, 0, 1]যা, দৈর্ঘ্য 2 একটি অগ্রগতি রয়েছে কিন্তু সন্তুষ্ট না ইউনিকনেস চেক নতুন মুখ।

চেক হিসাবে

L[:x*k:x]==k*(*{*L[:x*k:x]},)

গল্ফযুক্ত সংস্করণটির প্রথম পাসে, যখন Lখালি থাকে, len(L)0 হয়। সুতরাং দ্বিতীয়ার্ধের দ্বিতীয় অংশটি orসর্বদা কার্যকর করা হবে। এর পরে Lখালি নয়, সুতরাং {*L[:x*k:x]}(যা পাইথন ৩.৫ এর জন্য set(L[:x*k:x])) কমপক্ষে একটি উপাদান থাকবে।

যেহেতু L[:x*k:x]সর্বাধিক kউপাদান থাকতে পারে এবং Lখালি না থাকার জন্য k*(*{*L[:x*k:x]},)কমপক্ষে kউপাদান থাকতে পারে, তাই উভয় ক্ষেত্রেই ঠিক একই kউপাদান থাকতে পারে যখন দুটি সমান হতে পারে । এটি হওয়ার জন্য {*L[:x*k:x]}অবশ্যই একটি উপাদান থাকতে হবে, অর্থাত্ আমাদের অগ্রগতিতে কেবল একটি রঙ থাকে।

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