Differences between version 6 and previous revision of KnowledgeBase/Scripts/Base80.rb.
Other diffs: Previous Major Revision, Previous Author
| Newer page: | version 6 | Last edited on Sunday, 14 March 2010 23:38:31 | by CyberLeo | Revert |
| Older page: | version 5 | Last edited on Sunday, 14 March 2010 23:27:21 | by CyberLeo | Revert |
@@ -44,9 +44,9 @@
end
module_function :stoi
def initialize(number = 0)
- if number.is_a?(Fixnum)
+ if number.is_a?(Fixnum) || number.is_a?(Bignum
)
@int = number.to_i
@str = itos(@int)
elsif symbols_valid?(number.to_s)
number = transform(number) if respond_to?(:transform)
@@ -68,8 +68,10 @@
def zero?
@int.zero?
end
end
+
+# Examples:
class Base16
def symbols
"0123456789ABCDEF"
version 6
module GenericRadix
# Define symbols to be your alphabet
# Define transform to transform the string before and after conversion
@int = 0
@str = ""
def radix
@radix ||= symbols.length
end
module_function :radix
def symbols_valid?(number)
number = transform(number) if respond_to?(:transform)
( number.split(//) - symbols.split(//) ).empty?
end
module_function :symbols_valid?
def 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 = transform(res) if respond_to?(:transform)
res
end
module_function :itos
def stoi(number)
number = transform(number) if respond_to?(:transform)
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
module_function :stoi
def initialize(number = 0)
if number.is_a?(Fixnum) || number.is_a?(Bignum)
@int = number.to_i
@str = itos(@int)
elsif symbols_valid?(number.to_s)
number = transform(number) if respond_to?(:transform)
@str = number.to_s
@int = stoi(@str)
else
raise "Not an Integer or a radix #{radix} string"
end
end
def to_i
@int
end
def to_s
@str
end
def zero?
@int.zero?
end
end
# Examples:
class Base16
def symbols
"0123456789ABCDEF"
end
# Transform the string before and after translation
def transform(string)
string.upcase
end
include GenericRadix
end
class Base80
def symbols
"!()*,-.0123456789:;@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"
end
include GenericRadix
end
class Base256
def symbols
( Range.new(0,255).map {|ord| ord.chr }.join )
end
include GenericRadix
end
