জীবনের গেমটি 3 ডি তে বাস্তবায়ন করুন


17

চ্যালেঞ্জটি হ'ল 3 ডি ( উদাহরণস্বরূপ ) এর জীবনের গেমটির সংক্ষিপ্ত বাস্তবায়ন সন্ধান করা । এগুলি নিয়ম:

মাত্র 1 বা কম প্রতিবেশী সহ কোষগুলি (এই ক্ষেত্রে, কিউবস) মারা যায়, যেন একাকীত্বের দ্বারা।
ঠিক 5 টি ঘর যদি খালি কক্ষকে ঘিরে থাকে তবে তারা প্রজনন করে এটিকে পূরণ করে।
যদি কোনও ঘরে 8 বা তার বেশি প্রতিবেশী থাকে তবে তা ভিড়ের কারণে মারা যায়।

এটি অন্তত একটি 10x10x10 করুন, যেখানে স্তরগুলি পৃথকভাবে এভাবে আউটপুট করা হয়:

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 X 0 0 X 0 0 0 0 0
0 0 X X X 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

অবশ্যই একটি গ্রাফিক থ্রিডি সিমুলেশন গ্রহণ করা
হবে প্রারম্ভিক অবস্থানটি হার্ডকোডযুক্ত হতে পারে তবে এটি যদি কোনও শুরুর অবস্থানে পরিবর্তন করা হয় তবে এটি অবশ্যই কাজ করবে। এটি অবশ্যই কোনও প্রজন্মের পরিমাণ গণনা করতে সক্ষম হবে এবং ব্যবহারকারীকে অবশ্যই পরবর্তী প্রজন্মের জন্য ম্যানুয়ালি জিজ্ঞাসা করতে সক্ষম হতে হবে।

চরিত্রের মধ্যে সংক্ষিপ্ততম কোড জয়!

আমি এটির কোনও নিজস্ব (কিউব) আকারের জন্য নিজস্ব বাস্তবায়ন করেছি: http://jensrenders.site88.net/Live3D.htm আপনি এটি পরীক্ষা করতে ব্যবহার করতে পারেন, এবং আপনি আমার কোডটি বেস করতে পারেন, যদিও আমি এটি মন্তব্য করি নি although ।


1
আপনার বিবৃতি থেকে কোড-গল্ফ ট্যাগটি সংক্ষিপ্ততম বাস্তবায়ন সন্ধান করুন । আপনি যা চান তা দয়া করে পরীক্ষা করে দেখুন। কীভাবে ইনপুট করা যায়, কতগুলি চক্র, অ্যানিমেটেড হ্যাঁ / না, সে সম্পর্কে আপনার কিছু বিবরণ দেওয়া উচিত ... কারণ কোড-গল্ফের একটি দৃ specific় স্পেসিফিকেশন থাকা অপরিহার্য।
হাওয়ার্ড

@ হওয়ার্ড আমি আরও কিছু নির্দিষ্টকরণ যুক্ত করেছি, এবং হ্যাঁ, কোড-গল্ফ ট্যাগ ভুলে গেছি;) তার জন্য ধন্যবাদ।
জেনস রেন্ডার্স

@ পিটারটেলর হ্যাঁ ঠিক 5, আমি এটি সম্পাদনা করব।
জেনস রেন্ডার্স

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

আপনি কি সত্যই মেটা থ্রেডে আলোচিত সমস্ত লুফোলগুলি নিষিদ্ধ করার অর্থ দিয়েছিলেন , বা কেবল (ডিস) অনুমোদনের মানদণ্ড (+5 স্কোর, ডাউনভোটের তুলনায় কমপক্ষে দ্বিগুণ দ্বিগুণ) পূরণ করছেন? কারণ আমি নিশ্চিত যে আমি আলোচনা করার জন্য বেশ কিছু আকর্ষণীয় "
লুফোলস

উত্তর:


14

গণিত - 120 বাইট

g=CellularAutomaton[{(l=Flatten@#;c=l[[14]];n=Total@Drop[l,{14}];Which[n<2||n>7,0,n==5||c==1,1,0<1,0])&,{},{1,1,1}},##]&

অবশ্যই জয়ের প্রতিযোগী নয়, তবে এটি আমার উদ্দেশ্য ছিল না। এছাড়াও, সম্ভবত নিয়মের সংখ্যা বের করে এটি সম্ভবত উল্লেখযোগ্যভাবে কমে যেতে পারে। আমি সত্যিই একটি ভিজ্যুয়ালাইজেশন লিখতে চেয়েছিলাম (যদিও আমি সত্যই নিশ্চিত যে সেখানে ইতিমধ্যে অনেক টন রয়েছে) সুতরাং আমরা এখানে যাচ্ছি):

animateGol3d[size_, i_, n_] := 
  ListAnimate[
    Graphics3D[
      Cuboid /@ Position[#, 1], 
      PlotRange -> {{0, size}, {0, size}, {0, size}} + 1
    ] & /@ g[i, n]
  ];

এবং প্রাথমিক শর্তগুলির একটি গুচ্ছ নিয়ে পরীক্ষার পরে, আমি নিম্নলিখিতগুলির মতো জিনিস পেয়েছি:

এখানে চিত্র বর্ণনা লিখুন

এবং এখানে গ্রিড আকারের একটি রয়েছে 20x20x20। এটি অনুকরণ এবং রেন্ডার করতে কয়েক সেকেন্ড সময় নিয়েছিল:

এখানে চিত্র বর্ণনা লিখুন

যাইহোক, এটি পর্যায়ক্রমিক সীমানা শর্তগুলি ধরে নেয়।


যারা আসলেই ভারসাম্যহীন অবস্থায় প্রবেশ করছেন, বা এটি কেবল অ্যানিমেশনটি বন্ধ হচ্ছে? যদি প্রাক্তন হয় তবে আপনি আমাকে কিছু ঝরঝরে ধারণা দিয়েছেন ...
Kroltan

1
@ ক্রল্টান কিছুক্ষণ হয়ে গেছে, তবে আমি নিশ্চিত যে তারা ভারসাম্য বজায় রেখেছে।
মার্টিন ইন্ডার

1
সুন্দর ধন্যবাদ. ভারসাম্যের পৃথক টুকরোগুলি খুব রুম-ম্যাপ-ওয় বলে মনে হচ্ছে, একটি রাউজ লাইক গেম।
Kroltan

12

এপিএল, 46

এটি আমার কিছুটা সময় নিয়েছিল তবে আমি এটি 46 টি অক্ষরে নামিয়েছি:

{(5=m)∨⍵∧3>|5.5-m←⊃+/,i∘.⌽i∘.⊖(i←2-⍳3)⌽[2]¨⊂⍵}

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

ব্যাখ্যা

{                           ⊂⍵}   Take the argument matrix and enclose it in a scalar
               (i←2-⍳3)           Prepare an array with values -1 0 1 and call it i
                       ⌽[2]¨      Shift the matrix along the 2nd dim. by each of -1 0 1
           i∘.⊖                   Then for each result do the same along the 1st dimension
       i∘.⌽                       And for each result again along the 3rd dimension
 m←⊃+/,                           Sum element-wise all 27 shifted matrices and call it m

মধ্যবর্তী ফলাফলটি mমূল ম্যাট্রিক্সের মতো একই আকারের একটি ম্যাট্রিক্স যা প্রতিটি উপাদানকে গণনা করে যে তার নিজের সাথে 3 × 3 × 3 পাড়াতে কতগুলি জীবন্ত রয়েছে। তারপর:

           |5.5-m   For each element (x) in m, take its distance from 5.5
       ⍵∧3>         If that distance is <3 (which means 3≤x≤8) and the original cell was 1,
 (5=m)∨             or if the element of m is 5, then the next generation cell will be 1.

উদাহরণ

প্রায় 1/3 কোষ = 1 দিয়ে একটি এলোমেলো 4 × 4 × 4 ম্যাট্রিক্স সংজ্ঞায়িত করুন এবং এর 1 ম এবং 2 য় প্রজন্মের গণনা করুন। ⊂[2 3]সামনে শুধু একটা কৌতুক উল্লম্বভাবে এর অনুভূমিকভাবে পরিবর্তে প্লেন প্রিন্ট করতে হয়:

      ⊂[2 3] m←1=?4 4 4⍴3
 1 0 0 0  1 0 1 0  1 0 1 0  0 0 0 1 
 1 1 0 0  0 0 0 0  0 0 0 1  1 0 1 0 
 0 0 0 0  0 1 0 0  0 0 0 0  0 0 1 0 
 1 1 0 0  0 0 0 1  1 0 0 1  0 0 1 0 
      ⊂[2 3] {(5=m)∨⍵∧3>|5.5-m←⊃+/,i∘.⌽i∘.⊖(i←2-⍳3)⌽[2]¨⊂⍵} m
 0 0 0 0  0 0 1 0  1 0 1 0  0 0 0 0 
 1 0 0 0  0 0 1 0  0 0 0 0  1 0 1 0 
 0 0 0 0  0 1 0 0  0 0 0 0  0 0 1 0 
 1 1 0 0  0 0 0 0  1 0 0 0  0 0 1 0 
      ⊂[2 3] {(5=m)∨⍵∧3>|5.5-m←⊃+/,i∘.⌽i∘.⊖(i←2-⍳3)⌽[2]¨⊂⍵}⍣2⊢ m
 0 0 1 0  1 0 1 0  1 0 1 0  0 0 0 0 
 1 0 1 0  0 0 1 1  0 0 0 0  1 0 1 0 
 1 0 0 0  1 1 0 0  0 0 1 0  1 0 1 0 
 1 1 1 0  1 0 0 1  1 0 1 0  0 0 1 0 

+1 খুব সুন্দর উত্তর! এবং প্রকৃতপক্ষে, সীমানা নির্দিষ্ট করা হয়নি তাই চারপাশে মোড়ানো অনুমোদিত।
জেনস রেন্ডার্স

9

জে - 42 চর

আমরা তিনটি মাত্রায় একটি টেরয়েডাল বোর্ড (চারপাশে মোড়ানো) ধরে নিচ্ছি। জে এর স্বয়ংক্রিয় ফলাফলের ফলাফলটি 1লাইভ সেল এবং 0মৃত ব্যক্তির জন্য ব্যবহার করে আউটপুট স্পেক অনুসরণ করে । এই কোডটি কোনও প্রস্থ, দৈর্ঘ্য এবং উচ্চতার বোর্ডগুলিতে কাজ করে (10x10x10, 4x5x6 ইত্যাদি হতে পারে)।

(((1&<*<&8)@-*]+.5=-)~[:+/(,{3#<i:1)|.&><)

একটি ব্যাখ্যা নিম্নলিখিত:

  • ,{3#<i:1 - ঘর এবং তার সমস্ত প্রতিবেশীদের জন্য অফসেটের তালিকার সুব্রপ্রেশন।
    • <i:1 - 1 এবং -1 এর মধ্যে পূর্ণসংখ্যার তালিকা।
    • ,{3#- তালিকার তিনটি অনুলিপি ( 3#) তৈরি করুন এবং কার্টেসিয়ান পণ্য ( ,{) নিন।
  • (,{3#<i:1)|.&><- 3 ডি অফসেটের প্রতিটি সেটের জন্য অ্যারে শিফট করুন। 3 টি অক্ষর ব্যয়ে সময়ে, আপনি পরিবর্তন করতে পারেন |.&>থেকে|.!.0&> মোড়ানো-আশেপাশে না থেকে পারেন।
  • [:+/ - সমস্ত স্থানান্তরিত বোর্ডগুলি একসাথে যোগ করুন।
  • ((1&<*<&8)@-*]+.5=-)~- দীর্ঘ বাহ্যিক ক্রিয়াটি একটি হুক ছিল তাই এটি বাম এবং ডানদিকে বোর্ড এবং ডানদিকে যে অংশটি আমরা স্থানান্তরিত করেছি এবং সংমিশ্রণ করছিলাম তা গ্রহণ করে। ~অদলবদল এই ভেতরের ক্রিয়া জন্য এই সমস্যা এড়ানোর।
    • 5=- - প্রতিটি ঘরে 1 টি যে-সম-স্থানান্তরিত-বোর্ডগুলি মূল বোর্ডকে বিয়োগ করে (অর্থাত্ প্রতিবেশীর গণনা) অন্য সকলের মধ্যে 5 এবং 0 সমান।
    • ]+. - মূল বোর্ড সহ লজিকাল বা উপরের।
    • (1&<*<&8) - 1 যদি সংখ্যাটি 1 এবং 8 এর মধ্যে তুলনা করা হয় তবে অন্যথায় 0।
    • (1&<*<&8)@-* - প্রতিবেশীর গণনাটি (উপরে হিসাবে) তুলনা করুন এবং গুন করুন (অর্থাত্ লজিক্যাল এবং যখন ডোমেনটি কেবল 1 বা 0 হয়) এর মাধ্যমে যৌক্তিক OR ফলাফল হয়।

ব্যবহারটি এপিএলের মতোই, প্রতিটি পদক্ষেপের জন্য প্রাথমিক বোর্ডে কেবল ফাংশনটি প্রয়োগ করুন। ^:এটিকে সহজ করার জন্য জে এর একটি কার্যক্ষম শক্তি অপারেটর রয়েছে ।

   life =: (((1&<*<&8)@-*]+.5=-)~[:+/(,{3#<i:1)|.&><)  NB. for convenience
   board =: 1 = ?. 4 4 4 $ 4  NB. "random" 4x4x4 board with approx 1/4 ones
   <"2 board  NB. we box each 2D plane for easier viewing
+-------+-------+-------+-------+
|0 0 0 0|1 1 0 0|0 1 0 0|0 0 1 0|
|0 1 0 0|0 0 0 0|0 0 0 1|1 0 0 0|
|0 0 0 0|0 0 1 0|0 1 0 0|0 0 0 1|
|1 1 0 0|1 0 0 0|0 0 0 1|0 1 1 0|
+-------+-------+-------+-------+
   <"2 life board
+-------+-------+-------+-------+
|0 0 0 0|0 1 0 1|0 1 0 0|0 0 1 0|
|1 1 1 1|0 0 0 0|0 0 0 1|1 1 0 0|
|0 0 0 0|0 0 1 1|0 1 0 0|0 0 0 1|
|1 0 0 0|1 0 0 1|0 0 0 1|0 1 1 1|
+-------+-------+-------+-------+
   <"2 life^:2 board  NB. two steps
+-------+-------+-------+-------+
|0 0 0 0|0 1 0 0|0 1 0 0|0 0 0 0|
|0 1 0 0|0 0 0 0|0 0 0 1|0 1 0 0|
|0 0 0 0|0 0 0 0|0 1 0 0|0 0 0 0|
|0 0 0 0|0 0 0 1|0 0 0 0|0 1 1 1|
+-------+-------+-------+-------+
   <"2 life^:3 board  NB. etc
+-------+-------+-------+-------+
|0 1 0 0|1 1 1 0|0 1 0 0|0 1 0 0|
|0 1 0 0|1 0 1 0|1 0 1 0|1 1 1 0|
|1 0 0 0|0 0 0 0|0 1 0 0|0 1 0 0|
|0 0 1 0|0 0 0 0|0 1 0 0|0 1 1 0|
+-------+-------+-------+-------+

আমি "এলোমেলো" বলি কারণ ?.আদিম প্রতিবার একটি নির্দিষ্ট বীজ ব্যবহার করে পুনরুত্পাদনযোগ্য এলোমেলো ফলাফল দেয়। ?সত্যিকারের আরএনজি।


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