#!/usr/local/bin/ruby
# -*- encoding:utf-8 -*-
module Conv
TABLE = ('!'..'~').to_a
def to_s_conv(base, rs=[])
q, r = self.divmod base
rs.unshift TABLE[r]
q.to_s_conv(base, rs) if q > 0
rs.join
end
def to_i_conv(base)
self.split(//).reverse.map.with_index { |s, i| TABLE.index(s).to_i * base**i }.inject(:+)
end
end
class Fixnum
include Conv
alias to_s_orig to_s
def to_s(base=10)
base > 36 ? to_s_conv(base) : to_s_orig(base)
end
end
class Bignum
include Conv
alias to_s_orig to_s
def to_s(base=10)
base > 36 ? to_s_conv(base) : to_s_orig(base)
end
end
class String
include Conv
alias to_i_orig to_i
def to_i(base=10)
base > 36 ? to_i_conv(base) : to_i_orig(base)
end
end
x = 200_000_000_000
(2..94).each do |i|
s = x.to_s(i)
print "#{i} => #{s}:#{s.to_i(i)}\n"
end
Friday, July 23, 2010
conv.rb
to_s(base), to_i(base)を94まで対応
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment