fork download
  1. def decode(s)
  2. (Base ** s.size - 1) / (Base - 1) +
  3. s.split(//).map {|c| c.ord - 'A'.ord}.inject(0) {|x, k| x * Base + k}
  4. end
  5.  
  6. def encode(x)
  7. n = 1.upto(Float::INFINITY).find {|k| (x -= Base ** (k - 1)) < Base ** k}
  8. n.times.inject('') do |s,|
  9. x, y = x.divmod(Base)
  10. (y + 'A'.ord).chr + s
  11. end
  12. end
  13.  
  14. def solve(s)
  15. puts "#{s} = #{eval(s)}"
  16. end
  17.  
  18. Base = 26
  19.  
  20. solve "decode('DBA')"
  21. solve "encode(125)"
Success #stdin #stdout 0.02s 7416KB
stdin
Standard input is empty
stdout
decode('DBA') = 2757
encode(125) = DU