Initial commit
This commit is contained in:
commit
e36cefc472
6 changed files with 121 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
*.gem
|
51
README.md
Normal file
51
README.md
Normal file
|
@ -0,0 +1,51 @@
|
|||
#Base52
|
||||
|
||||
Encode and Decode Base 52 Values
|
||||
|
||||
##Description
|
||||
|
||||
Implement functionality to the base Integer class to convert an integer into an equivalent base 52 string using the character set 0-9, A-Z, a-z excluding
|
||||
vowels. Additionally, implement functionality to the base String class to
|
||||
convert a base 52 string back to an integer.
|
||||
|
||||
##Install
|
||||
|
||||
```
|
||||
$ gem install base52
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
require 'base52'
|
||||
|
||||
1000000000.to_52
|
||||
=> "2clyTD"
|
||||
|
||||
"2clyTD".from_52
|
||||
=> 1000000000
|
||||
```
|
||||
|
||||
##License
|
||||
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2012 Andrew Tomaka
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
8
Rakefile
Normal file
8
Rakefile
Normal file
|
@ -0,0 +1,8 @@
|
|||
require 'rake/testtask'
|
||||
|
||||
Rake::TestTask.new do |t|
|
||||
t.libs << 'test'
|
||||
end
|
||||
|
||||
desc "Run tests"
|
||||
task :default => :test
|
15
base52.gemspec
Normal file
15
base52.gemspec
Normal file
|
@ -0,0 +1,15 @@
|
|||
Gem::Specification.new do |s|
|
||||
s.name = 'Base 52'
|
||||
s.version = '0.0.1'
|
||||
s.date = '2012-09-24'
|
||||
s.summary = 'Encode and Decode Base 52 Values'
|
||||
s.description = 'Implement functionality to the base Integer class to convert
|
||||
an integer into an equivalent base 52 string using the
|
||||
character set 0-9, A-Z, a-z excluding vowels. Additionally,
|
||||
implement functionality to the base String class to convert a
|
||||
base 52 string back to an integer.'
|
||||
s.authors = ['Andrew Tomaka']
|
||||
s.email = 'atomaka@gmail.com'
|
||||
s.files = ['lib/base52.rb']
|
||||
s.homepage = 'https://github.com/atomaka/base52'
|
||||
end
|
30
lib/base52.rb
Normal file
30
lib/base52.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
BASE52_CHARACTERS = Array('0'..'9') + Array('A'..'Z') + Array('a'..'z') - 'AEIOUaeiou'.split(//)
|
||||
|
||||
class String
|
||||
def from_52
|
||||
i = 0
|
||||
decoded = 0
|
||||
|
||||
self.split(//).reverse.each do |a|
|
||||
decoded += BASE52_CHARACTERS.index(a) * (52 ** i)
|
||||
i += 1
|
||||
end
|
||||
|
||||
decoded
|
||||
end
|
||||
end
|
||||
|
||||
class Integer
|
||||
def to_52
|
||||
return "0" if self == 0
|
||||
|
||||
input = self
|
||||
encoded = ''
|
||||
while input > 0
|
||||
encoded = BASE52_CHARACTERS[input % 52].to_s + encoded
|
||||
input /= 52
|
||||
end
|
||||
|
||||
encoded
|
||||
end
|
||||
end
|
16
test/test_base52.rb
Normal file
16
test/test_base52.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
require 'test/unit'
|
||||
require File.dirname(__FILE__) + '/../lib/base52'
|
||||
|
||||
class Base52Test < Test::Unit::TestCase
|
||||
def test_to_52
|
||||
assert_equal '0', 0.to_52
|
||||
assert_equal '2clyTD', 1000000000.to_52
|
||||
assert_equal 'zzzzzz', 19770609663.to_52
|
||||
end
|
||||
|
||||
def test_from_52
|
||||
assert_equal 0, '0'.from_52
|
||||
assert_equal 1000000000, '2clyTD'.from_52
|
||||
assert_equal 19770609663, 'zzzzzz'.from_52
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue