লাইফ-ইশ মডেলটির 1D গেম অনুকরণ করুন


12

এই প্রশ্নটি কেবল কোড-পর্যালোচনার দিকে ঝুঁকেছে এবং আমি বুঝতে পেরেছি যে এটি আপনার পছন্দ হতে পারে একটি কোডগল্ফ চ্যালেঞ্জ হিসাবে অভিযোজিত:

আপনাকে বুলিয়ান হিসাবে প্রতিনিধিত্ব করে এমন x ঘরগুলির একটি খালি খালি তালিকা দেওয়া হবে। প্রতিদিন, ঘরগুলি সংলগ্নগুলির সাথে প্রতিযোগিতা করে। 1 একটি "সক্রিয়" ঘর এবং 0 টি "নিষ্ক্রিয়" ঘর উপস্থাপন করে। যদি প্রদত্ত বাড়ির উভয় পাশের প্রতিবেশীরা হয় উভয়ই সক্রিয় হয় বা উভয়ই নিষ্ক্রিয় থাকে, তবে পরের দিন সেই বাড়িটি নিষ্ক্রিয় হয়ে যায়। অন্যথায় এটি সক্রিয় হয়ে ওঠে।

def get_state_as_pos(thelist, pos):
    if thelist[pos-1] == thelist[pos+1]:
        return 0
    else:
        return 1

উদাহরণস্বরূপ, যদি আমাদের প্রতিবেশী [0, 1, 0] এর একটি গ্রুপ থাকে তবে [1] এ বাড়িটি 0 হয়ে যাবে কারণ ঘরটি তার বাম এবং ডান উভয়ই নিষ্ক্রিয়। উভয় প্রান্তের ঘরগুলি বিপরীত length-1দিকটিও পরীক্ষা করে, তাই 0 সূচিতে প্রতিবেশীরা সূচক এবং সূচক 1 এবং তদ্বিপরীত। এমনকি কক্ষটি আপডেট করার পরেও আপনাকে অন্যের আপডেট করার সময় এর পূর্বের অবস্থাটি বিবেচনা করতে হবে যাতে প্রতিটি কক্ষের রাষ্ট্রীয় তথ্য একই সাথে আপডেট হয়।

ফাংশনটি রাজ্যগুলির অ্যারে এবং বিভিন্ন পদক্ষেপ নেয় এবং প্রদত্ত সংখ্যক পদক্ষেপের পরে বাড়ির রাজ্য আউটপুট করা উচিত।

    input: states = [1, 0, 0, 0, 0, 1, 0, 0], steps = 1
   output should be [0, 1, 0, 0, 1, 0, 1, 1]

    input: states = [1, 1, 1, 0, 1, 1, 1, 1], steps = 2
intermediate state= [0, 0, 1, 0, 1, 0, 0, 0]
   output should be [0, 1, 0, 0, 0, 1, 0, 0]


    input: states = [1], steps=1
    output: states= [0]

আপনার পছন্দের তালিকাটি এবং পদক্ষেপগুলি নিন এবং ফলাফলটিকে ডিফল্ট I / O এর মাধ্যমে আউটপুট দিন । স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ। এটি কোডগল্ফ, বাইট জেতে সংক্ষিপ্ত উত্তর!


8
সেলুলার অটোমেটার জন্য +1। যদিও এই বিধি 90 নয়?
হাইলিরাডিওঅ্যাকটিভ

2
প্রথম পরীক্ষার মামলায় ফলাফল হওয়া উচিত নয় [0, 1, 0, 0, 1, 0, 1, 1]?
টিফিল্ড

4
@ জাজাক আমি এলিমেন্টারি সেলুলার অটোমাতা বিধি (প্রতিটি পদক্ষেপ বা প্রজন্মের মধ্যে রূপান্তর) # 90 এর উল্লেখ করছি। ওল্ফ্রাম | আলফাতে "বিধি 90" টাইপ করুন।
হাইলিরাডিওঅ্যাকটিভ

12
ফলাফলের তালিকাটি STDOUT এর মাধ্যমে আউটপুট করুন : কেবলমাত্র আমাদের ডিফল্ট I / O পদ্ধতিতে নির্ভর করার জন্য এটি অত্যন্ত সুপারিশ করা হয় ।
আর্নাউল্ড

5
@ জাজাক এতটা কাকতালীয় নয় যেহেতু প্রতিটি স্ট্যান্ডার্ড 1 ডি সেলুলার অটোম্যাটার জন্য একটি বিধি # রয়েছে। এটি কারণ 3 টি বিটের 8 টি সম্ভাব্য রাজ্য রয়েছে (বাম প্রতিবেশী, স্ব, ডান প্রতিবেশী) এবং আপনি যদি এই প্রতিটির জন্য বলেন তবে একটি নির্দিষ্ট ঘর 8 বা সত্য বা মিথ্যা মানগুলি হবে যা 8 বাইটে নিখুঁত মানচিত্রের ক্ষেত্রে ঘটে। সুতরাং নিয়ম # 0-255 বাইটের অবস্থানের উপর ভিত্তি করে 8 টি পরিস্থিতিতে প্রতিটি বাইনারি এক্সপ্রেশনকে ফলস্বরূপ অন / অফ স্টেট হিসাবে বাইনারি এক্সপ্রেশন গ্রহণ করে এই বিধিবিধানগুলির যে কোনওটিকে শর্টহ্যান্ড হিসাবে ব্যবহার করা যেতে পারে। কিছু নিয়ম উল্লেখযোগ্য হিসাবে বিবেচিত হয় যেমন 90, এভাবে স্বীকৃতি :)
লুনিন

উত্তর:


8

05 এ বি 1 , 14 13 10 9 6 বাইট

শেগির জ্যাপ সমাধানের উপর ভিত্তি করে

F©Á®À^

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

F                  # repeat n times:
 ©Á                #  the list, rotated right
   ®À              #  the list, rotated left
     ^             #  xor (vectorizes)

অকারণে চালাক 9-বাইট সমাধান:

F¥DO.øü+É

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

F                  # repeat n times:
                   #  (examples given for the initial state [0, 1, 1, 0, 1])
 ¥                 #  deltas of the list ([1, 0, -1, 1])
  D                #  duplicate
   O               #  sum (1)
    .ø             #  surround ([1, 1, 0, -1, 1, 1])
      ü+           #  pairwise addition ([2, 1, -1, 0, 2])
        É          #  modulo 2 ([0, 1, 1, 0, 0])




2

জাপট -mh , 11 10 9 বাইট

সিঙ্গেলটন 2 ডি অ্যারে হিসাবে রাজ্যগুলির I / O।

VÇí^Zé2)é

চেষ্টা করে দেখুন

VÇí^Zé2)é     :Implicit input of integer U=steps & array V=[states]
VÇ            :Modify the last element Z in V
  í           :Interleave with
    Zé2       :  Z rotated right twice and
   ^          :  Reduce each pair by XOR
       )      :End interleave
        é     :Rotate right once
              :Repeat U times and implicitly output V

2

রেটিনা , 51 বাইট

1A`
"$+"{`(.).*(.)
$2$&$1
(.)(?=.(\1|(.)))?
$#2*$#3

এটি অনলাইন চেষ্টা করুন! প্রথম লাইনে পদক্ষেপের সংখ্যা 0এবং 1দ্বিতীয় লাইনে গুলি এবং গুলি এর স্ট্রিং নেয়। ব্যাখ্যা:

1A`

ইনপুট থেকে পদক্ষেপের সংখ্যা মুছুন।

"$+"{

সেই সংখ্যাটি পুনরাবৃত্তি করুন।

`(.).*(.)
$2$&$1

মোড়কের সিমুলেট করার জন্য শেষের সংখ্যাগুলি অন্য প্রান্তে অনুলিপি করুন।

(.)(?=.(\1|(.)))?
$#2*$#3

এক্সওআর অপারেশন করুন।


2

এপিএল (ডায়ালগ প্রসারিত) , 12 বাইট এসবিসিএস

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

1(⌽≠⌽⍢⌽)⍣⎕⊢⎕

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

কনসোল থেকে মূল্যায়ন ইনপুট পান (রাজ্যের অ্যারে)

 তার উপর, প্রয়োগ করুন ...

1()⍣⎕ নিম্নলিখিত সূক্ষ্ম ফাংশন, প্রতিবার 1বাম যুক্তি হিসাবে ইনপুট সংখ্যা :

⌽⍢⌽ বিপরীত অবস্থায় ডান যুক্তিটি 1 ধাপ বামে ঘোরান (অর্থাত এক ধাপ ডানদিকে ঘোরান)

⌽≠ আর্গুমেন্টের সাথে এক্সওআরটি 1 পদক্ষেপ বামে ঘোরে





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