Class: TuringTarpit::Evaluator
- Inherits:
-
Object
- Object
- TuringTarpit::Evaluator
- Defined in:
- lib/turing_tarpit/evaluator.rb
Constant Summary collapse
- CELL_SIZE =
256
Instance Attribute Summary collapse
-
#pointer_position ⇒ Object
readonly
Returns the value of attribute pointer_position.
Class Method Summary collapse
Instance Method Summary collapse
- #cell_value ⇒ Object
- #cell_value=(value) ⇒ Object
- #decrement_cell_value ⇒ Object
- #decrement_pointer ⇒ Object
- #increment_cell_value ⇒ Object
- #increment_pointer ⇒ Object
-
#initialize ⇒ Evaluator
constructor
A new instance of Evaluator.
- #input_cell_value ⇒ Object
- #output_cell_value ⇒ Object
Constructor Details
#initialize ⇒ Evaluator
Returns a new instance of Evaluator.
15 16 17 18 |
# File 'lib/turing_tarpit/evaluator.rb', line 15 def initialize self.pointer_position = 0 self.cells = [] end |
Instance Attribute Details
#pointer_position ⇒ Object
Returns the value of attribute pointer_position.
20 21 22 |
# File 'lib/turing_tarpit/evaluator.rb', line 20 def pointer_position @pointer_position end |
Class Method Details
.run(interpreter) ⇒ Object
5 6 7 8 9 10 11 12 13 |
# File 'lib/turing_tarpit/evaluator.rb', line 5 def self.run(interpreter) evaluator = new loop do if operation = interpreter.next_operation(evaluator.cell_value) evaluator.send(operation) end end end |
Instance Method Details
#cell_value ⇒ Object
22 23 24 |
# File 'lib/turing_tarpit/evaluator.rb', line 22 def cell_value cells[pointer_position] ||= 0 end |
#cell_value=(value) ⇒ Object
26 27 28 29 30 |
# File 'lib/turing_tarpit/evaluator.rb', line 26 def cell_value=(value) raise InvalidValue unless valid_cell_value?(value) cells[pointer_position] = value end |
#decrement_cell_value ⇒ Object
36 37 38 |
# File 'lib/turing_tarpit/evaluator.rb', line 36 def decrement_cell_value self.cell_value = (cell_value - 1) % CELL_SIZE end |
#decrement_pointer ⇒ Object
44 45 46 47 48 |
# File 'lib/turing_tarpit/evaluator.rb', line 44 def decrement_pointer raise PointerBoundaryError unless pointer_position > 0 self.pointer_position = pointer_position - 1 end |
#increment_cell_value ⇒ Object
32 33 34 |
# File 'lib/turing_tarpit/evaluator.rb', line 32 def increment_cell_value self.cell_value = (cell_value + 1) % CELL_SIZE end |
#increment_pointer ⇒ Object
40 41 42 |
# File 'lib/turing_tarpit/evaluator.rb', line 40 def increment_pointer self.pointer_position = pointer_position + 1 end |
#input_cell_value ⇒ Object
54 55 56 57 58 59 |
# File 'lib/turing_tarpit/evaluator.rb', line 54 def input_cell_value value = $stdin.getch.ord return if value.zero? self.cell_value = value end |
#output_cell_value ⇒ Object
50 51 52 |
# File 'lib/turing_tarpit/evaluator.rb', line 50 def output_cell_value putc(cell_value) end |