Guest User

Untitled

a guest
Mar 17th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.72 KB | None | 0 0
  1. class ShortStringPacker
  2. ## Packs a short string into a Fixnum
  3. # Arguments:
  4. # str - String object
  5. # Returns: a Fixnum object
  6. def self.pack(str)
  7. abc = [*'a'..'z']
  8. arr = str.chars.map { |x| abc.find_index(x) + 1 }
  9. arr.reduce { |item, key| (item << 5.0) | key }
  10. end
  11.  
  12. ## Unpacks a Fixnum from pack() method into a short string
  13. # Arguments:
  14. # packed - a Fixnum object
  15. # Returns: a String object
  16. def self.unpack(packed)
  17. abc = [*'a'..'z']
  18. binary_string = packed.to_s 2
  19. amt_chars_in_packed = (binary_string.length / 5.0).ceil
  20.  
  21. binary_string.rjust(amt_chars_in_packed * 5.0, '0')
  22. .to_s
  23. .chars
  24. .each_slice(5)
  25. .map(&:join)
  26. .map! { |x| abc[(x.to_i 2) - 1] }
  27. .join
  28. end
  29. end
Add Comment
Please, Sign In to add comment