Advertisement
AngryPacman

[RUBY] Number Conversion

Feb 29th, 2012
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.59 KB | None | 0 0
  1. #===============================================================================
  2. # Methods for conversion to binary
  3. #   conversion_timer  : gets the time taken to perform conversion. Also acts as
  4. #                       a block handler for the conversion.
  5. #   decimal_binary(n) : converts a decimal number to a binary number, n being
  6. #                       the number for conversion.
  7. #   binary_decimal(n) : converts a binary number to a decimal number, n being
  8. #                       the number for conversion.
  9. #   unary_decimal(n)  : converts a unary number to a decimal number, n being
  10. #                       the number for conversion.
  11. #   decimal_unary(n)  : converts a decimal number to a unary number, n being
  12. #                       the number for conversion.
  13. #===============================================================================
  14.  
  15. def conversion_timer(&proc)
  16.   started = Time.now
  17.   yield if block_given?
  18.   stopped = Time.now  
  19.   res = stopped - started
  20.   res
  21. end
  22.  
  23. def decimal_binary(n)
  24.   conversion_timer {
  25.     res = []
  26.     while n != 0
  27.       new_n = n >> 1
  28.       res << ((n == new_n << 1) ? '0' : '1')
  29.       n = new_n
  30.     end
  31.     n = res.reverse.join.to_i
  32.   }
  33.   n
  34. end
  35.  
  36. def binary_decimal(n)
  37.   conversion_timer {
  38.     res = 0
  39.     exp = 1
  40.     missing = 0
  41.     n.to_s.reverse.each_byte { |s|
  42.       if s == 49
  43.         exp <<= missing
  44.         res += exp
  45.         missing = 1
  46.       else
  47.         missing += 1
  48.       end
  49.     }
  50.     n = res
  51.   }
  52.   n
  53. end
  54.  
  55. def unary_decimal(n)
  56.   n.to_s.size
  57. end
  58.  
  59. def decimal_unary(n)
  60.   s = ''
  61.   n.times do s += '1' end
  62.   s
  63. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement