main
1require "spec_helper"
2
3def print_maze(maze)
4 puts "\e[H\e[2J"
5 p " ||A||B||C||D||E||F||G||H||"
6 8.times do |n|
7 result = "#{n+1}|"
8 maze.each do |column|
9 result += "|#{column[n]}|"
10 end
11 p result + "|"
12 end
13end
14
15def explore_maze(maze, x, y)
16 print_maze(maze)
17 return false if y > 7 || y < 0 || x < 0 || x > 7
18 return false if maze[x][y] == "*" || maze[x][y] == "X"
19 return true if maze[x][y] == "E"
20 maze[x][y] = "X"
21 return true if explore_maze(maze, x, y-1) # up
22 return true if explore_maze(maze, x+1, y) # right
23 return true if explore_maze(maze, x, y+1) # down
24 return true if explore_maze(maze, x-1, y) # left
25 return false
26end
27
28def is_maze_solveable(maze)
29 start_x = start_y = nil
30 8.times do |x|
31 8.times do |y|
32 if maze[x][y] == 'S'
33 start_x = x
34 start_y = y
35 end
36 end
37 end
38 return false unless start_x
39 explore_maze(maze, start_x, start_y)
40end
41
42describe "maze" do
43 it "is solvable" do
44 maze = Array.new(8) { Array.new(8) { " " } }
45 8.times { |n| maze[n][0] = "*" if (0...5).include?(n) } # row 1
46 maze[0][1] = maze[4][1] = "*" # row 2
47 maze[0][2] = maze[2][2] = maze[3][2] = maze[4][2] = "*" # row 3
48 maze[0][3] = maze[4][3] = maze[5][3] = maze[6][3] = maze[7][3] = "*" # row 4
49 maze[0][4] = maze[2][4] = maze[7][4] = "*" # row 5
50 maze[0][5] = maze[4][5] = maze[7][5] = "*" # row 6
51 maze[0][6] = maze[1][6] = maze[2][6] = maze[3][6] = maze[4][6] = maze[7][6] = "*" # row 7
52 maze[4][7] = maze[5][7] = maze[6][7] = maze[7][7] = "*" # row 8
53
54 maze[1][2] = "S"
55 maze[6][6] = "E"
56 print_maze(maze)
57
58 expect(is_maze_solveable(maze)).to be_truthy
59 end
60end