prisoner_puzzle 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c23ea65d1c4f3e0dfd349f46058ac24744226b46
4
- data.tar.gz: 3bea6176d0b2fe03db13615cc16abfbf39ac5bd9
3
+ metadata.gz: b83b9436d9e8882da9bb631bcf978644916c4798
4
+ data.tar.gz: 7aea9cd1e465cb99b803fec311b63d5602bcb00a
5
5
  SHA512:
6
- metadata.gz: 3c89e4b054bd63829d3bfd6ec0c2bfb9d1066804903f58275ed3e298f1046cef9e14660f894a64ffd47f7a3f1a412a01968604e0679a8aec454eff810de41708
7
- data.tar.gz: ea993b8800b4bf372e130391cbed17d15cec71b7ea7472aaa782a808df978a7b06ce287dbfc5e04b316edaf1c459001a2c9d8abd11c487856a0ed26fc3cb5ffa
6
+ metadata.gz: 04a650f289690a7dd96a2e367c3c2f07f807f2ccf590d94ed99063961ce117664ad508b49b98cb01fcca6e5cde61a5c1cfb3f8c601c2005b4ade1e3f25ccc56f
7
+ data.tar.gz: 3a16603c0f151e7d72850ba741cab18e507d4a488ab9c4756f3c5066c332f3167117bfe967ed99a7c0da3226a0c669a4bb7f8085066b45811980bbf95f7378e9
data/lib/prisoner.rb CHANGED
@@ -1,17 +1,24 @@
1
1
  class Prisoner
2
- attr_accessor :have_flipped, :leader, :warden
3
- def initialize switchbox, prisoner_count, leader = false
2
+ attr_writer :warden
3
+ attr_accessor :have_flipped, :leader, :id, :fool
4
+ def initialize switchbox=nil, prisoner_count=0, leader = false, fool = false, foolishness = 0
4
5
  @have_flipped = false
5
6
  @switchbox = switchbox
6
7
  @leader = leader
7
8
  @warden = nil
8
9
  @prisoner_count = prisoner_count
9
10
  @count = 0
11
+ @fool = fool
12
+ @foolishness = foolishness
13
+ @id = nil
10
14
  end
11
15
 
12
16
  def visit
13
17
  if @leader
14
- if @count == @prisoner_count + 1
18
+ if @fool and rand(100)+1 < @foolishness
19
+ @count += 1
20
+ end
21
+ if @count >= @prisoner_count + 1
15
22
  puts "I am the leader of this prison gang, and I say we are free."
16
23
  self.declare_finished(@warden)
17
24
  elsif @switchbox.left == :OFF
@@ -30,12 +37,16 @@ class Prisoner
30
37
  puts "New room!"
31
38
  else
32
39
  @switchbox.right_flip
33
- puts "Oh. This room again."
40
+ print "."
41
+ end
42
+ if @fool and rand(100)+1 < @foolishness
43
+ have_flipped = false
34
44
  end
35
45
  end
36
46
  end
37
47
 
38
48
  def declare_finished warden
39
49
  warden.finish
50
+ @count = 0
40
51
  end
41
52
  end
@@ -3,13 +3,35 @@ require './warden.rb'
3
3
  require './switchbox.rb'
4
4
 
5
5
  class PrisonerPuzzle
6
- def initialize
6
+ attr_accessor :warden_gentles
7
+ def initialize num_of_prisoners=23, time=72, fools=0, foolishness=0
7
8
  box = Switchbox.new
8
9
  prisoners = []
9
- 23.times { prisoners.push(Prisoner.new(box, 23))}
10
+ (num_of_prisoners-fools).times { prisoners.push(Prisoner.new(box, num_of_prisoners))}
11
+ fools.times { prisoners.push(Prisoner.new(box, num_of_prisoners, false, true, foolishness))}
12
+ n = 0
13
+ prisoners.each do |p|
14
+ p.id = n
15
+ n += 1
16
+ end
10
17
  @warden_gentles = Warden.new(prisoners)
11
- prisoners[1].leader = true
12
- prisoners.each {|p| p.warden = @warden_gentles}
18
+ @warden_gentles.period = time
19
+ prisoners.sample.leader = true
20
+
21
+ prisoners.each do |p|
22
+ p.warden = @warden_gentles
23
+ end
24
+
25
+ prisoners.each do |p|
26
+ if p.leader
27
+ if p.fool
28
+ puts "Durr, I'm the leader"
29
+ else
30
+ puts "I am Prisoner ##{p.id}, and I am the leader."
31
+ end
32
+ end
33
+ end
34
+
13
35
  end
14
36
 
15
37
  def run
@@ -17,5 +39,8 @@ class PrisonerPuzzle
17
39
  @warden_gentles.take_into_room
18
40
  end
19
41
  puts "That took a total of #{@warden_gentles.hours_elapsed/24} days."
42
+ @warden_gentles.done = false
43
+ @warden_gentles.hours_elapsed = 0
44
+ @warden_gentles.visited.fill(false)
20
45
  end
21
46
  end
data/lib/warden.rb CHANGED
@@ -1,20 +1,22 @@
1
1
  class Warden
2
- attr_accessor :roster, :visited, :done, :hours_elapsed
2
+ attr_accessor :roster, :prisoners, :visited, :done, :hours_elapsed, :period, :done
3
3
  def initialize *prisoners
4
4
  @roster = []
5
- @visited = {}
6
- prisoners.each do |p|
5
+ @visited = []
6
+ prisoners.flatten.each do |p|
7
7
  @roster.push(p)
8
- @visited[p] = false
8
+ @visited[p.id] = false
9
9
  end
10
10
  @done = false
11
11
  @hours_elapsed = 0
12
+ @period = 0
12
13
  end
13
14
 
14
15
  def take_into_room
15
16
  selectee = @roster.flatten.sample
16
17
  selectee.visit
17
- @hours_elapsed += rand(73)
18
+ @visited[selectee.id.to_i] = true
19
+ @hours_elapsed += rand(@period+1)
18
20
  end
19
21
 
20
22
  def finish
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prisoner_puzzle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Whitehead
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-11 00:00:00.000000000 Z
11
+ date: 2013-12-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: "Simulation of the 100 prisoners and a light switch logic puzzle. \n
14
14
  \ \t\t\t\t This gem simulates that experiment with 23 prisoners implementing the