একটি মৌমাছির অদ্ভুত জীবন


19

গবেষকরা সম্প্রতি একটি মজাদার মৌমাছি উপনিবেশ আবিষ্কার করেছেন যা মধুচক্রের অসীম ক্ষেত্রের মধ্যে বাস করে:

মউচাক

প্রতিটি কোষে একটি মৌমাছি থাকতে পারে বা না পারে। আসলে, এই প্রাণীগুলির জীবন কিছুটা বিশৃঙ্খলাযুক্ত বলে মনে হয়। এটি গণনা করা যেতে পারে যে কোনও কলোনী সর্বদা নিম্নলিখিত প্যাটার্ন দিয়ে শুরু হয়:

প্রাথমিক প্যাটার্ন

(Bee দ্বারা টানা এমানুয়েল Boutet উপর উইকিমিডিয়া কমন্সের । এই মউচাক-এবং-মৌমাছির ইমেজ এইভাবে অধীনে উন্মুক্ত করা হয়েছে CC-BY-এসএগুরগুর )

এর পরে মৌমাছির জীবনচক্র তথাকথিত প্রজন্মগুলিতে বিভক্ত। প্রতিটি প্রজন্মের পুরানো মৌমাছি মারা যায় এবং নতুন পোষা হয় এবং এটি মূলত তাদের ঘরের প্রতিবেশীদের উপর নির্ভর করে:

  • যদি একটি মৌমাছির দু'টিরও কম প্রতিবেশী থাকে তবে তা নিঃসঙ্গতার কারণে মারা যায়।
  • যদি একটি মৌমাছি তিনটির বেশি প্রতিবেশী থাকে তবে তা ভিড়ের কারণে মারা যায়।
  • যদি কোনও ঘরে দুটি, তিন বা চারটি জীবন্ত মৌমাছি প্রতিবেশী কোষগুলিতে থাকে তবে পরবর্তী প্রজন্মের মধ্যে সেখানে একটি নতুন মৌমাছির ছোঁয়া থাকে।

মৌমাছির মরণ প্রজন্মের শেষ অবধি মারা যায় না তাই তারা এখনও পার্শ্ববর্তী কোষগুলিকে প্রভাবিত করে যেগুলি পরবর্তী প্রজন্মের মৌমাছির ছোঁড়া হতে পারে।

এখন যেহেতু আমরা জানি যে এই জাতীয় উপনিবেশ কীভাবে কাজ করে, আমরা এটি বহু সংখ্যক প্রজন্মের মাধ্যমে অনুকরণ করতে পারি।

ইনপুট

ইনপুটটি একটি একক সংখ্যা এন , স্ট্যান্ডার্ড ইনপুটটিতে দেওয়া হয়, একটি লাইন ব্রেক দ্বারা শেষ হয়। 0 ≤ N ≤ 150. এটি অনুকরণ করার জন্য প্রজন্মের সংখ্যা।

আউটপুট

আউটপুট মানক আউটপুট এবং এককভাবে একটি একক লাইন বিরতি অনুসরণ করে যা N প্রজন্মের পরে জীবিত মৌমাছির সংখ্যা প্রতিনিধিত্ব করে Out

স্ট্যান্ডার্ড ত্রুটির উপর অতিরিক্ত আউটপুট উপেক্ষা করা হয়।

নমুনা ইনপুট

0
5
42
100

নমুনা আউটপুট

6
44
1029
5296

জয়ের শর্ত

গল্ফের রীতি অনুসারে সংক্ষিপ্ততম কোড জিতেছে। টাই করার ক্ষেত্রে আগের সমাধানটি জিততে পারে।

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

দুটি পরীক্ষার স্ক্রিপ্ট রয়েছে যাতে অভিন্ন পরীক্ষার কেস থাকে:

অনুরোধ উভয় ক্ষেত্রে: <test script> <my program> [arguments]যেমন ./test ruby beehive.rbবা ./test.ps1 ./beehive.exe

আমি জানি 151 এর পরিবর্তে কেবল 22 টি পরীক্ষা রয়েছে (মূলত কারণ সমাধানগুলি বেশিরভাগ ধীর হয়)। কাজটি সমাধানের পরিবর্তে সঠিক পরীক্ষার কেস এম্বেড করা থেকে বিরত থাকুন। এই স্ক্রিপ্টগুলি আপনার জন্য পরীক্ষা করার সুবিধার্থে যে কোনও পরিবর্তন এখনও প্রোগ্রামের সঠিক আচরণ করতে পারে কিনা; আপনি নির্দিষ্ট কোডের ক্ষেত্রে আপনার কোডটি মানিয়ে নিতে পারবেন না।

আরেকটি নোট

এই কাজটি ২০১১-W24-এর সময় আমার বিশ্ববিদ্যালয়ে অনুষ্ঠিত একটি গল্ফ প্রতিযোগিতার অংশ ছিল। আমাদের প্রতিযোগীদের স্কোর এবং ভাষাগুলি নীচে ছিল:

  • 336 - সি
  • 363 - সি
  • 387 - সি
  • 389 - হাস্কেল
  • 455 - সি

আমাদের নিজস্ব সমাধান ছিল

  • 230 - রুবি

এটি কিছুটা কনওয়ের জীবনের খেলার মতো মনে হচ্ছে।
পিটার ওলসন

অবশ্যই; এ কারণেই এটিও ট্যাগ করা হয়েছে। এটা খুব পাতলা পর্দা, সত্যিই।
জোয়ি

উত্তর:


9

রুবি, 181 163 153 146 টি অক্ষর

h=[0]*4e4
[0,-200,201,202,2,3].map{|i|h[i]=1}
gets.to_i.times{h=h.map{[g=1,200,201].map{|x|g+=h[x]+h[-x]};g>5-h.rotate![-1]||g<3?0:1}}
p h.count 1

এই প্রয়োগটি অ্যারে h(মাত্রা 200x 200সমতল) ব্যবহার করে একটি স্ট্যান্ডার্ড পদ্ধতির অনুসরণ করে , যেখানে প্রতিটি উপাদান হয় 0(কোনও মৌমাছি নয়) বা 1(মৌমাছি অন্তর্ভুক্ত)। অ্যারে [0,-200,201,202,2,3]মৌমাছিদের প্রাথমিক অবস্থানগুলি বর্ণনা করে (যে কোনও প্রাথমিক কোষের তুলনায়)।

উপরে উল্লিখিত হিসাবে ইনপুট এবং আউটপুট, সমস্ত পরীক্ষার কেস সংজ্ঞায়িত করে।

সম্পাদনা 1: "অতিরিক্ত স্থান" - পরিবর্তনের পরিবর্তে একটি মোড়কের সমাধানে ফিরে গেছে (যা একটি মধ্যবর্তী সংস্করণে ছোট ছিল তবে এখন বেশ কয়েকটি অক্ষর দীর্ঘ)।

সম্পাদনা 2:b সম্পূর্ণরূপে ভেরিয়েবল সরানো ।

3 সম্পাদনা করুন: সতর্কতা: এই সম্পাদনাটি প্রোগ্রামটিকে মারাত্মকভাবে ধীর করেছে। আমি এইভাবে মাত্রা 200 টি কমিয়ে দিয়েছি যা এখনও 150 টি পুনরাবৃত্তির জন্য যথেষ্ট। পরিবর্তনশীল দ্বারা অ্যারে সূচীকরণের পরিবর্তে আমরা ক্রমান্বয়ে অ্যারেটিকে আরও সামনে ঘোরাই। সত্যিই ভাল ডিজাইন নয়, তবে এখন আমরা যথেষ্ট পরিমাণে 150 এর নিচে।


7

পাইথন, 152 টি অক্ষর

P=[0,2,3,1j,1+1j,1-1j]
for i in' '*input():Q=[p+d for d in(1,-1,1j,-1j,1j-1,1-1j)for p in P];P=set(p for p in Q if 1<Q.count(p)<5-(p in P))
print len(P)

এই সমাধানটি জটিল সংখ্যার একটি সেট সহ মৌমাছির অবস্থানগুলি ট্র্যাক করে। এটি বেশ ধীর কারণ মৌমাছির সংখ্যার অভ্যন্তরীণ লুপটি চতুর্ভুজযুক্ত। আমি 50 টি পর্যন্ত পরীক্ষা করেছি এবং এটি কার্যকর হয়।


পাইথন 2.7 সমঝোতা সেট করেছে
gnibbler

আমি মৌমাছিদের ট্র্যাকিংয়ের কথা ভেবেছিলাম, তবে জটিল সংখ্যার সাথে এটি করা সত্যি ঝরঝরে! এছাড়াও আপনি একটি এক্সিকিউটিউটের সাথে লুপটির পরিবর্তে 3 টি অক্ষর সংরক্ষণ করতে পারেন (যেমনটি আমি করেছি) did
জুলুস ওলোন

পাইথন 2.7 এছাড়াও আক্ষরিক সেট করেছে, সুতরাং আপনি লিখতে পারেন P={0,2,3,1j,1+1j,1-1j}এবং তারপরে {p}<Pসদস্যতার জন্য পরীক্ষা করতে পারেন (1 টি সংরক্ষণ করে)
gnibbler

5

পাইথন, 171 169 158 অক্ষর

w=300
s=w*w
x=[0]*297
h=[1,1,0]+x+[1,0,1,1]+x+[1]+x*s
exec('h=[1<sum(h[(i+x)%s]for x in[-1,-w-1,-w,1,w+1,w])<5-h[i]for i in range(s)];'*input())
print sum(h)

আমি বিশ্বকে 300 * 300 = 900000 1D অ্যারের হিসাবে মডেল করি ( hআসলে আরও বড়, তবে শেষটি ব্যবহৃত হয় না), যেখানে মৌমাছিটি 1 এবং খালি 0 হয়। 300 এর আকার ঠিক থাকে কারণ বেশিরভাগের বৃদ্ধি হবে প্রতিটি প্রজন্মের জন্য প্রতিটি মাত্রায় 2, এবং 150 প্রজন্মের বেশি নেই।

এখানে একটি সামান্য উজ্জ্বল এবং মন্তব্য করা সংস্করণ:

w=300 # width and height of the world
s=w*w
# create initial grid
l=[1,1]+[0]*298+[1,0,1,1]+[0]*297+[1]+[0]*s

for k in range(input()):
  h=l[:]

  for i in range(s):

    # for each point, compute the number of neighbors
    n=sum(map(lambda x:h[(i+x)%s],[-1,-w-1,-w,1,w+1,w]))

    # if that number verifies the conditions, put 1 here, if not put 0
    l[i]=1<n<5-h[i]

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