class Base80
@@symbols = "!()*,-.0123456789:;@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"
@@radix = @@symbols.length
@int = 0
@str = "!"
def self.symbols
@@symbols
end
def self.radix
@@radix
end
def self.symbols_valid?(number)
!!(number =~ Regexp.new("^[" << @@symbols.gsub(/[\[\]]/) {|m| "\\" << m } << "]*$"))
end
def self.itos(number)
number = number.to_i
return @@symbols[0, 1] if number.zero?
res = ""
until number.zero?
index = number % @@radix
number = number / @@radix
res = @@symbols[index, 1] + res
end
res
end
def self.stoi(number)
number = number.dup.to_s.split(//)
res = 0
until number.length.zero?
char = number.shift
index = @@symbols.index(char)
res *= @@radix
res += index
end
res
end
def initialize(number)
if number.is_a?(Fixnum)
@int = number.to_i
@str = self.class.itos(@int)
elsif self.class.symbols_valid?(number.to_s)
@str = number.to_s
@int = self.class.stoi(@str)
else
raise "Not an Integer or a radix #{@@radix} number"
end
end
def radix
@@radix
end
def to_i
@int
end
def to_s
@str
end
end
Note: You are viewing an old version of this page. View the current version.
