Skip to content

Instantly share code, notes, and snippets.

@simonszu
Created June 16, 2015 17:45
Show Gist options
  • Select an option

  • Save simonszu/d326129774b07124d454 to your computer and use it in GitHub Desktop.

Select an option

Save simonszu/d326129774b07124d454 to your computer and use it in GitHub Desktop.
Attempt to create an Ook/Hut/Brainfuck-Interpreter in Ruby
#! /usr/bin/env ruby
code = "Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut! Hut? Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut? Hut. Hut? Hut. Hut? Hut. Hut? Hut. Hut? Hut. Hut? Hut. Hut! Hut! Hut? Hut! Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut! Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut! Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut! Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut! Hut. Hut? Hut. Hut? Hut. Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut! Hut. Hut. Hut? Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut. Hut? Hut. Hut! Hut! Hut! Hut. Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut! Hut. Hut. Hut? Hut. Hut? Hut. Hut. Hut. Hut. Hut! Hut. Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut! Hut. Hut? Hut. Hut? Hut. Hut? Hut. Hut! Hut. Hut! Hut. Hut? Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut. Hut! Hut. Hut. Hut? Hut. Hut? Hut! Hut. Hut? Hut. Hut? Hut. Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut! Hut. Hut. Hut. Hut! Hut. Hut. Hut? Hut! Hut! Hut! Hut! Hut! Hut. Hut. Hut. Hut. Hut. Hut! Hut. Hut? Hut. Hut! Hut. Hut. Hut? Hut. Hut. Hut! Hut."
keyword = "Hut"
# Remove all keywords and whitespaces from the code, so that only punctuation marks are left
code.gsub!(keyword, "")
code.gsub!(/\s+/, "")
# Converts the codestring to an array
newCode = code.split ""
# Defines a new array where to store the commands
codeArr = []
# Splits the remaining code in groups of 2 and appends them to the array of commands
newCode.each_index do |i|
if i.even?
codeArr.push(newCode[i]+newCode[i-1])
end
end
# Defines an Array where to put the calculated values
valueArr = []
# Cycles through the codeArr and interprets the Commands
codeArr.each do |cmd|
if cmd.eql? ".."
puts "Increments value"
elsif cmd.eql? "!!"
puts "Decrements value"
elsif cmd.eql? ".?"
puts "Pointer to right"
elsif cmd.eql? "?."
puts "Pointer to left"
elsif cmd.eql? "!?"
puts "Start loop"
elsif cmd.eql? "?!"
puts "End loop"
elsif cmd.eql? "!."
puts "Print value"
elsif cmd.eql? ".!"
puts "Read value"
else
puts "Unknown command"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment