คำถามติดแท็ก cellular-automata

ปริศนาที่เกี่ยวข้องกับเซลลูลาร์ออโตมาตะเช่นเกมแห่งชีวิตของคอนเวย์

5
จำลองหุ่นยนต์เซลลูล่าร์ 1D ใด ๆ
ความท้าทาย คุณต้องเขียนโปรแกรมที่สมบูรณ์ซึ่งใช้ตัวเลขเจ็ดตัวจาก STDIN และพิมพ์ประวัติสองมิติของหุ่นยนต์อัตโนมัติ (CA) ไปยัง STDOUT นี่คือรหัสกอล์ฟ การจัดรูปแบบ อินพุตอินพุตจะเป็นเจ็ดจำนวนเต็ม / สตริงคั่นด้วยเครื่องหมายจุลภาค หมายเลขแรกคือจำนวนของกฎตามรหัส Wolfram (ชื่อมาตรฐานสำหรับแต่ละกฎ) ประการที่สองคือการกำหนดค่าเริ่มต้นเริ่มต้น ที่สามและสี่อธิบายรูปแบบและจำนวนครั้งที่ควรผนวกเข้ากับด้านซ้ายของการกำหนดค่าเริ่มต้น เป็นช่องว่างภายใน ที่ห้าและหกทำเช่นเดียวกันสำหรับด้านขวา ตัวเลขสุดท้ายคือจำนวนรุ่นที่รันการจำลอง 90,11,0,4,0,4,5ดังนั้นตัวอย่างของการป้อนข้อมูลเป็น นี้ควรบอกโปรแกรมที่คุณกำลังเรียกใช้กฎ 90 นอกจากนี้ยังควรบอกโปรแกรมที่คุณต้องการกำหนดค่าเริ่มต้นที่จะ11มีสตริง0ผนวก 4 0000110000ครั้งเพื่อให้ปลายทั้งสองเพื่อให้รูปแบบเริ่มต้นที่เกิดขึ้นจริง นอกจากนี้ยังบอกให้โปรแกรมของคุณรันการจำลองนี้เป็นเวลา 5 ชั่วอายุ เอาท์พุทโปรแกรมของคุณควรพิมพ์อาร์เรย์ทั้งหมดของเซลล์แต่ละรุ่น (คั่นด้วยบรรทัดใหม่) เพื่อให้เอาต์พุตเป็นไดอะแกรมสเปซ - เวลาของ CA สำหรับแต่ละรุ่นสถานะของแต่ละเซลล์จะถูกกำหนดโดยสถานะและสถานะของเซลล์ไปทางซ้ายและขวาทันทีตามกฎที่ให้ไว้เป็นอินพุต การจำลองควรล้อมรอบขอบ สิ่งแรกที่พิมพ์ควรเป็นอาร์เรย์เริ่มต้นเป็น gen 0 อินพุต90,11,0,4,0,4,5ควรส่งผลให้ผลลัพธ์ต่อไปนี้ตรงตามที่เป็นไปได้ 0000110000 0001111000 0011001100 0111111110 1100000011 0110000110 โปรดสังเกตว่าสถานะเริ่มต้นจะไม่รวมอยู่ในห้าชั่วอายุคน สังเกตว่าการจำลองล้อมรอบขอบ ตัวอย่างเพิ่มเติม …

6
ไบนารีการหมุนด้วยตนเอง
กำหนดอาเรย์ไบนารี 3D สำหรับแต่ละเลเยอร์หมุนรอบแต่ละคอลัมน์เป็นขั้นตอนหลายขั้นตามที่ระบุโดยการเข้ารหัสไบนารีของคอลัมน์ของเลเยอร์ด้านบนแล้วหมุนวนซ้ายแต่ละแถวตามขั้นตอนตามที่กำหนดโดย การเข้ารหัสแบบไบนารีของแถวของเลเยอร์ด้านล่าง จะมีอย่างน้อยสามชั้นเสมอ คอลัมน์ของชั้นบนสุดและแถวของชั้นล่างไม่ควรหมุน เดินผ่าน เริ่มต้นด้วยอาร์เรย์ขนาดเล็ก 4 ชั้น 2 แถว 3 คอลัมน์: [[[1,0,1], [1,0,0]], [[1,0,1], [0,1,1]], [[0,1,1], [1,1,1]], [[1,1,0], [1,1,1]]] ขั้นตอนแรกคือการประเมินตัวเลขที่เข้ารหัสในเลขฐานสองโดยคอลัมน์และแถวของแต่ละชั้น: 3 0 2 5 [[[1,0,1], 4 [1,0,0]], 2 1 3 5 [[1,0,1], 3 [0,1,1]], 1 3 3 3 [[0,1,1], 7 [1,1,1]], 3 3 1 6 [[1,1,0], 7 …

6
โค่นล้มทราย
(มีคำถามที่เกี่ยวข้องเกี่ยวกับทรายแบบไม่สิ้นสุดและการค้นหาองค์ประกอบตัวตนของทราย ) ให้เมทริกซ์ของจำนวนเต็มไม่เป็นลบคืนเมทริกซ์ที่มีขนาดเท่ากัน แต่ล้มลง : ถ้าเมทริกซ์ไม่มีค่าใด ๆ ที่มากกว่า 4 ให้คืนค่า "เซลล์" ทุกอันที่มีขนาดใหญ่กว่า 3 จะลดลง 4 และเซลล์ที่อยู่ใกล้เคียงโดยตรง (ด้านบนด้านล่างซ้ายและขวา) จะเพิ่มขึ้นหากมีอยู่ GOTO 1 ตัวอย่าง: 0 1 0 0 2 0 2 4 0 -> 3 0 1 0 0 3 0 1 3 1 2 3 2 3 4 2 5 1 4 …

11
จำลองรูปแบบเกม 1D-Life-ish
คำถามนี้มีแนวโน้มที่จะทบทวนรหัสและฉันคิดว่าคุณอาจชอบมันดัดแปลงเป็นความท้าทาย codegolf: คุณได้รับรายชื่อบ้าน 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 เนื่องจากทั้งบ้านไปทางซ้ายและขวาไม่ได้ใช้งานทั้งคู่ เซลล์ที่ปลายทั้งสองตรวจสอบด้านตรงข้ามเช่นกันดังนั้นเพื่อนบ้านที่ดัชนี 0 จะอยู่ที่ดัชนีlength-1และ indexn1 และในทางกลับกัน แม้หลังจากอัพเดตเซลล์คุณต้องพิจารณาสถานะก่อนหน้าเมื่อทำการอัพเดตเซลล์อื่นเพื่อให้ข้อมูลสถานะของแต่ละเซลล์ถูกอัพเดตพร้อมกัน ฟังก์ชั่นใช้อาร์เรย์ของรัฐและจำนวนของขั้นตอนและควรส่งออกสถานะของบ้านหลังจากจำนวนขั้นตอนที่กำหนด input: states = [1, 0, 0, 0, …

2
เวิร์มของ Golf Paterson
หนอนของ Patersonเป็นหุ่นยนต์เซลลูล่าร์ชนิดหนึ่งที่มีอยู่บนกริดสามเหลี่ยมที่ไม่มีที่สิ้นสุดและทุกขั้นตอนพวกมันจะหมุนไปในทิศทางหนึ่ง คุณสมบัติที่กำหนดของพวกเขาคือพวกเขาไม่สามารถผ่านจุดเดิมได้สองครั้งและเมื่อใดก็ตามที่พวกเขาพบกับสภาพแวดล้อมเดียวกันพวกเขาก็ตัดสินใจเหมือนกัน หนอนจะ "มองเห็น" จากมุมมองของตัวเองเสมอโดยมีหางอยู่ที่ 3 และหัวของมันอยู่ตรงกลางของรูปหกเหลี่ยมนี้: ตัวอย่างเช่นพิจารณาหนอนด้วยกฎ: ถ้า 0, 1, 2, 4 และ 5 เป็นค่าว่างให้ย้ายไปในทิศทางที่ 2 ถ้า 0, 1, 4 และ 5 เป็นค่าว่างและเติม 2 ให้ย้ายไปในทิศทาง 0 หาก 0, 1 และ 5 เป็นค่าว่างและเติม 2 และ 4 ให้ย้ายในทิศทาง 0 ผลลัพธ์นี้ในเส้นทางต่อไปนี้ (จาก Wikipedia): หากเวิร์มพบว่าตัวเองอยู่ในสถานการณ์ที่สภาพแวดล้อมเต็มไปหมด อินพุต รายการตัวเลข หมายเลขที่ n ระบุว่าการตัดสินใจที่เวิร์มควรทำในสถานการณ์ใหม่ที่เกิดขึ้นนั้นต้องเผชิญกับการตัดสินใจที่ใด โปรดทราบว่าหากเต็ม แต่หนึ่งในสภาพแวดล้อมนั้นจะต้องย้ายไปในทิศทางเดียวที่ว่างเปล่า …

9
ติดตั้งหุ่นยนต์แปลก ๆ
ฉันกำลังเล่นกับหุ่นยนต์อัตโนมัติและฉันพบสิ่งที่มีพฤติกรรมที่น่าสนใจ นี่คือวิธีการทำงาน: มันอ่านสตริงไบนารีจากซ้ายไปขวาหากพบ1ตามด้วย2ค่าอื่น ๆ มันจะผนวก0กับผลและอ่านต่อ หากพบ0(หรือมีเหลือน้อยกว่า 3 ค่า) มันจะผนวกค่าปัจจุบันและ a 1และอ่านต่อ ในตอนท้ายของสตริงมันจะผนวกหนึ่ง1กับผลลัพธ์ นี่เป็นตัวอย่างผลงานของรุ่นหนึ่ง 01011111 ^ เราพบกันครั้งแรก0ดังนั้นเราจึงต่อท้าย01ผลลัพธ์ของเรา 01011111 ^ 01 ตอนนี้เราได้พบกับ1ดังนั้นเราจึงผนวกศูนย์และข้ามค่าสองค่าถัดไป 01011111 ^ 010 เราพบกัน1ดังนั้นเราทำแบบเดียวกัน 01011111 ^ 0100 ตอนนี้เรามีพื้นที่อื่น1แต่ไม่เพียงพอที่จะข้ามดังนั้นเราจึงผนวกเซลล์ปัจจุบันและ a 1(ในกรณีนี้11) 01011111 ^ 010011 เราอยู่ท้ายแล้วเราจึงผนวกหนึ่ง1และยุติรุ่นนี้ 01011111 ^ 0100111 งาน การป้อนข้อมูลให้ในรูปแบบที่สมเหตุสมผลคุณต้องสร้างฟังก์ชั่นหรือโปรแกรมที่คำนวณหุ่นยนต์รุ่นหนึ่ง นี่เป็นคำถามเกี่ยวกับรหัสกอล์ฟดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยมีจำนวนไบต์น้อยกว่าดีกว่า การใช้งานตัวอย่าง นี่คือตัวอย่างการใช้งานใน Haskell (กำหนดฟังก์ชั่นdแต่โปรแกรมจะพิมพ์การทำซ้ำไปเรื่อย ๆ ): d('1':_:_:x) = "0" ++ …

4
เกมแห่งชีวิตและความเหนื่อยล้า
เกมสตีวีของชีวิตและความเมื่อยล้าค่อนข้างคล้ายกับที่มีชื่อเสียงมากขึ้นเกมคอนเวย์ของชีวิต จักรวาลของเกมแห่งชีวิตและความเหนื่อยล้าของ Stewie (GoLF) เป็นกริด orthogonal สองมิติที่ไม่มีที่สิ้นสุดของสแควร์เซลล์ซึ่งแต่ละแห่งอยู่ในหนึ่งในสามสถานะที่เป็นไปได้มีชีวิตอยู่ตายหรือเหนื่อย ทุกเซลล์มีปฏิสัมพันธ์กับแปดเพื่อนบ้านซึ่งเป็นเซลล์ที่อยู่ในแนวนอนแนวตั้งหรือแนวทแยงมุม ในแต่ละขั้นตอนการเปลี่ยนภาพต่อไปนี้จะเกิดขึ้น: เซลล์ที่มีชีวิตใด ๆ ที่มีเพื่อนบ้านที่มีชีวิตน้อยกว่าสองคนตายราวกับว่าเกิดจากการมีประชากรน้อย เซลล์ที่มีชีวิตใด ๆ ที่มีสองหรือสามเพื่อนบ้านอาศัยอยู่ไปยังรุ่นต่อไป เซลล์ที่มีชีวิตใด ๆ ที่มีเพื่อนบ้านที่มีชีวิตมากกว่าสามคนจะตายไปราวกับว่ามีจำนวนประชากรมากเกินไป เซลล์ที่ตายแล้วใด ๆ ที่มีเพื่อนบ้านที่มีชีวิตสามคนจะกลายเป็นเซลล์มีชีวิตราวกับว่าได้รับการสืบพันธุ์ เซลล์ใด ๆ ที่มีชีวิตอยู่สำหรับสองชั่วอายุคนติดต่อกันจะตายราวกับว่าล้า มันไม่สามารถปลุกชีวิตอีกครั้งจนกว่าคนรุ่นต่อไป เซลล์ใด ๆ ที่อยู่นอกขอบเขตของกริดอินพุตจะตายเช่นเดียวกับที่ตกลงมาจากหน้าผา ท้าทาย: ความท้าทายของคุณคือการใช้กริดของขนาดn-by-m ซึ่งแสดงสถานะเริ่มต้นของ GoLF และจำนวนเต็มpและแสดงสถานะของเกมหลังรุ่นp กฎ: รูปแบบอินพุตและเอาต์พุตเป็นทางเลือก แต่กริดอินพุต / เอาต์พุตควรมีการแทนค่าเดียวกัน คุณสามารถเลือกสัญลักษณ์ที่พิมพ์ได้เพื่อแสดงเซลล์ที่มีชีวิตและเซลล์ที่ตายแล้ว (ฉันจะใช้1สำหรับเซลล์ที่มีชีวิตและ0เซลล์ที่ตายแล้ว) คุณสามารถเลือกได้ถ้าคุณมีดัชนี 0 หรือ 1 ในตัวอย่างp=1หมายถึงสถานะหลังจากหนึ่งขั้นตอน รหัสสั้นที่สุดในแต่ละภาษาชนะ อนุญาตให้ใช้ฟังก์ชันในตัวสำหรับระบบเซลลูลาร์อัตโนมัติ กรณีทดสอบ: ในตัวอย่างที่เราได้รวมเพียงตารางการป้อนข้อมูลในการป้อนข้อมูลที่ไม่พี ผมได้ให้ผลต่างๆP …

3
การระบุลำดับสำหรับ Cellular Automata
พื้นหลัง สำหรับจุดประสงค์ของการท้าทายนี้ออnโตมาตาเซลลูลาร์เป็นเพียงฟังก์ชันเลขฐานสองfที่ใช้ตัวเลขสองตัวจากสถานะที่ตั้ง{0, 1, ..., n-1}เป็นอินพุตและส่งกลับตัวเลขอื่นจากชุดนั้นเป็นเอาต์พุต สามารถนำไปใช้กับรายการที่มีความยาวอย่างน้อย 2 ตัวL = [x0, x1, x2, ..., xk-1] f(L) = [f(x0, x1), f(x1, x2), f(x2, x3), ..., f(xk-2, xk-1)] โปรดทราบว่ารายการผลลัพธ์มีองค์ประกอบน้อยกว่าองค์ประกอบเดิมหนึ่งรายการ แผนภาพกาลอวกาศของfเริ่มต้นจากการLเป็นรายการของรายการที่ได้รับด้วยซ้ำใช้fไปLและเก็บรวบรวมผลในรายการ รายการสุดท้ายมีความยาว 1. เราบอกว่ารายการLเป็นลำดับที่ระบุสำหรับถ้าทุกรายการสององค์ประกอบมากกว่าชุดที่รัฐเป็นรายการย่อยที่อยู่ติดกันแถวของกาลอวกาศแผนภาพที่เริ่มต้นจากบางส่วนf Lนี่เทียบเท่ากับเงื่อนไขที่ไม่มีnแคลิฟอร์เนีย -state อื่นมีไดอะแกรม spacetime ที่แน่นอน อินพุต ปัจจัยการผลิตของคุณเป็นn-by- nเมทริกซ์จำนวนเต็มMรายชื่อของจำนวนเต็มLของความยาวอย่างน้อย 2 nและเลือกหมายเลข เมทริกซ์Mกำหนดn-state CA fโดยf(a,b) = M[a][b](ใช้การจัดทำดัชนีแบบ 0) มันรับประกันได้ว่าn > 0และที่MและLมีองค์ประกอบของชุดรัฐ{0, 1, …

2
นักประวัติศาสตร์ภาษี
บทนำ มีผู้เก็บภาษีที่มีปัญหาในการจัดการภาษีในราชอาณาจักรของเขา: บันทึกทางประวัติศาสตร์ได้ถูกไฟไหม้ครั้งใหญ่ เขาต้องการค้นหาว่ามีอดีตที่เป็นไปได้มากเพียงใดในแง่ที่ว่าเงินในปัจจุบันได้รับมาจากไหน โชคดีที่อาณาจักรของเขาเรียบง่ายมาก ราชอาณาจักรสามารถสร้างแบบจำลองโดยเมทริกบูลีน 2D ซึ่งlหมายถึงคนที่ได้รับมรดกและOเป็นตัวแทนของคนที่ไม่มี ตัวอย่างเช่น: l O l l O O O l l O l O O O O l (มันจะเป็นรูปสี่เหลี่ยมผืนผ้าเสมอ) ในรุ่นต่อไปราชอาณาจักรนั้นเล็กกว่า (หมาป่านั้นแข็งแกร่ง!) รุ่นต่อไปจะมีลักษณะเช่นนี้ซ้อนทับกับรุ่นก่อนหน้า ( xเป็นตัวยึดตำแหน่งสำหรับรุ่นถัดไปในรุ่นถัดไป) l O l l x x x O O O l x x x l O l O x …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.