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