回答編集履歴

1

サンプル追記

2018/09/02 14:12

投稿

otn
otn

スコア84421

test CHANGED
@@ -1,3 +1,91 @@
1
1
  面を一面しか持ってないように見えますが?
2
2
 
3
3
  今の面と、次の時点の面の、2面は最低必要ですよ。
4
+
5
+ #追記
6
+
7
+ Rubyですが、書いてみました。
8
+
9
+ ```Ruby
10
+
11
+ data = <<EOF
12
+
13
+ ++++++++++
14
+
15
+ ++++++++++
16
+
17
+ +++OOOO+++
18
+
19
+ ++++++++++
20
+
21
+ ++++++++++
22
+
23
+ EOF
24
+
25
+
26
+
27
+ board = data.split(/\n/).map{|x| x.split(//)}
28
+
29
+
30
+
31
+ Y = board.size
32
+
33
+ X = board[0].size
34
+
35
+
36
+
37
+ def alive(board,y,x)
38
+
39
+ return 0 if x<0 or x>=X or y<0 or y>=Y
40
+
41
+ board[y][x] == "O" ? 1 : 0
42
+
43
+ end
44
+
45
+
46
+
47
+ def update(t0, t1)
48
+
49
+ (0...Y).each do |i|
50
+
51
+ (0...X).each do |j|
52
+
53
+ life = alive(t0,i-1,j-1)+alive(t0,i-1,j)+alive(t0,i-1,j+1)+
54
+
55
+ alive(t0,i ,j-1)+ alive(t0,i ,j+1)+
56
+
57
+ alive(t0,i+1,j-1)+alive(t0,i+1,j)+alive(t0,i+1,j+1)
58
+
59
+ t1[i][j] =
60
+
61
+ case life
62
+
63
+ when 2 then t0[i][j]
64
+
65
+ when 3 then "O"
66
+
67
+ else "+"
68
+
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+
77
+
78
+
79
+ while gets == "\n"
80
+
81
+ puts board.map{|x| x.join}
82
+
83
+ next_board = Array.new(Y){Array.new(X)}
84
+
85
+ update(board, next_board)
86
+
87
+ board = next_board
88
+
89
+ end
90
+
91
+ ```