copycats 0.0.1 → 0.5.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: aa8f79eeca85aa94e2dd76d4d8d6a3cc61f4f6e1
4
- data.tar.gz: 29eefb603cddc5f4c14559b4b368bfd3a5e9c8e2
3
+ metadata.gz: 4fc77be01f1cb22a3dc5a00f14ea2ca82607602b
4
+ data.tar.gz: 74770f25d33f910afb03b7f6c1a2ceebb9d575ef
5
5
  SHA512:
6
- metadata.gz: 5421edcf8c21f7229f925c53d28113adcfe0bf226df5eaa357ff4b7af07451faf87c56cab57285d59134674c1f0ed608930f9a92011bcc6a81ea34afd10bb9aa
7
- data.tar.gz: 3d646117c62e59f748380f821e6aaa565cde7703f55381907a91b3435d62c61cd42194a4a9a0dffbaff08f4581819dbc82948ab8aae88c8495660a2c063cd247
6
+ metadata.gz: b0b2b1aff76fbb87e38ffb8cd029b8d602b123fcd30906028e9129e299f9ff590f6f75e90f65e1682e9e1c336c740881fed9deba2d599646c5195d8d6bfbc6b6
7
+ data.tar.gz: 522d81bb5f67f503cbb4c83221d30a6548efb6e357037326c6ac565e0cdfc3cd0c7ad4562ac7f66729df796281f44601c60a5a2ed6666fe9e07c58b374c21b66
data/Manifest.txt CHANGED
@@ -3,7 +3,23 @@ LICENSE.md
3
3
  Manifest.txt
4
4
  README.md
5
5
  Rakefile
6
+ bin/kitty
6
7
  lib/copycats.rb
8
+ lib/copycats/base32.rb
9
+ lib/copycats/data.rb
10
+ lib/copycats/gene.rb
11
+ lib/copycats/genome.rb
12
+ lib/copycats/models/kitty.rb
13
+ lib/copycats/reports/genes.rb
14
+ lib/copycats/reports/kitty.rb
15
+ lib/copycats/reports/mix.rb
16
+ lib/copycats/reports/traits.rb
17
+ lib/copycats/schema.rb
18
+ lib/copycats/tool.rb
19
+ lib/copycats/traits.rb
7
20
  lib/copycats/version.rb
8
21
  test/helper.rb
22
+ test/test_base32.rb
23
+ test/test_genome.rb
24
+ test/test_mixgenes.rb
9
25
  test/test_version.rb
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Crypto Copycats Collectibles - Buy! Sell! Hodl! Sire!
2
2
 
3
- copycats command line tool (and core library) - crypto cats / kitties collectibles unchained - buy! sell! hodl! sire! - play for free - runs off the blockchain - no ether or gas required; run your own peer-to-peer (P2P) network node over HTTP
3
+ copycats command line tool (and core library) - crypto cats / kitties collectibles unchained - buy! sell! hodl! sire! - play for free - runs off the blockchain w/ ledger lite - no ether / gas required; run your own peer-to-peer (P2P) network node over HTTP
4
4
 
5
5
 
6
6
 
@@ -12,6 +12,252 @@ copycats command line tool (and core library) - crypto cats / kitties collectibl
12
12
 
13
13
 
14
14
 
15
+ ## kitty Command Line Tool
16
+
17
+ Use the `kitty` command line tool to (auto-)read kitty data records
18
+ (in comma-separated values (CSV)) into an in-memory SQLite database
19
+ and print reports. Example - [`kitties_1-100.csv`](data/kitties_1-100.csv):
20
+
21
+ ```
22
+ id,gen,genes_kai
23
+ 1,0,ccac7787fa7fafaa16467755f9ee444467667366cccceede
24
+ 2,0,ca9c7575f442af9g666455577777444466868667ccccffec
25
+ 3,0,ac9a6686ff7f99aa66665575779f444467867748ccccdcfc
26
+ 4,0,ccac568622fff99g16167555ffed444486684687ccccdcff
27
+ 5,0,ca9c8777747fg99g44117775f77d444477886377ccccffef
28
+ ...
29
+ ```
30
+
31
+ Note: By default all datafiles (`**/*.csv`) in the `./data` and all subdirectories
32
+ get (auto-)read. Use the `-i/--include` option to change the data directory.
33
+
34
+
35
+
36
+ ### Kitty Genes Reader / Report
37
+
38
+ Pass in the id (e.g. `1`, `43`, etc.) of the kitty to print a genes report.
39
+ Example:
40
+
41
+ ```
42
+ $ kitty 1
43
+ ```
44
+
45
+ prints:
46
+
47
+ ```
48
+ # Kitty #1
49
+
50
+ genes (kai): ccac 7787 fa7f afaa 1646 7755 f9ee 4444 6766 7366 cccc eede
51
+
52
+ Fur (Genes 0-3)
53
+
54
+ |Gene| Binary |Kai (Tier)| Trait | |
55
+ |----|--------|----------|------------|----|
56
+ | 0 | 01101 | e (I) | **sphynx** | d |
57
+ | 1 | 01100 | d (I) | munchkin ) | r1 |
58
+ | 2 | 01101 | e (I) | sphynx | r2 |
59
+ | 3 | 01101 | e (I) | sphynx | r3 |
60
+
61
+ d = dominant, r1 = 1st order recessive, r2 = 2nd order recessive, r3 = 3rd order recessive
62
+
63
+ Pattern (Genes 4-7)
64
+
65
+ |Gene| Binary |Kai (Tier)| Trait | |
66
+ |----|--------|----------|------------|----|
67
+ | 4 | 01011 | c (I) | **jaguar** | d |
68
+ | 5 | 01011 | c (I) | jaguar | r1 |
69
+ | 6 | 01011 | c (I) | jaguar | r2 |
70
+ | 7 | 01011 | c (I) | jaguar | r3 |
71
+
72
+ Eye Color (Genes 8-11)
73
+
74
+ |Gene| Binary |Kai (Tier)| Trait | |
75
+ |----|--------|----------|-------------|----|
76
+ | 8 | 00101 | 6 (I) | **sizzurp** | d |
77
+ | 9 | 00101 | 6 (I) | sizzurp | r1 |
78
+ | 10 | 00010 | 3 (I) | topaz | r2 |
79
+ | 11 | 00110 | 7 (I) | chestnut | r3 |
80
+
81
+ Eye Shape (Genes 12-15)
82
+
83
+ |Gene| Binary |Kai (Tier)| Trait | |
84
+ |----|---------|----------|------------|----|
85
+ | 12 | 00101 | 6 (I) | **simple** | d |
86
+ | 13 | 00101 | 6 (I) | simple | r1 |
87
+ | 14 | 00110 | 7 (I) | crazy | r2 |
88
+ | 15 | 00101 | 6 (I) | simple | r3 |
89
+
90
+ Base Color (Genes 16-19)
91
+
92
+ |Gene| Binary |Kai (Tier)| Trait | |
93
+ |----|--------|----------|----------------|----|
94
+ | 16 | 00011 | 4 (I) | **orangesoda** | d |
95
+ | 17 | 00011 | 4 (I) | orangesoda | r1 |
96
+ | 18 | 00011 | 4 (I) | orangesoda | r2 |
97
+ | 19 | 00011 | 4 (I) | orangesoda | r3 |
98
+
99
+ Highlight Color (Genes 20-23)
100
+
101
+ |Gene| Binary |Kai (Tier)| Trait | |
102
+ |----|--------|----------|--------------|----|
103
+ | 20 | 01101 | e (I) | **lemonade** | d |
104
+ | 21 | 01101 | e (I) | lemonade | r1 |
105
+ | 22 | 01000 | 9 (I) | swampgreen | r2 |
106
+ | 23 | 01110 | f (I) | chocolate | r3 |
107
+
108
+ Accent Color (Genes 24-27)
109
+
110
+ |Gene| Binary |Kai (Tier)| Trait | |
111
+ |----|--------|----------|-----------------|----|
112
+ | 24 | 00100 | 5 (I) | **granitegrey** | d |
113
+ | 25 | 00100 | 5 (I) | granitegrey | r1 |
114
+ | 26 | 00110 | 7 (I) | kittencream | r2 |
115
+ | 27 | 00110 | 7 (I) | kittencream | r3 |
116
+
117
+ Wild (Genes 28-31)
118
+
119
+ |Gene| Binary |Kai (Tier)| Trait | |
120
+ |----|--------|----------|---------|----|
121
+ | 28 | 00101 | 6 (I) | **?** | d |
122
+ | 29 | 00011 | 4 (I) | ? | r1 |
123
+ | 30 | 00101 | 6 (I) | ? | r2 |
124
+ | 31 | 00000 | 1 (I) | ? | r3 |
125
+
126
+ Mouth (Genes 32-35)
127
+
128
+ |Gene| Binary |Kai (Tier)| Trait | |
129
+ |----|--------|----------|--------------|---|
130
+ | 32 | 01001 | a (I) | **pouty** | d |
131
+ | 33 | 01001 | a (I) | pouty | r1 |
132
+ | 34 | 01110 | f (I) | happygokitty | r2 |
133
+ | 35 | 01001 | a (I) | pouty | r3 |
134
+ ```
135
+
136
+
137
+ ### Kitty Mix Genes (Matron + Sire) Report
138
+
139
+ Pass in two ids for the matron and sire kitties to print a mix genes report.
140
+ Example:
141
+
142
+
143
+ ```
144
+ $ kitty 2 43
145
+ ```
146
+
147
+ prints:
148
+
149
+ ```
150
+ # Kitty #2 + #43
151
+
152
+ genes (kai) 1: ca9c 7575 f442 af9g 6664 5557 7777 4444 6686 8667 cccc ffec
153
+ genes (kai) 2: ca9a 7588 72a7 fa9f 4111 5555 dedf 4444 5888 4666 cccc fded
154
+
155
+ Fur (Genes 0-3)
156
+
157
+ |Gene|Kai|Trait (Matron) |Kai|Trait (Sire) | |
158
+ |----|---|---------------|---|--------------|----|
159
+ | 0 | c | **himalayan** | d | **munchkin** | d |
160
+ | 1 | e | sphynx | e | sphynx | r1 |
161
+ | 2 | f | ragamuffin | d | munchkin | r2 |
162
+ | 3 | f | ragamuffin | f | ragamuffin | r3 |
163
+
164
+ d = dominant, r1 = 1st order recessive, r2 = 2nd order recessive, r3 = 3rd order recessive
165
+
166
+ Pattern (Genes 4-7)
167
+
168
+ |Gene|Kai|Trait (Matron)|Kai|Trait (Sire)| |
169
+ |----|---|--------------|---|------------|----|
170
+ | 4 | c | **jaguar** | c | **jaguar** | d |
171
+ | 5 | c | jaguar | c | jaguar | r1 |
172
+ | 6 | c | jaguar | c | jaguar | r2 |
173
+ | 7 | c | jaguar | c | jaguar | r3 |
174
+
175
+ Eye Color (Genes 8-11)
176
+
177
+ |Gene|Kai|Trait (Matron)|Kai|Trait (Sire) | |
178
+ |----|---|--------------|---|-------------|----|
179
+ | 8 | 7 | **chestnut** | 6 | **sizzurp** | d |
180
+ | 9 | 6 | sizzurp | 6 | sizzurp | r1 |
181
+ | 10 | 6 | sizzurp | 6 | sizzurp | r2 |
182
+ | 11 | 8 | strawberry | 4 | mintgreen | r3 |
183
+
184
+ Eye Shape (Genes 12-15)
185
+
186
+ |Gene|Kai|Trait (Matron)|Kai|Trait (Sire) | |
187
+ |----|---|--------------|---|-----------------|----|
188
+ | 12 | 6 | **simple** | 8 | **thicccbrowz** | d |
189
+ | 13 | 8 | thicccbrowz | 8 | thicccbrowz | r1 |
190
+ | 14 | 6 | simple | 8 | thicccbrowz | r2 |
191
+ | 15 | 6 | simple | 5 | otaku | r3 |
192
+
193
+ Base Color (Genes 16-19)
194
+
195
+ |Gene|Kai|Trait (Matron) |Kai|Trait (Sire) | |
196
+ |----|---|----------------|---|----------------|----|
197
+ | 16 | 4 | **orangesoda** | 4 | **orangesoda** | d |
198
+ | 17 | 4 | orangesoda | 4 | orangesoda | r1 |
199
+ | 18 | 4 | orangesoda | 4 | orangesoda | r2 |
200
+ | 19 | 4 | orangesoda | 4 | orangesoda | r3 |
201
+
202
+ Highlight Color (Genes 20-23)
203
+
204
+ |Gene|Kai|Trait (Matron) |Kai|Trait (Sire) | |
205
+ |----|---|-----------------|---|---------------|----|
206
+ | 20 | 7 | **royalpurple** | f | **chocolate** | d |
207
+ | 21 | 7 | royalpurple | d | coffee | r1 |
208
+ | 22 | 7 | royalpurple | e | lemonade | r2 |
209
+ | 23 | 7 | royalpurple | d | coffee | r3 |
210
+
211
+ Accent Color (Genes 24-27)
212
+
213
+ |Gene|Kai|Trait (Matron) |Kai|Trait (Sire) | |
214
+ |----|---|-----------------|---|-----------------|----|
215
+ | 24 | 7 | **kittencream** | 5 | **granitegrey** | d |
216
+ | 25 | 5 | granitegrey | 5 | granitegrey | r1 |
217
+ | 26 | 5 | granitegrey | 5 | granitegrey | r2 |
218
+ | 27 | 5 | granitegrey | 5 | granitegrey | r3 |
219
+
220
+ Wild (Genes 28-31)
221
+
222
+ |Gene|Kai|Trait (Matron)|Kai|Trait (Sire)| |
223
+ |----|---|--------------|---|------------|----|
224
+ | 28 | 4 | **?** | 1 | **?** | d |
225
+ | 29 | 6 | ? | 1 | ? | r1 |
226
+ | 30 | 6 | ? | 1 | ? | r2 |
227
+ | 31 | 6 | ? | 4 | ? | r3 |
228
+
229
+ Mouth (Genes 32-35)
230
+
231
+ |Gene|Kai|Trait (Matron) |Kai|Trait (Sire) | |
232
+ |----|---|---------------|---|------------------|----|
233
+ | 32 | g | **soserious** | f | **happygokitty** | d |
234
+ | 33 | 9 | beard | 9 | beard | r1 |
235
+ | 34 | f | happygokitty | a | pouty | r2 |
236
+ | 35 | a | pouty | f | happygokitty | r3 |
237
+ ```
238
+
239
+
240
+
241
+
242
+ ## Quick References / Cheat Sheets
243
+
244
+ [Traits](TRAITS.md) - Traits (Cattributes) Charts with Mutation (Mewtations) Pairs and Tiers
245
+
246
+ [Genes](GENES.md) - Fur (0-3) • Pattern (4-7) • Eye Color (8-11) • Eye Shape (12-15) • Base Color (16-19) • Highlight Color (20-23) • Accent Color (24-27) • Wild (28-31) • Mouth (32-35) • Future 1 (36-39) • Future 2 (40-43) • Future 3 (44-47)
247
+
248
+
249
+
250
+
251
+ ## Installation - I Can Has Copycats?
252
+
253
+ Use:
254
+
255
+ ```
256
+ $ gem install copycats
257
+ ```
258
+
259
+
260
+
15
261
  ## License
16
262
 
17
263
  ![](https://publicdomainworks.github.io/buttons/zero88x31.png)
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ Hoe.spec 'copycats' do
5
5
 
6
6
  self.version = Copycats::VERSION
7
7
 
8
- self.summary = "copycats - command line tool (and core library) crypto cats / kitties collectibles unchained - buy! sell! hodl! sire! - play for free - runs off the blockchain - no ether or gas required; run your own peer-to-peer (P2P) network node over HTTP"
8
+ self.summary = "copycats - command line tool (and core library) crypto cats / kitties collectibles unchained - buy! sell! hodl! sire! - play for free - runs off the blockchain w/ ledger lite - no ether / gas required; run your own peer-to-peer (P2P) network node over HTTP"
9
9
  self.description = summary
10
10
 
11
11
  self.urls = ['https://github.com/openblockchains/copycats']
@@ -18,6 +18,8 @@ Hoe.spec 'copycats' do
18
18
  self.history_file = 'HISTORY.md'
19
19
 
20
20
  self.extra_deps = [
21
+ ['activerecord'],
22
+ ['sqlite3'],
21
23
  ]
22
24
 
23
25
  self.licenses = ['Public Domain']
data/bin/kitty ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ###################
4
+ # DEV TIPS:
5
+ #
6
+ # For local testing run like:
7
+ #
8
+ # ruby -I./lib bin/kitty
9
+ #
10
+ # Set the executable bit in Linux. Example:
11
+ #
12
+ # % chmod a+x bin/kitty
13
+ #
14
+
15
+ require 'copycats'
16
+
17
+ Copycats.main
data/lib/copycats.rb CHANGED
@@ -4,12 +4,65 @@ require 'pp' # for pp => pretty printer
4
4
 
5
5
  require 'date'
6
6
  require 'time'
7
+ require 'uri'
7
8
  require 'json'
9
+ require 'csv'
10
+ require 'enumerator' ## needed for each_slice
11
+ require 'optparse' # note: used for command line tool (see Tool in tool.rb)
8
12
 
13
+ require 'logger' # note: use for ActiveRecord::Base.logger -- remove/replace later w/ LogUtils::Logger ???
14
+
15
+ ## 3rd party gems
16
+ require 'active_record' ## todo: add sqlite3? etc.
9
17
 
10
18
 
11
19
  ## our own code
12
20
  require 'copycats/version' # note: let version always go first
21
+ require 'copycats/base32'
22
+ require 'copycats/traits'
23
+ require 'copycats/gene'
24
+ require 'copycats/genome'
25
+
26
+ require 'copycats/schema'
27
+ require 'copycats/data'
28
+
29
+ require 'copycats/models/kitty'
30
+
31
+ require 'copycats/reports/kitty'
32
+ require 'copycats/reports/mix'
33
+ require 'copycats/reports/genes'
34
+ require 'copycats/reports/traits'
35
+
36
+ require 'copycats/tool'
37
+
38
+
39
+ ## add wrapper for allowing configuration of random number generator
40
+ module Lottery
41
+
42
+ def self.random
43
+ @random ||= Random.new
44
+ end
45
+
46
+ def self.random=(value)
47
+ @random = value
48
+ end
49
+
50
+ def self.rand( arg=nil )
51
+ if arg.is_a? Integer
52
+ random.rand( arg ) ## max (number) = arg
53
+ else
54
+ random.rand ## between 0.0 and 1.0 (as floating point number)
55
+ end
56
+ end
57
+ end ## module Lottery
58
+
59
+
60
+ module Copycats
61
+ ## add command line binary (tool) e.g. $ try kitty -h
62
+ def self.main
63
+ Tool.new.run( ARGV )
64
+ end
65
+ end
13
66
 
14
67
 
15
68
 
@@ -0,0 +1,155 @@
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