-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmastermind.rb
More file actions
75 lines (62 loc) · 1.73 KB
/
Copy pathmastermind.rb
File metadata and controls
75 lines (62 loc) · 1.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
require 'sinatra'
# Use cookies for session. Set expiration for 1 day
use Rack::Session::Pool, :expire_after => 86400
# Route GET
get '/' do
if session[:code] == nil
session[:code] = generate_code()
session[:guesses] = []
session[:results] = []
session[:end?] = false
end
puts "first"
erb :index
end
post '/' do
input = [params[:color_0].to_i, params[:color_1].to_i, params[:color_2].to_i, params[:color_3].to_i]
result = check_secret_code(input, session[:code])
session[:guesses] << input
session[:results] << result
if result.all? { |n| n == 2 } || session[:guesses].length == 10
session[:end?] = true
end
erb :index
end
get '/new' do
session[:code] = nil
puts "here"
redirect to('/')
end
private
# Method to create a random code
def generate_code
secret_code = []
4.times {secret_code << rand(6)}
return secret_code
end
# Analyzes a given code and returns results
# 0 = wrong piece
# 1 = right piece, wrong place
# 2 = right piece, right place
def check_secret_code(input, code)
correct_guess_right_place = 0
correct_guess_wrong_place = 0
aux_secret_code = Array.new(code)
input.each_with_index do |x, idx|
if x == aux_secret_code[idx]
correct_guess_right_place += 1
aux_secret_code[idx] = nil
elsif aux_secret_code.include? (x)
index_of_x = aux_secret_code.index(x)
if aux_secret_code[index_of_x] != input[index_of_x]
correct_guess_wrong_place += 1
aux_secret_code[index_of_x] = nil
end
end
end
aux_results = []
correct_guess_right_place.times { aux_results << 2 }
correct_guess_wrong_place.times { aux_results << 1 }
(4 - correct_guess_right_place - correct_guess_wrong_place).times { aux_results << 0 }
return aux_results
end