Differences between version 2 and previous revision of KnowledgeBase/Scripts/Base80.rb.
Other diffs: Previous Major Revision, Previous Author
Newer page: | version 2 | Last edited on Sunday, 14 March 2010 22:53:05 | by CyberLeo | Revert |
Older page: | version 1 | Last edited on Sunday, 14 March 2010 22:51:51 | by CyberLeo | Revert |
@@ -63,7 +63,11 @@
end
def to_s
@str
+ end
+
+ def zero?
+ @int.zero?
end
end
</code>
version 2
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 def zero? @int.zero? end end