Class: MinerMover::Miner

Inherits:
Worker
  • Object
show all
Defined in:
lib/miner_mover/worker.rb

Instance Attribute Summary collapse

Attributes inherited from Worker

#debugging, #logging, #timer, #variance

Instance Method Summary collapse

Methods inherited from Worker

#debug, #id, #log, #to_s, #varied

Constructor Details

#initialize(depth: 5, partial_reward: false, variance: 0, logging: false, debugging: false, timer: nil) ⇒ Miner

Returns a new instance of Miner.



80
81
82
83
84
85
86
87
88
89
90
# File 'lib/miner_mover/worker.rb', line 80

def initialize(depth: 5,
               partial_reward: false,
               variance: 0,
               logging: false,
               debugging: false,
               timer: nil)
  @partial_reward = partial_reward
  @depth = depth
  super(variance: variance, timer: timer,
        logging: logging, debugging: debugging)
end

Instance Attribute Details

#depthObject

Returns the value of attribute depth.



78
79
80
# File 'lib/miner_mover/worker.rb', line 78

def depth
  @depth
end

#partial_rewardObject

Returns the value of attribute partial_reward.



78
79
80
# File 'lib/miner_mover/worker.rb', line 78

def partial_reward
  @partial_reward
end

Instance Method Details

#mine_ore(depth = @depth) ⇒ Object

wrap the above method with logging, timing, and summing



107
108
109
110
111
112
113
114
# File 'lib/miner_mover/worker.rb', line 107

def mine_ore(depth = @depth)
  log format("MINE Depth %i", depth)
  ores, elapsed = Timer.elapsed { self.mine_ores(depth) }
  total = ores.sum
  log format("MIND %s %s (%.2f s)",
             Ore.display(total), ores.inspect, elapsed)
  total
end

#mine_ores(depth = @depth) ⇒ Object

return an array of integers representing ore mined at each depth



97
98
99
100
101
102
103
104
# File 'lib/miner_mover/worker.rb', line 97

def mine_ores(depth = @depth)
  # every new depth is a new mining operation
  Array.new(depth) { |d|
    # mine ore by calculating fibonacci for that depth
    mined = MinerMover.fib(self.varied(d).round)
    @partial_reward ? rand(1 + mined) : mined
  }
end

#stateObject



92
93
94
# File 'lib/miner_mover/worker.rb', line 92

def state
  super.merge(depth: @depth, partial_reward: @partial_reward)
end