copycats 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50a95619e02e3d6db1a9fe343844871ee523ba0a
4
- data.tar.gz: 6dacf27f0f458222fc4c149dd070096de742a5d1
3
+ metadata.gz: 9d4349c7259a07744027bdfe5c4a1264f1a2a618
4
+ data.tar.gz: be9e07b7f6537ac7b4e8bd204675ec0b4fcdefbd
5
5
  SHA512:
6
- metadata.gz: 14ba1e1ccfc4df5e04d4e53a6fbf67fdcb2351b19d1c0e7097b19bdca20c9a09993b84f793c5f630d36d3d6f31de6f82cfc863756627a91ffb97c30aba1d378b
7
- data.tar.gz: cce891ba518978154083f84c9323e4214b95fb241e3d330dc35c470f02491bc1a998e9e00c8afd2c6099c7f85c821f23f5408b2235398ca82a1f7bb57abfe8dc
6
+ metadata.gz: 4d3da0f26e104802d8bd35652fe5dc0e0ac6a04c77bedc1c9eb9e46d79c406de244c90e0327ab9ae227eee0c06ce5252287037128397b20d636027630c69801c
7
+ data.tar.gz: c90601d80f6a2c6e4ab19a6b5b0581a44fba9e906748286cc17cb26bdca80e1771168a40cc9b4c0ea2b74fcd610850d33e2f6ae7a2dfaacb8d48778daa737615
@@ -5,8 +5,8 @@ README.md
5
5
  Rakefile
6
6
  bin/kitty
7
7
  lib/copycats.rb
8
- lib/copycats/base32.rb
9
8
  lib/copycats/data.rb
9
+ lib/copycats/fancies.rb
10
10
  lib/copycats/gene.rb
11
11
  lib/copycats/genome.rb
12
12
  lib/copycats/models/kitty.rb
@@ -19,7 +19,8 @@ lib/copycats/tool.rb
19
19
  lib/copycats/traits.rb
20
20
  lib/copycats/version.rb
21
21
  test/helper.rb
22
- test/test_base32.rb
23
22
  test/test_genome.rb
24
23
  test/test_mixgenes.rb
24
+ test/test_models.rb
25
+ test/test_traits.rb
25
26
  test/test_version.rb
data/README.md CHANGED
@@ -12,76 +12,51 @@ copycats command line tool (and core library) - crypto cats / kitties collectibl
12
12
 
13
13
 
14
14
 
15
- ## Updates
15
+ ## Timeline / Updates
16
16
 
17
- New Traits / Catttributes:
17
+ ### New Traits / Catttributes
18
18
 
19
- ### 2018
19
+ Mar 21, 2018
20
+ - **Springcrocus** - highlight color (2) trait is discovered. #Cattribute
20
21
 
21
- March
22
+ Mar 16, 2018
23
+ - **Thunderstruck** - pattern (i) trait is discovered. #Cattribute
24
+ - **Rascal** - pattern (3) trait is discovered. #Cattribute
22
25
 
23
- - Mar/16: **thunderstruck** - pattern (i)
24
- - Mar/16: **rascal** - pattern (3)
26
+ Mar 14, 2018
27
+ - **Dragonfruit** - base color (e) trait is discovered. #Cattribute
25
28
 
26
- <!-- break -->
29
+ Mar 9, 2018
30
+ - **Belch** - mouth (7) trait is discovered. #Cattribute
27
31
 
28
- - Mar/14: **dragonfruit** - base color (e)
32
+ Mar 8, 2018
33
+ - **Pixiebob** - fur (8) trait is discovered. #Cattribute
34
+ - **Poisonberry** - highlight color (4) trait is discovered. #Cattribute
35
+ - **Safetyvest** - highlight color (i) trait is discovered. #Cattribute
29
36
 
30
- <!-- break -->
37
+ Mar 5, 2018
38
+ - **Cyan** - eye color (g) trait is discovered. #Cattribute
31
39
 
32
- - Mar/9: **belch** - mouth (7)
33
40
 
34
- <!-- break -->
41
+ See [Updates - Traits](updates/TRAITS.md) for more.
35
42
 
36
- - Mar/8: **pixiebob** - fur (8)
37
- - Mar/8: **poisonberry** - highlight color (4)
38
- - Mar/8: **safetyvest** - highlight color (i)
39
43
 
40
- <!-- break -->
44
+ ### New Fancies / Exclusives
41
45
 
42
- - Mar/5: **cyan** - eye color (g)
46
+ Mar 16, 2018
47
+ - **Berry** (?) Fancy Cat is discovered. #Fancy Cat
43
48
 
49
+ Mar 7, 2018
50
+ - **Lion Dance** (888) Fancy Cat is discovered. #Fancy Cat
44
51
 
52
+ Mar 2, 2018
53
+ - **Dogcat** (88) Fancy Cat is discovered. #Fancy Cat
45
54
 
46
- February
55
+ Mar 1, 2018
56
+ - Exclusive **Knight Kitty** (?) is released. #Fancy Cat #Exclusive
47
57
 
48
- - Feb/28: **missmuffet** - accent color (e)
49
- - Feb/28: **wiley** - eye shape (f)
50
58
 
51
- <!-- break -->
52
-
53
- - Feb/23: **dippedcone** - pattern (j)
54
- - Feb/23: **leopard** - pattern (5)
55
-
56
- <!-- break -->
57
-
58
- - Feb/20: **harbourfog** - base color (9)
59
-
60
- <!-- break -->
61
-
62
- - Feb/13: **baddate** - eye shape (b)
63
-
64
- <!-- break -->
65
-
66
- - Feb/12: **wuvme** - mouth (3)
67
- - Feb/12: **yokel** - mouth (q)
68
- - Feb/12: **starstruck** - mouth (i)
69
-
70
- <!-- break -->
71
-
72
- - Feb/9: **egyptiankohl** - highlight color (3)
73
- - Feb/9: **bobtail** - fur (6)
74
-
75
- <!-- break -->
76
-
77
- - Feb/6: **tiger** - pattern (2)
78
-
79
- <!-- break -->
80
-
81
- - Feb/2: **birman** - fur (4)
82
- - Feb/2: **coralsunrise** - eye color (c)
83
-
84
- (Source: [CryptoKitties Updates](https://updates.cryptokitties.co))
59
+ See [Updates - Fancies / Exclusives](updates/FANCIES.md) for more.
85
60
 
86
61
 
87
62
 
data/Rakefile CHANGED
@@ -18,6 +18,7 @@ Hoe.spec 'copycats' do
18
18
  self.history_file = 'HISTORY.md'
19
19
 
20
20
  self.extra_deps = [
21
+ ['base32-kai'],
21
22
  ['activerecord'],
22
23
  ['sqlite3'],
23
24
  ]
@@ -15,11 +15,13 @@ require 'logger' # note: use for ActiveRecord::Base.logger -- remove/replace
15
15
  ## 3rd party gems
16
16
  require 'active_record' ## todo: add sqlite3? etc.
17
17
 
18
+ require 'base32-kai' ## base32 / kai encoding / decoding for genes
19
+
18
20
 
19
21
  ## our own code
20
22
  require 'copycats/version' # note: let version always go first
21
- require 'copycats/base32'
22
23
  require 'copycats/traits'
24
+ require 'copycats/fancies'
23
25
  require 'copycats/gene'
24
26
  require 'copycats/genome'
25
27
 
@@ -88,7 +88,7 @@ def setup_traits
88
88
  name = trait_hash[:kai][kai]
89
89
  name = '?' if name.nil? || name.empty?
90
90
 
91
- tier = Kai::TIER[kai]
91
+ tier = Gene::TIER[kai]
92
92
 
93
93
  puts "Kai: #{kai} (#{n}) /#{tier}, Cattribute: #{name}"
94
94
  trait = Copycats::Model::Trait.new
@@ -188,6 +188,10 @@ def read_datafiles( data_dir: './data' )
188
188
  k.sire_id = row[headers['sire_id']].to_i unless row[headers['sire_id']].blank? || row[headers['sire_id']] == '0'
189
189
  k.name = row[headers['name']] unless row[headers['name']].blank?
190
190
 
191
+ ## founder cats - first one hundret (1 to 100 - note: includes genesis (1))
192
+ k.is_founder = true if k.id >= 1 && k.id <= 100
193
+
194
+
191
195
  ## todo: pretty print (format genes !!!!)
192
196
  k.genes_kai = row[headers['genes']] ### .gsub( ' ', '' ) ## remove all spaces - why? why not?
193
197
 
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ #
5
+ # for latest updates on new fancies/exclusives see:
6
+ # https://updates.cryptokitties.co (official latest updates/timeline)
7
+
8
+
9
+ ## todo: add formula: []
10
+
11
+ FANCIES =
12
+ {
13
+ bugcat: { name: 'Bug Cat', limit: 3, date: '2017-11-23', exclusive: true, ids: [101,102,103] },
14
+ shipcat: { name: 'Ship Cat', limit: 2_000, date: '2017-11-23' },
15
+
16
+ genesis: { name: 'Genesis', limit: 1, date: '2017-11-24', exclusive: true, ids: [1],
17
+ desc: '1st Kitty' },
18
+
19
+ ducat: { name: 'Du Cat', limit: 10_000, date: '2017-11-29' },
20
+
21
+ dracula: { name: 'Dracula', limit: 2_000, date: '2017-12-01' },
22
+
23
+ mistletoe: { name: 'Mistletoe', limit: 2_000, date: '2017-12-09',
24
+ desc: "XMas Kitty" },
25
+
26
+ santaclaws: { name: 'Santa Claws', limit: 1_000, date: '2017-12-12',
27
+ desc: 'Ho Ho Ho - Santa Claus Kitty' },
28
+
29
+ phuziqaat: { name: 'Phu Ziqaat', limit: 1_000, date: '2017-12-31',
30
+ desc: 'Alien Kitty' },
31
+
32
+ stiches: { name: 'Stiches', limit: 500, date: '2018-01-10',
33
+ desc: 'Zombie Kitty' },
34
+
35
+
36
+
37
+ berry: { name: 'Berry', limit: 200 },
38
+ cathena: { name: 'Cathena', limit: 1, desc: '500 000th Kitty' },
39
+ dogcat: { name: 'Dog Cat', name_cn: '汪星爷', limit: 88, desc: 'Year of the Dog (Greater China)' },
40
+ earnie: { name: 'Earnie', limit: 500, desc: 'Earn.com - Golden Kitty Award (Product Hunt)' },
41
+ fortunecat: { name: 'Fortune Cat', name_cn: '红包喵', limit: 888 },
42
+ goldendogcat: { name: 'Golden Dog Cat', name_cn: '旺财汪', limit: 11 },
43
+ goldendragoncat: { name: 'Golden Dragon Cat', name_cn: '帝龙喵', limit: 1, },
44
+ knightkitty: { name: 'Knight Kitty', limit: 11 },
45
+ liondance: { name: 'Lion Dance', name_cn: '咚咚锵', limit: 888 },
46
+ misterpurrfect: { name: 'Mister Purrfect', limit: 1_000, desc: "Valentine's Day" },
47
+ 'momo-chan': { name: 'Momo-chan', limit: 500, desc: 'Ninja Kitty' },
48
+ negato: { name: 'Negato', limit: 500, desc: 'Ninja Kitty' },
49
+ pussforprogress: { name: 'Puss For Progress', limit: 1_920, desc: "Women's Day" },
50
+ tabby: { name: 'Tabby', limit: 250 },
51
+ yuricatsuki: { name: 'Yuri Catsuki', limit: 250, desc: 'Figure Scating Kitty - Winter Olympics (Korea)' }
52
+
53
+ }
@@ -43,8 +43,8 @@ class Gene
43
43
  def mutate( other )
44
44
  puts "Gene#mutate"
45
45
 
46
- gene1 = KAI_TO_INT[d] ## dominant gene1
47
- gene2 = KAI_TO_INT[other.d] ## dominant gene2
46
+ gene1 = Kai::NUMBER[d] ## dominant gene1
47
+ gene2 = Kai::NUMBER[other.d] ## dominant gene2
48
48
  if gene1 > gene2
49
49
  gene1, gene2 = gene2, gene1 ## make sure gene2 is always bigger
50
50
  end
@@ -89,4 +89,46 @@ class Gene
89
89
  gene
90
90
  end
91
91
 
92
+
93
+
94
+ #############################
95
+ # Tier 1 Tier 2 Tier 3 Tier 4 Tier 5
96
+ ## (1-g) (h-p) (q-t) (u,v) (w)
97
+
98
+ ### todo/check: move TIER mapping to Genome class or ... - why? why not?
99
+ TIER = { ## todo/fix: use an algo to calculate - why? why not?
100
+ '1' => 1,
101
+ '2' => 1,
102
+ '3' => 1,
103
+ '4' => 1,
104
+ '5' => 1,
105
+ '6' => 1,
106
+ '7' => 1,
107
+ '8' => 1,
108
+ '9' => 1,
109
+ 'a' => 1,
110
+ 'b' => 1,
111
+ 'c' => 1,
112
+ 'd' => 1,
113
+ 'e' => 1,
114
+ 'f' => 1,
115
+ 'g' => 1,
116
+ 'h' => 2,
117
+ 'i' => 2,
118
+ 'j' => 2,
119
+ 'k' => 2,
120
+ 'm' => 2,
121
+ 'n' => 2,
122
+ 'o' => 2,
123
+ 'p' => 2,
124
+ 'q' => 3,
125
+ 'r' => 3,
126
+ 's' => 3,
127
+ 't' => 3,
128
+ 'u' => 4,
129
+ 'v' => 4,
130
+ 'w' => 5,
131
+ 'x' => nil
132
+ }
133
+
92
134
  end # class Gene
@@ -60,9 +60,15 @@ class Genome
60
60
  sgenes = other.genes ## sire genes
61
61
  new_genes = {}
62
62
 
63
- ## todo/fix: use insertion order from "official" api - why? why not?
64
- ## -- preinitialize with empty hash and than use byte order ??
65
- TRAIT_KEYS.each do |key|
63
+ [:body,
64
+ :pattern,
65
+ :coloreyes,
66
+ :eyes,
67
+ :color1,
68
+ :color2,
69
+ :color3,
70
+ :wild,
71
+ :mouth].each do |key|
66
72
  mgene = mgenes[key]
67
73
  sgene = sgenes[key]
68
74
 
@@ -29,7 +29,7 @@ def build
29
29
  buf << "\n"
30
30
 
31
31
  Kai::ALPHABET.each_char do |kai|
32
- tier = ROMAN[ Kai::TIER[kai] ]
32
+ tier = ROMAN[ Gene::TIER[kai] ]
33
33
  tier = '?' if tier.nil?
34
34
  buf << "| #{tier} | #{kai} |"
35
35
  TRAITS.values[0,6].each do |trait|
@@ -56,7 +56,7 @@ def build
56
56
  buf << "\n"
57
57
 
58
58
  Kai::ALPHABET.each_char do |kai|
59
- tier = ROMAN[ Kai::TIER[kai] ]
59
+ tier = ROMAN[ Gene::TIER[kai] ]
60
60
  tier = '?' if tier.nil?
61
61
  buf << "| #{tier} | #{kai} |"
62
62
  TRAITS.values[6,6].each do |trait|
@@ -32,6 +32,12 @@ create_table :kitties do |t|
32
32
  t.references :matron ## optional references kitty (with matron id)
33
33
  t.references :sire ## optional references kitty (with sire id)
34
34
 
35
+
36
+ t.boolean :is_fancy, null: false, default: false
37
+ t.boolean :is_exclusive, null: false, default: false
38
+ t.boolean :is_founder, null: false, default: false # ids 1 to 100 (in cryptokitties)
39
+
40
+
35
41
  ## for easy queries add convenience gene-d for all traits
36
42
  t.references :body, null: false ## gene 0 (d)
37
43
  t.references :pattern, null: false ## gene 4 (d)
@@ -4,8 +4,8 @@
4
4
  module Copycats
5
5
 
6
6
  MAJOR = 0
7
- MINOR = 6
8
- PATCH = 1
7
+ MINOR = 7
8
+ PATCH = 0
9
9
  VERSION = [MAJOR,MINOR,PATCH].join('.')
10
10
 
11
11
  def self.version
@@ -10,12 +10,6 @@ require 'helper'
10
10
 
11
11
  class TestGenome < MiniTest::Test
12
12
 
13
- def xx_test_traits
14
- pp TRAITS
15
-
16
- assert true ## (for now) everything ok if we get here
17
- end
18
-
19
13
 
20
14
  def test_kitty_100000
21
15
  ## see https://cryptokittydex.com/kitties/100000
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_models.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+
11
+ class TestModels < MiniTest::Test
12
+
13
+
14
+ def test_create
15
+ ## connect to local kitties.db database
16
+ connect( adapter: 'sqlite3',
17
+ database: ':memory:' )
18
+
19
+ setup_db
20
+ setup_traits # note: also builds TRAIT_IDS_CACHE for read_datafiles for now
21
+
22
+ ## print some (record) stats
23
+ kitty_count = Copycats::Model::Kitty.count
24
+ gene_count = Copycats::Model::Gene.count
25
+ trait_count = Copycats::Model::Trait.count
26
+
27
+ puts "kitties: #{kitty_count}"
28
+ puts "genes: #{gene_count}"
29
+ puts "traits: #{trait_count}"
30
+
31
+ assert_equal 0, kitty_count
32
+ assert_equal 0, gene_count
33
+ assert_equal 384, trait_count
34
+ end
35
+
36
+ end # class TestModels
@@ -2,46 +2,35 @@
2
2
 
3
3
  ###
4
4
  # to run use
5
- # ruby -I ./lib -I ./test test/test_base32.rb
5
+ # ruby -I ./lib -I ./test test/test_traits.rb
6
6
 
7
7
 
8
8
  require 'helper'
9
9
 
10
10
 
11
- class TestBase32 < MiniTest::Test
11
+ class TestTraits < MiniTest::Test
12
12
 
13
+ def test_traits
14
+ pp TRAITS
15
+ assert true ## (for now) everything ok if we get here
13
16
 
14
- def test_kai
15
-
16
- ## Kitty #1001
17
- ## see https://cryptokittydex.com/kitties/1001
18
-
19
- binary = 0b0000000000000000010010100101001010010011000111001110010000001000010111000001010010111101110011100000000101001010000000110001100010000100011010100000110010000000100011000110000000101001010010100110001100010100101000110100101000010010100101011011100111001110 # binary
20
- hex = 0x00004a52931ce4085c14bdce014a0318846a0c808c60294a6314a34a_1295_b9ce # hex
21
-
22
- kai = "aaaa 7885 22f2 agff 1661 7755 e979 2441 6667 7664 a9aa cfff".gsub( ' ', '' )
17
+ ## todo: assert number of traits use traits.keys.size !!!
18
+ end
23
19
 
24
- assert_equal binary, hex
20
+ def test_fancies
21
+ pp FANCIES
22
+ assert true ## (for now) everything ok if we get here
25
23
 
26
- puts "binary number:"
27
- pp binary
28
- puts "hex number:"
29
- pp hex
24
+ ## todo: assert number of fancies use fancies.keys.size !!!
25
+ end
30
26
 
31
- kai2 = Base32.encode( hex )
32
- pp kai
33
- pp kai2
34
27
 
35
- hex2 = Base32.decode( kai2 )
36
- pp hex2
37
- assert_equal hex, hex2
38
- assert_equal kai, kai2
28
+ def test_kai
39
29
 
30
+ ## Kitty #1001
31
+ ## see https://cryptokittydex.com/kitties/1001
40
32
 
41
- kai3 = Kai.encode( hex )
42
- hex3 = Kai.decode( kai3 )
43
- assert_equal hex, hex3
44
- assert_equal kai, kai3
33
+ kai = "aaaa 7885 22f2 agff 1661 7755 e979 2441 6667 7664 a9aa cfff".gsub( ' ', '' )
45
34
 
46
35
  puts "kai.length: #{kai.length}" ## 48
47
36
  puts " first: #{kai[0]}"
@@ -71,7 +60,8 @@ def test_kai
71
60
  puts TRAITS[:color1][color1[1]]
72
61
  puts TRAITS[:color1][color1[2]]
73
62
  puts TRAITS[:color1][color1[3]]
74
- end
75
63
 
64
+ assert true
65
+ end
76
66
 
77
- end # class TestBase32
67
+ end # class TestTraits
@@ -18,5 +18,4 @@ def test_version
18
18
  assert true ## (for now) everything ok if we get here
19
19
  end
20
20
 
21
-
22
21
  end # class TestVersion
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: copycats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-20 00:00:00.000000000 Z
11
+ date: 2018-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base32-kai
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: activerecord
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -87,8 +101,8 @@ files:
87
101
  - Rakefile
88
102
  - bin/kitty
89
103
  - lib/copycats.rb
90
- - lib/copycats/base32.rb
91
104
  - lib/copycats/data.rb
105
+ - lib/copycats/fancies.rb
92
106
  - lib/copycats/gene.rb
93
107
  - lib/copycats/genome.rb
94
108
  - lib/copycats/models/kitty.rb
@@ -101,9 +115,10 @@ files:
101
115
  - lib/copycats/traits.rb
102
116
  - lib/copycats/version.rb
103
117
  - test/helper.rb
104
- - test/test_base32.rb
105
118
  - test/test_genome.rb
106
119
  - test/test_mixgenes.rb
120
+ - test/test_models.rb
121
+ - test/test_traits.rb
107
122
  - test/test_version.rb
108
123
  homepage: https://github.com/openblockchains/copycats
109
124
  licenses:
@@ -1,155 +0,0 @@
1
- # encoding: utf-8
2
-
3
-
4
- class Base32 ## Base32 (2^5 - 5bits)
5
-
6
- # See https://en.wikipedia.org/wiki/Base58
7
- ALPHABET = "123456789abcdefghijkmnopqrstuvwx"
8
- BASE = ALPHABET.length ## 32 chars/letters/digits
9
-
10
- # Converts a base10 integer to a base32 string.
11
- def self.encode( num )
12
- buf = String.new
13
- while num >= BASE
14
- puts "num=#{num}"
15
- mod = num % BASE
16
- puts " mod=#{mod} == #{ALPHABET[mod]}"
17
- buf = ALPHABET[mod] + buf
18
- puts "buf=#{buf}"
19
- num = (num - mod)/BASE
20
- end
21
- ALPHABET[num] + buf
22
- end
23
-
24
-
25
- # Converts a base58 string to a base10 integer.
26
- def self.decode( str )
27
- num = 0
28
- str.reverse.each_char.with_index do |char,index|
29
- char_index = ALPHABET.index(char)
30
- raise ArgumentError, 'Value passed not a valid Base32 String.' if char_index.nil?
31
- num += (char_index)*(BASE**(index))
32
- end
33
- num
34
- end
35
-
36
-
37
- ## simple hash map (helper) for conversion to binary string
38
- BINARY = {
39
- '1' => '00000', # 0
40
- '2' => '00001', # 1
41
- '3' => '00010', # 2
42
- '4' => '00011', # 3
43
- '5' => '00100', # 4
44
- '6' => '00101', # 5
45
- '7' => '00110', # 6
46
- '8' => '00111', # 7
47
- '9' => '01000', # 8
48
- 'a' => '01001', # 9
49
- 'b' => '01010', # 10
50
- 'c' => '01011', # 11
51
- 'd' => '01100', # 12
52
- 'e' => '01101', # 13
53
- 'f' => '01110', # 14
54
- 'g' => '01111', # 15
55
- 'h' => '10000', # 16
56
- 'i' => '10001', # 17
57
- 'j' => '10010', # 18
58
- 'k' => '10011', # 19
59
- 'm' => '10100', # 20
60
- 'n' => '10101', # 21
61
- 'o' => '10110', # 22
62
- 'p' => '10111', # 23
63
- 'q' => '11000', # 24
64
- 'r' => '11001', # 25
65
- 's' => '11010', # 26
66
- 't' => '11011', # 27
67
- 'u' => '11100', # 28
68
- 'v' => '11101', # 29
69
- 'w' => '11110', # 30
70
- 'x' => '11111' # 31
71
- }
72
-
73
- NUMBER = { ## rename INTEGER /INT - why? why not??
74
- '1' => 0,
75
- '2' => 1,
76
- '3' => 2,
77
- '4' => 3,
78
- '5' => 4,
79
- '6' => 5,
80
- '7' => 6,
81
- '8' => 7,
82
- '9' => 8,
83
- 'a' => 9,
84
- 'b' => 10,
85
- 'c' => 11,
86
- 'd' => 12,
87
- 'e' => 13,
88
- 'f' => 14,
89
- 'g' => 15,
90
- 'h' => 16,
91
- 'i' => 17,
92
- 'j' => 18,
93
- 'k' => 19,
94
- 'm' => 20,
95
- 'n' => 21,
96
- 'o' => 22,
97
- 'p' => 23,
98
- 'q' => 24,
99
- 'r' => 25,
100
- 's' => 26,
101
- 't' => 27,
102
- 'u' => 28,
103
- 'v' => 29,
104
- 'w' => 30,
105
- 'x' => 31
106
- }
107
-
108
- ## add shortcuts (convenience) aliases
109
- BIN = BINARY
110
- NUM = NUMBER
111
-
112
-
113
- #############################
114
- # Tier 1 Tier 2 Tier 3 Tier 4 Tier 5
115
- ## (1-g) (h-p) (q-t) (u,v) (w)
116
-
117
- TIER = { ## todo/fix: use an algo to calculate - why? why not?
118
- '1' => 1,
119
- '2' => 1,
120
- '3' => 1,
121
- '4' => 1,
122
- '5' => 1,
123
- '6' => 1,
124
- '7' => 1,
125
- '8' => 1,
126
- '9' => 1,
127
- 'a' => 1,
128
- 'b' => 1,
129
- 'c' => 1,
130
- 'd' => 1,
131
- 'e' => 1,
132
- 'f' => 1,
133
- 'g' => 1,
134
- 'h' => 2,
135
- 'i' => 2,
136
- 'j' => 2,
137
- 'k' => 2,
138
- 'm' => 2,
139
- 'n' => 2,
140
- 'o' => 2,
141
- 'p' => 2,
142
- 'q' => 3,
143
- 'r' => 3,
144
- 's' => 3,
145
- 't' => 3,
146
- 'u' => 4,
147
- 'v' => 4,
148
- 'w' => 5,
149
- 'x' => nil
150
- }
151
-
152
- end # class Base32
153
-
154
- ## add a shortcut (convenience) alias
155
- Kai = Base32