আমেরিকা যুক্তরাষ্ট্রের পতাকাটিতে তার ক্যান্টনে 50 টি স্টার রয়েছে যা 50 টি রাজ্যের প্রতিনিধিত্ব করে।
অতীতে, যখন কম রাজ্য ছিল, অবশ্যই কম তারা ছিল, এবং তাদের আলাদাভাবে সাজানো হয়েছিল। উদাহরণস্বরূপ, 1912-1959 (নিউ মেক্সিকো এবং অ্যারিজোনার প্রবেশের পরে তবে আলাস্কার আগে), 6 × 8 আয়তক্ষেত্রাকার বিন্যাসে 48 তারা ছিল।
1867-1877 (নেব্রাস্কা ভর্তির পরে কিন্তু কলোরাডোর আগে) থেকে ব্যবহৃত 37-তারাযুক্ত পতাকাটিতে একটি অসম্পূর্ণ তারকা বিন্যাস ছিল।
ভবিষ্যতে একটি 51 তম রাষ্ট্র যুক্ত হওয়ার পরে, হেরাল্ড্রি আর্মি ইনস্টিটিউট ইতিমধ্যে একটি নতুন পতাকার জন্য প্রাথমিক নকশা তৈরি করেছে।
তবে তারাগুলি সাজানোর জন্য কোনও সাধারণ অ্যালগরিদম নেই , সুতরাং আসুন এটি তৈরি করা যাক!
চ্যালেঞ্জ
একটি প্রোগ্রাম লিখুন যা কোনও মার্কিন পতাকার ক্যান্টনে (নীল অংশ) স্থাপনের জন্য প্রদত্ত সংখ্যক তারকাদের জন্য, এই নক্ষত্রগুলি রাখার জন্য আউটপুট অনুকূল স্থানাঙ্ক করে। সমন্বয় সিস্টেমটি ক্যান্টন দিয়ে [ পুরো পতাকা নয় পুরো হিসাবে] 0≤x≤W এবং 0≤y≤H দিয়ে সংজ্ঞায়িত করা হয়।
এই চ্যালেঞ্জের উদ্দেশ্যে, একটি "অনুকূল" বিন্যাসটি সংজ্ঞায়িত করা হয়েছে যা ক্যান্টনের একটি বিন্দু এবং নিকটতম তারার কেন্দ্রের মধ্যবর্তী গড় (ইউক্লিডিয়ান) দূরত্বকে হ্রাস করে।
এই মানটির আনুমানিক জন্য একটি সোজাসাপ্টা (যদি সম্ভবত suboptimal হয়) অ্যালগোরিদম হ'ল:
def mean_distance_to_nearest_star(stars, width, height, point_density=100):
"""
Approximate the mean distance between a point in the rectangle
0 < x < width and 0 < y < height, and the nearest point in stars.
stars -- list of (x, y) points
width, height -- dimensions of the canton
"""
total = 0.0
nx = round(width * point_density)
ny = round(height * point_density)
for ix in range(nx):
x = (ix + 0.5) * width / nx
for iy in range(ny):
y = (iy + 0.5) * width / ny
min_dist = float('inf')
for sx, sy in stars:
min_dist = min(min_dist, math.hypot(x - sx, y - sy))
total += min_dist
return total / (nx * ny)
আপনার প্রোগ্রামে তিনটি কমান্ড-লাইন আর্গুমেন্ট গ্রহণ করা হবে (প্রোগ্রামটির নামটি গণনা করা নয়):
- ক্যান্টনে রাখার মতো তারার সংখ্যা।
- ক্যান্টনের প্রস্থ। (অবশ্যই ভাসমান-পয়েন্টের মানগুলি গ্রহণ করতে হবে))
- ক্যান্টনের উচ্চতা। (অবশ্যই ভাসমান-পয়েন্টের মানগুলি গ্রহণ করতে হবে))
(যদি আপনার পছন্দের প্রোগ্রামিং ল্যাঙ্গুয়েজ কমান্ড-লাইন আর্গুমেন্টগুলিকে সমর্থন করে না, যুক্তিসঙ্গত সমতুল্য কিছু করুন এবং আপনার উত্তরে এটি ডকুমেন্ট করুন))
আউটপুটে কমা দ্বারা বিভক্ত X এবং Y মানগুলি হওয়া উচিত, একের এক লাইনের। (পয়েন্টগুলির ক্রম কোনও বিবেচনা করে না))
উদাহরণ স্বরূপ:
~$ flagstar 5 1.4 1.0
0.20,0.20
0.20,0.80
0.70,0.50
1.20,0.20
1.20,0.80
অতিরিক্ত নিয়ম ও নোট
- আমার যে কোনও সময় নিয়মের ফাঁকগুলি বন্ধ করার অধিকার রয়েছে।
উত্তরের শেষ তারিখটি শুক্রবার, 4 জুলাই 24:00 সিডিটি-তে (ইউটিসি -05: 00)।জবাব না থাকায় সময়সীমা বাড়ানো হয়েছে। ধাই।- আপনার উত্তরে অন্তর্ভুক্ত করুন:
- আপনার প্রোগ্রামের কোড
- এটি কীভাবে কাজ করে তার একটি ব্যাখ্যা
- কমান্ড-লাইন আর্গুমেন্টগুলির সাথে এর আউটপুট
50 1.4 1.0
- আপনার প্রোগ্রামটি অবশ্যই একটি যুক্তিসঙ্গত সময়ের মধ্যে চলতে হবে: একটি সাধারণ পিসিতে সর্বাধিক 5 মিনিট। আমি এ বিষয়ে অতি কঠোর হব না, তবে কয়েক ঘন্টা সময় লাগলে আপনার প্রোগ্রামটিকে অযোগ্য ঘোষণা করব ।
- আপনার প্রোগ্রামটি অবশ্যই ডিটারমিনিস্টিক হওয়া উচিত, অর্থাৎ সর্বদা একই যুক্তিগুলির জন্য ঠিক একই আউটপুট দেয়। সুতরাং,
time()
বা উপর নির্ভর করে নাrand()
। মন্টে কার্লো পদ্ধতিগুলি যতক্ষণ আপনি নিজের PRNG রোল করেন ততক্ষণ ঠিক OK - তারকাদের কেবলমাত্র কেন্দ্রের পয়েন্টগুলিই গুরুত্বপূর্ণ। ওভারল্যাপ বা এ জাতীয় কিছু এড়ানোর চেষ্টা করার বিষয়ে চিন্তা করবেন না।
স্কোরিং
- ক্যান্টনের একটি বিন্দু থেকে নিকটতম তারার মধ্যবর্তী দূরত্বটি হ্রাস করুন। (উপরে দেখুন.)
- আপনি 13 এবং 50 তারকার মধ্যে কোনও historicalতিহাসিক মার্কিন পতাকাগুলির ভিত্তিতে স্কোর করতে পারেন। একক র্যাঙ্কিংয়ে স্কোর ওয়েট করার জন্য সঠিক অ্যালগরিদম পরে পোস্ট করা হবে।
- টাই করার ক্ষেত্রে, বিজয়ী নেট আপভোটিসের সংখ্যা দ্বারা চয়ন করা হবে।
- আমি সম্ভবত আমার নিজের একটি প্রোগ্রাম পোস্ট করব, তবে চেকমার্কের জন্য নিজেকে যোগ্য হতে বঞ্চিত করব।