class Orenono::Generator
Brainf*ck code generator
Attributes
config[R]
init_codes[R]
pointer[R]
tables[R]
Public Class Methods
generate(text, config)
click to toggle source
# File lib/generator.rb, line 11 def self.generate(text, config) bytes = text.bytes.to_a bf = new(bytes[0], config) bytes.each_with_object([bf.init_codes]) do |char, codes| codes << bf.diff(char) codes << bf.output end.join end
new(char, config)
click to toggle source
# File lib/generator.rb, line 20 def initialize(char, config) char_code = char repeat = char_code / 10 rest = char_code % 10 @tables = [] @pointer = 0 @config = config @init_codes = ten_increment(config) + config.start_loop + config.next_cursol + increment(repeat) + config.previous_cursol + config.decrement + config.end_loop + config.next_cursol + increment(rest) @tables[@pointer] = char_code end
Public Instance Methods
decrement(count = 1)
click to toggle source
# File lib/generator.rb, line 45 def decrement(count = 1) @tables[@pointer] -= count @config.decrement * count end
diff(char_code)
click to toggle source
# File lib/generator.rb, line 50 def diff(char_code) diff_of_code = char_code - @tables[@pointer] return '' if diff_of_code.zero? @tables[@pointer] += diff_of_code diff_of_code > 0 ? (@config.increment * diff_of_code) : (@config.decrement * diff_of_code.abs) end
increment(count = 1)
click to toggle source
# File lib/generator.rb, line 39 def increment(count = 1) @tables[@pointer] = 0 unless @tables[@pointer] @tables[@pointer] += count @config.increment * count end
next_pointer(count = 1)
click to toggle source
# File lib/generator.rb, line 57 def next_pointer(count = 1) @pointer += count @config.next_cursol * count end
output(count = 1)
click to toggle source
# File lib/generator.rb, line 67 def output(count = 1) @config.display * count end
previous_pointer(count = 1)
click to toggle source
# File lib/generator.rb, line 62 def previous_pointer(count = 1) @pointer -= count @config.previous_cursol * count end
Private Instance Methods
ten_increment(config)
click to toggle source
# File lib/generator.rb, line 73 def ten_increment(config) config.increment * 10 end