CCC 2016: Vòng tròn cuộc sống


8

Trước khi tôi bắt đầu, thử thách này không phải của tôi ban đầu

Tín dụng cho Đại học Waterloo. Điều này xuất phát từ Cuộc thi Điện toán Canada 2016, Vấn đề cao cấp 5. Đây là một liên kết có thể nhấp vào cuộc thi PDF:

http://cemc.uwaterloo.ca/contests/computing/2016/stage%201/seniorEn.pdf

Đây là một liên kết đến trang web:

http://cemc.uwaterloo.ca/contests/past_contests.html

Thử thách

Đưa ra một mảng bao gồm hai giá trị không đổi, xác định cấu hình sau khi ntiến hóa cho đầu vào số nguyên dương n. Hai giá trị này đại diện cho một tế bào sống và một tế bào chết. Evolutions hoạt động như thế này:

Sự phát triển!

Sau mỗi lần lặp, một ô còn sống nếu nó có chính xác một hàng xóm còn sống trong lần lặp trước đó. Ít hơn và nó chết vì cô đơn; bất kỳ và nó chết vì quá đông. Vùng lân cận là độc quyền: tức là mỗi ô có hai hàng xóm chứ không phải ba.

Ví dụ, chúng ta hãy xem làm thế nào 1001011010sẽ phát triển, 1một tế bào sống và 0một tế bào chết ở đâu.

(0) 1 0 0 1 0 1 1 0 1 0 (1)
    *   $         %

Tế bào ở *có một tế bào chết ở cả hai phía của nó để nó chết vì cô đơn.
Tế bào ở $có một tế bào sống ở một bên của nó và một tế bào chết ở phía bên kia. Nó trở nên sống động.
Các cel tại %có một tế bào sống ở cả hai phía của nó để nó chết vì quá đông.

Tiêu chí chiến thắng

Mã ngắn nhất sẽ thắng.

Tôi / O

Đầu vào sẽ là một danh sách các trạng thái ô là hai giá trị nhất quán và một số nguyên biểu thị số lượng đầu vào, ở một số định dạng hợp lý. Đầu ra là một danh sách các trạng thái ô sau số lần lặp được chỉ định.

Các trường hợp thử nghiệm

start, iterations -> end
1001011010, 1000 -> 1100001100
100101011010000, 100 -> 000110101001010
0000000101011000010000010010001111110100110100000100011111111100111101011010100010110000100111111010, 1000 -> 1001111111100010010100000100100100111010010110001011001101010111011011011100110110100000100011011001

Test Case Trường hợp
thử nghiệm này đóng băng hastebin và vượt quá giới hạn kích thước trên pastebin


2
Tôi không nghĩ rằng điều này nên được gắn thẻ là mã golf nếu số byte chỉ là một công cụ bẻ khóa. Tôi cũng không chắc liệu đó có phải là một bản bẻ khóa tốt hay không, vì cuộc thi sẽ thoái hóa thành một cuộc thi golf mã nếu bạn có thể chuyển câu trả lời sang một ngôn ngữ ngắn gọn hơn để giành chiến thắng.
Dennis

@Dennis Phải, tôi sẽ xóa thẻ. Bạn đề nghị gì cho tiebreaking sau đó; nộp sớm nhất là một trong những ý tưởng của tôi.
HyperNeutrino

2
Tôi đang bỏ phiếu là không rõ ràng vào lúc này vì không thể biết được sự phức tạp có nghĩa là gì khi có nhiều tham số.
frageum

1
@feersum, có một chút chơi trong thuật toán nhanh nhất . Thuật toán ngây thơ lấy Theta(nt)đâu nlà độ dài của mảng và tlà số lần tiến hóa; một thuật toán nhanh hơn mất Theta(n lg t).
Peter Taylor

1
@ Notts90 Tôi hy vọng bản chỉnh sửa mới nhất của tôi làm rõ hơn.
HyperNeutrino

Câu trả lời:


6

APL (Dyalog) , 14 byte

Nhắc về trạng thái bắt đầu dưới dạng danh sách Boolean và sau đó cho số lần lặp

(1∘⌽≠¯1∘⌽)⍣⎕⊢⎕

Hãy thử trực tuyến!

 dấu nhắc số (cho danh sách Boolean của trạng thái bắt đầu)

 trên đó, áp dụng

(... )⍣⎕ chức năng ngầm sau, lần số nhắc

¯1∘⌽ đối số xoay một bước đúng

 khác với (XOR)

1∘⌽ đối số xoay một bước còn lại



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.