trackler 2.2.1.157 → 2.2.1.158

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79b12156e5d0f03cc7198761a82d88d046b5f819
4
- data.tar.gz: a32e3ae82cc87bf51b4830a0dd6a4249902688ef
3
+ metadata.gz: b019b44614dd8458a6088690169a84299df130ff
4
+ data.tar.gz: 0a622165cb86a6b6c703b5e662e73c3e8ab31599
5
5
  SHA512:
6
- metadata.gz: 03b5c2d43e94f9a8deba02c6cac9fbcd65ca915720aa7656d520bf8a22f299c4fb90152c36a7c58a19ad929eb1e268b97fda8de8fc32ff4f3cf07a35a0eae7a2
7
- data.tar.gz: 4c2c083aeb4c851ce566f2eddcb3a60e9ae05ef1321fd0025b06d396b14a486a5e211ddda71256cf9188dc651ba0b209815b8957c7b3318956a68a30afe247bf
6
+ metadata.gz: 7196c114c4b5606872ce6da898d557622c437b433fc2b503c84c9b647d93e62baa44357e6251493cf779e3b595ce38179f23e54c487731ad1cce056199ec11f4
7
+ data.tar.gz: 729f6daa031098a10aed27b29fab879165e2550b2b7b3330b6ced4fa481ca77959b9da6f8c3d6d16318eb99c11c34405601bb930292effd6d08b36efd1013219
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.157"
2
+ VERSION = "2.2.1.158"
3
3
  end
@@ -2,3 +2,4 @@
2
2
  .DS_Store
3
3
  bin/configlet
4
4
  bin/configlet.exe
5
+ .vscode
@@ -4,7 +4,6 @@
4
4
  "blurb": "Ruby is a dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write.",
5
5
  "gitter": "ruby",
6
6
  "solution_pattern": "[Ee]xample|\\.meta/solutions/[^/]*\\.rb",
7
- "foregone": [],
8
7
  "exercises": [
9
8
  {
10
9
  "slug": "hello-world",
@@ -733,16 +732,26 @@
733
732
  {
734
733
  "slug": "octal",
735
734
  "uuid": "cae4e000-3aac-41f7-b727-f9cce12d058d",
735
+ "core": false,
736
+ "unlocked_by": null,
737
+ "difficulty": 0,
738
+ "topics": null,
736
739
  "deprecated": true
737
740
  },
738
741
  {
739
742
  "slug": "point-mutations",
740
743
  "uuid": "89bd3d71-000f-4cd9-9a84-ad1b22ddbd33",
744
+ "core": false,
745
+ "unlocked_by": null,
746
+ "difficulty": 0,
747
+ "topics": null,
741
748
  "deprecated": true
742
749
  },
743
750
  {
744
751
  "slug": "complex-numbers",
745
752
  "uuid": "d75bd7c0-52c5-44f2-a046-f63cb332425f",
753
+ "core": false,
754
+ "unlocked_by": null,
746
755
  "difficulty": 3,
747
756
  "topics": [
748
757
  "mathematics"
@@ -770,6 +779,16 @@
770
779
  "logic",
771
780
  "loops"
772
781
  ]
782
+ },
783
+ {
784
+ "uuid": "239b8e79-2983-4ce0-9dda-9bb999e79d11",
785
+ "slug": "zipper",
786
+ "core": false,
787
+ "unlocked_by": null,
788
+ "difficulty": 7,
789
+ "topics": [
790
+ "Data Structures"
791
+ ]
773
792
  }
774
793
  ]
775
- }
794
+ }
@@ -1,64 +1,65 @@
1
1
  {
2
+ "docs_url": "",
2
3
  "maintainers": [
3
4
  {
4
- "alumnus": false,
5
- "avatar_url": null,
6
- "bio": null,
7
5
  "github_username": "kotp",
6
+ "alumnus": false,
7
+ "show_on_website": false,
8
+ "name": null,
8
9
  "link_text": null,
9
10
  "link_url": null,
10
- "name": null,
11
- "show_on_website": false
11
+ "avatar_url": null,
12
+ "bio": null
12
13
  },
13
14
  {
14
- "alumnus": false,
15
- "avatar_url": null,
16
- "bio": null,
17
15
  "github_username": "bernardoamc",
16
+ "alumnus": false,
17
+ "show_on_website": false,
18
+ "name": null,
18
19
  "link_text": null,
19
20
  "link_url": null,
20
- "name": null,
21
- "show_on_website": false
21
+ "avatar_url": null,
22
+ "bio": null
22
23
  },
23
24
  {
24
- "alumnus": false,
25
- "avatar_url": null,
26
- "bio": null,
27
25
  "github_username": "tommyschaefer",
26
+ "alumnus": false,
27
+ "show_on_website": false,
28
+ "name": null,
28
29
  "link_text": null,
29
30
  "link_url": null,
30
- "name": null,
31
- "show_on_website": false
31
+ "avatar_url": null,
32
+ "bio": null
32
33
  },
33
34
  {
34
- "alumnus": false,
35
- "avatar_url": null,
36
- "bio": null,
37
35
  "github_username": "hilary",
36
+ "alumnus": false,
37
+ "show_on_website": false,
38
+ "name": null,
38
39
  "link_text": null,
39
40
  "link_url": null,
40
- "name": null,
41
- "show_on_website": false
41
+ "avatar_url": null,
42
+ "bio": null
42
43
  },
43
44
  {
44
- "alumnus": false,
45
- "avatar_url": null,
46
- "bio": null,
47
45
  "github_username": "bmulvihill",
46
+ "alumnus": false,
47
+ "show_on_website": false,
48
+ "name": null,
48
49
  "link_text": null,
49
50
  "link_url": null,
50
- "name": null,
51
- "show_on_website": false
51
+ "avatar_url": null,
52
+ "bio": null
52
53
  },
53
54
  {
54
- "alumnus": false,
55
- "avatar_url": null,
56
- "bio": null,
57
55
  "github_username": "Insti",
56
+ "alumnus": false,
57
+ "show_on_website": false,
58
+ "name": null,
58
59
  "link_text": null,
59
60
  "link_url": null,
60
- "name": null,
61
- "show_on_website": false
61
+ "avatar_url": null,
62
+ "bio": null
62
63
  }
63
64
  ]
64
- }
65
+ }
@@ -0,0 +1,107 @@
1
+ require 'generator/exercise_case'
2
+
3
+ class ZipperCase < Generator::ExerciseCase
4
+ def workload
5
+ body = [
6
+ "#{initial_tree}\n",
7
+ "zipper = Zipper.from_tree(tree)\n",
8
+ "value = #{operations(input)}\n",
9
+ "#{expected_by_type}\n",
10
+ assertion
11
+ ]
12
+ indent(body, 4)
13
+ end
14
+
15
+ private
16
+
17
+ def initial_tree
18
+ indent([
19
+ "tree =\n",
20
+ build_tree(input['initialTree'])
21
+ ], 6)
22
+ end
23
+
24
+ def operations(input, zipper_name='zipper')
25
+ operation_chain = input['operations'].map do |op|
26
+ operation = op['operation']
27
+ item = op['item']
28
+
29
+ set_tree = lambda do
30
+ if item.nil?
31
+ "#{operation}(nil)"
32
+ else
33
+ depth = ' ' * 6
34
+ left = nil_if build_tree(item['left'], 5)
35
+ right = nil_if build_tree(item['right'], 5)
36
+ # I know. This line is crazy.
37
+ "#{operation}(\n#{depth}Node.new(#{item['value']},\n #{depth}#{left},\n #{depth}#{right}))"
38
+ end
39
+ end
40
+
41
+ case operation
42
+ when 'set_value'
43
+ "#{operation}(#{op['item']})"
44
+ when 'set_left'
45
+ set_tree.call
46
+ when 'set_right'
47
+ set_tree.call
48
+ else
49
+ operation
50
+ end
51
+ end.join('.')
52
+ "#{zipper_name}.%s" % operation_chain
53
+ end
54
+
55
+ def assertion
56
+ if expected['value'].nil? && expected['initialTree'].nil?
57
+ 'assert_nil value'
58
+ else
59
+ 'assert_equal expected, value'
60
+ end
61
+ end
62
+
63
+ def expected_by_type
64
+ case expected['type']
65
+ when 'tree'
66
+ indent([
67
+ "expected = \n",
68
+ build_tree(expected['value'])
69
+ ], 6)
70
+ when 'int'
71
+ "expected = #{expected['value']}"
72
+ when 'zipper'
73
+ if expected['initialTree']
74
+ indent([
75
+ "expected_tree =\n ",
76
+ "#{build_tree(expected['initialTree'])}\n",
77
+ "expected_zipper = Zipper.from_tree(expected_tree)\n",
78
+ "expected = #{operations(expected, 'expected_zipper')}"
79
+ ], 4)
80
+ elsif expected['value'].nil?
81
+ "expected = nil"
82
+ end
83
+ end
84
+ end
85
+
86
+ def build_tree(input, depth=4)
87
+ return 'nil' if input.nil?
88
+ next_depth = depth + 1
89
+ tree =
90
+ "Node.new(#{input['value']},\n",
91
+ "#{build_tree(input['left'], next_depth)},\n",
92
+ "#{build_tree(input['right'], next_depth)})"
93
+ indent(tree, depth * 2)
94
+ end
95
+
96
+ def indent(lines, spaces)
97
+ lines.join(' ' * spaces)
98
+ end
99
+
100
+ def nil_if(value)
101
+ if value.nil?
102
+ 'nil'
103
+ else
104
+ value
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,82 @@
1
+ module BookKeeping
2
+ VERSION = 71
3
+ end
4
+
5
+ Node = Struct.new(:value, :left, :right)
6
+
7
+ Crumb = Struct.new(:direction, :value, :tree)
8
+
9
+ class Zipper
10
+ attr_reader :value
11
+
12
+ def initialize(value, left, right, crumbs=[])
13
+ @value = value
14
+ @left = left
15
+ @right = right
16
+ @crumbs = crumbs
17
+ end
18
+
19
+ def self.from_tree(tree)
20
+ Zipper.new(tree.value, tree.left, tree.right)
21
+ end
22
+
23
+ def to_tree
24
+ tree = Node.new(value, @left, @right)
25
+ for crumb in @crumbs
26
+ case crumb.direction
27
+ when :left
28
+ tree = Node.new(crumb.value, tree.dup, crumb.tree)
29
+ when :right
30
+ tree = Node.new(crumb.value, crumb.tree, tree.dup)
31
+ end
32
+ end
33
+ tree
34
+ end
35
+
36
+ def left
37
+ return nil if @left.nil?
38
+ crumbs = [Crumb.new(:left, value, @right)] + @crumbs
39
+ Zipper.new(@left.value, @left.left, @left.right, crumbs)
40
+ end
41
+
42
+ def right
43
+ return nil if @right.nil?
44
+ crumbs = [Crumb.new(:right, value, @left)] + @crumbs
45
+ Zipper.new(@right.value, @right.left, @right.right, crumbs)
46
+ end
47
+
48
+ def up
49
+ crumb = @crumbs.first
50
+ return nil if crumb.nil?
51
+ remaining_crumbs = @crumbs.drop(1)
52
+ case crumb.direction
53
+ when :left
54
+ Zipper.new(crumb.value,
55
+ Node.new(value, @left, @right),
56
+ crumb.tree,
57
+ remaining_crumbs)
58
+ when :right
59
+ Zipper.new(crumb.value,
60
+ crumb.tree,
61
+ Node.new(value, @left, @right),
62
+ remaining_crumbs)
63
+ end
64
+ end
65
+
66
+ def set_value(new_value)
67
+ Zipper.new(new_value, @left, @right, @crumbs)
68
+ end
69
+
70
+ def set_left(node)
71
+ Zipper.new(value, node, @right, @crumbs)
72
+ end
73
+
74
+ def set_right(node)
75
+ Zipper.new(value, @left, node, @crumbs)
76
+ end
77
+
78
+ def ==(other_zipper)
79
+ return false unless other_zipper.is_a? Zipper
80
+ to_tree == other_zipper.to_tree
81
+ end
82
+ end
@@ -0,0 +1,54 @@
1
+ # Zipper
2
+
3
+ Creating a zipper for a binary tree.
4
+
5
+ [Zippers](https://en.wikipedia.org/wiki/Zipper_%28data_structure%29) are
6
+ a purely functional way of navigating within a data structure and
7
+ manipulating it. They essentially contain a data structure and a
8
+ pointer into that data structure (called the focus).
9
+
10
+ For example given a rose tree (where each node contains a value and a
11
+ list of child nodes) a zipper might support these operations:
12
+
13
+ - `from_tree` (get a zipper out of a rose tree, the focus is on the root node)
14
+ - `to_tree` (get the rose tree out of the zipper)
15
+ - `value` (get the value of the focus node)
16
+ - `prev` (move the focus to the previous child of the same parent,
17
+ returns a new zipper)
18
+ - `next` (move the focus to the next child of the same parent, returns a
19
+ new zipper)
20
+ - `up` (move the focus to the parent, returns a new zipper)
21
+ - `set_value` (set the value of the focus node, returns a new zipper)
22
+ - `insert_before` (insert a new subtree before the focus node, it
23
+ becomes the `prev` of the focus node, returns a new zipper)
24
+ - `insert_after` (insert a new subtree after the focus node, it becomes
25
+ the `next` of the focus node, returns a new zipper)
26
+ - `delete` (removes the focus node and all subtrees, focus moves to the
27
+ `next` node if possible otherwise to the `prev` node if possible,
28
+ otherwise to the parent node, returns a new zipper)
29
+
30
+ * * * *
31
+
32
+ For installation and learning resources, refer to the
33
+ [exercism help page](http://exercism.io/languages/ruby).
34
+
35
+ For running the tests provided, you will need the Minitest gem. Open a
36
+ terminal window and run the following command to install minitest:
37
+
38
+ gem install minitest
39
+
40
+ If you would like color output, you can `require 'minitest/pride'` in
41
+ the test file, or note the alternative instruction, below, for running
42
+ the test file.
43
+
44
+ Run the tests from the exercise directory using the following command:
45
+
46
+ ruby zipper_test.rb
47
+
48
+ To include color from the command line:
49
+
50
+ ruby -r minitest/pride zipper_test.rb
51
+
52
+
53
+ ## Submitting Incomplete Solutions
54
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,358 @@
1
+ require 'minitest/autorun'
2
+ require_relative 'zipper'
3
+
4
+ # Common test data version: 1.1.0 6fb5601
5
+ class ZipperTest < Minitest::Test
6
+ def test_data_is_retained
7
+ # skip
8
+ tree =
9
+ Node.new(1,
10
+ Node.new(2,
11
+ nil,
12
+ Node.new(3,
13
+ nil,
14
+ nil)),
15
+ Node.new(4,
16
+ nil,
17
+ nil))
18
+ zipper = Zipper.from_tree(tree)
19
+ value = zipper.to_tree
20
+ expected =
21
+ Node.new(1,
22
+ Node.new(2,
23
+ nil,
24
+ Node.new(3,
25
+ nil,
26
+ nil)),
27
+ Node.new(4,
28
+ nil,
29
+ nil))
30
+ assert_equal expected, value
31
+ end
32
+
33
+ def test_left_right_and_value
34
+ skip
35
+ tree =
36
+ Node.new(1,
37
+ Node.new(2,
38
+ nil,
39
+ Node.new(3,
40
+ nil,
41
+ nil)),
42
+ Node.new(4,
43
+ nil,
44
+ nil))
45
+ zipper = Zipper.from_tree(tree)
46
+ value = zipper.left.right.value
47
+ expected = 3
48
+ assert_equal expected, value
49
+ end
50
+
51
+ def test_dead_end
52
+ skip
53
+ tree =
54
+ Node.new(1,
55
+ Node.new(2,
56
+ nil,
57
+ Node.new(3,
58
+ nil,
59
+ nil)),
60
+ Node.new(4,
61
+ nil,
62
+ nil))
63
+ zipper = Zipper.from_tree(tree)
64
+ value = zipper.left.left
65
+ expected = nil
66
+ assert_nil value
67
+ end
68
+
69
+ def test_tree_from_deep_focus
70
+ skip
71
+ tree =
72
+ Node.new(1,
73
+ Node.new(2,
74
+ nil,
75
+ Node.new(3,
76
+ nil,
77
+ nil)),
78
+ Node.new(4,
79
+ nil,
80
+ nil))
81
+ zipper = Zipper.from_tree(tree)
82
+ value = zipper.left.right.to_tree
83
+ expected =
84
+ Node.new(1,
85
+ Node.new(2,
86
+ nil,
87
+ Node.new(3,
88
+ nil,
89
+ nil)),
90
+ Node.new(4,
91
+ nil,
92
+ nil))
93
+ assert_equal expected, value
94
+ end
95
+
96
+ def test_traversing_up_from_top
97
+ skip
98
+ tree =
99
+ Node.new(1,
100
+ Node.new(2,
101
+ nil,
102
+ Node.new(3,
103
+ nil,
104
+ nil)),
105
+ Node.new(4,
106
+ nil,
107
+ nil))
108
+ zipper = Zipper.from_tree(tree)
109
+ value = zipper.up
110
+ expected = nil
111
+ assert_nil value
112
+ end
113
+
114
+ def test_left_right_and_up
115
+ skip
116
+ tree =
117
+ Node.new(1,
118
+ Node.new(2,
119
+ nil,
120
+ Node.new(3,
121
+ nil,
122
+ nil)),
123
+ Node.new(4,
124
+ nil,
125
+ nil))
126
+ zipper = Zipper.from_tree(tree)
127
+ value = zipper.left.up.right.up.left.right.value
128
+ expected = 3
129
+ assert_equal expected, value
130
+ end
131
+
132
+ def test_set_value
133
+ skip
134
+ tree =
135
+ Node.new(1,
136
+ Node.new(2,
137
+ nil,
138
+ Node.new(3,
139
+ nil,
140
+ nil)),
141
+ Node.new(4,
142
+ nil,
143
+ nil))
144
+ zipper = Zipper.from_tree(tree)
145
+ value = zipper.left.set_value(5).to_tree
146
+ expected =
147
+ Node.new(1,
148
+ Node.new(5,
149
+ nil,
150
+ Node.new(3,
151
+ nil,
152
+ nil)),
153
+ Node.new(4,
154
+ nil,
155
+ nil))
156
+ assert_equal expected, value
157
+ end
158
+
159
+ def test_set_value_after_traversing_up
160
+ skip
161
+ tree =
162
+ Node.new(1,
163
+ Node.new(2,
164
+ nil,
165
+ Node.new(3,
166
+ nil,
167
+ nil)),
168
+ Node.new(4,
169
+ nil,
170
+ nil))
171
+ zipper = Zipper.from_tree(tree)
172
+ value = zipper.left.right.up.set_value(5).to_tree
173
+ expected =
174
+ Node.new(1,
175
+ Node.new(5,
176
+ nil,
177
+ Node.new(3,
178
+ nil,
179
+ nil)),
180
+ Node.new(4,
181
+ nil,
182
+ nil))
183
+ assert_equal expected, value
184
+ end
185
+
186
+ def test_set_left_with_leaf
187
+ skip
188
+ tree =
189
+ Node.new(1,
190
+ Node.new(2,
191
+ nil,
192
+ Node.new(3,
193
+ nil,
194
+ nil)),
195
+ Node.new(4,
196
+ nil,
197
+ nil))
198
+ zipper = Zipper.from_tree(tree)
199
+ value = zipper.left.set_left(
200
+ Node.new(5,
201
+ nil,
202
+ nil)).to_tree
203
+ expected =
204
+ Node.new(1,
205
+ Node.new(2,
206
+ Node.new(5,
207
+ nil,
208
+ nil),
209
+ Node.new(3,
210
+ nil,
211
+ nil)),
212
+ Node.new(4,
213
+ nil,
214
+ nil))
215
+ assert_equal expected, value
216
+ end
217
+
218
+ def test_set_right_with_null
219
+ skip
220
+ tree =
221
+ Node.new(1,
222
+ Node.new(2,
223
+ nil,
224
+ Node.new(3,
225
+ nil,
226
+ nil)),
227
+ Node.new(4,
228
+ nil,
229
+ nil))
230
+ zipper = Zipper.from_tree(tree)
231
+ value = zipper.left.set_right(nil).to_tree
232
+ expected =
233
+ Node.new(1,
234
+ Node.new(2,
235
+ nil,
236
+ nil),
237
+ Node.new(4,
238
+ nil,
239
+ nil))
240
+ assert_equal expected, value
241
+ end
242
+
243
+ def test_set_right_with_subtree
244
+ skip
245
+ tree =
246
+ Node.new(1,
247
+ Node.new(2,
248
+ nil,
249
+ Node.new(3,
250
+ nil,
251
+ nil)),
252
+ Node.new(4,
253
+ nil,
254
+ nil))
255
+ zipper = Zipper.from_tree(tree)
256
+ value = zipper.set_right(
257
+ Node.new(6,
258
+ Node.new(7,
259
+ nil,
260
+ nil),
261
+ Node.new(8,
262
+ nil,
263
+ nil))).to_tree
264
+ expected =
265
+ Node.new(1,
266
+ Node.new(2,
267
+ nil,
268
+ Node.new(3,
269
+ nil,
270
+ nil)),
271
+ Node.new(6,
272
+ Node.new(7,
273
+ nil,
274
+ nil),
275
+ Node.new(8,
276
+ nil,
277
+ nil)))
278
+ assert_equal expected, value
279
+ end
280
+
281
+ def test_set_value_on_deep_focus
282
+ skip
283
+ tree =
284
+ Node.new(1,
285
+ Node.new(2,
286
+ nil,
287
+ Node.new(3,
288
+ nil,
289
+ nil)),
290
+ Node.new(4,
291
+ nil,
292
+ nil))
293
+ zipper = Zipper.from_tree(tree)
294
+ value = zipper.left.right.set_value(5).to_tree
295
+ expected =
296
+ Node.new(1,
297
+ Node.new(2,
298
+ nil,
299
+ Node.new(5,
300
+ nil,
301
+ nil)),
302
+ Node.new(4,
303
+ nil,
304
+ nil))
305
+ assert_equal expected, value
306
+ end
307
+
308
+ def test_different_paths_to_same_zipper
309
+ skip
310
+ tree =
311
+ Node.new(1,
312
+ Node.new(2,
313
+ nil,
314
+ Node.new(3,
315
+ nil,
316
+ nil)),
317
+ Node.new(4,
318
+ nil,
319
+ nil))
320
+ zipper = Zipper.from_tree(tree)
321
+ value = zipper.left.up.right
322
+ expected_tree =
323
+ Node.new(1,
324
+ Node.new(2,
325
+ nil,
326
+ Node.new(3,
327
+ nil,
328
+ nil)),
329
+ Node.new(4,
330
+ nil,
331
+ nil))
332
+ expected_zipper = Zipper.from_tree(expected_tree)
333
+ expected = expected_zipper.right
334
+ assert_equal expected, value
335
+ end
336
+
337
+ # Problems in exercism evolve over time, as we find better ways to ask
338
+ # questions.
339
+ # The version number refers to the version of the problem you solved,
340
+ # not your solution.
341
+ #
342
+ # Define a constant named VERSION inside of the top level BookKeeping
343
+ # module, which may be placed near the end of your file.
344
+ #
345
+ # In your file, it will look like this:
346
+ #
347
+ # module BookKeeping
348
+ # VERSION = 1 # Where the version number matches the one in the test.
349
+ # end
350
+ #
351
+ # If you are curious, read more about constants on RubyDoc:
352
+ # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
353
+
354
+ def test_bookkeeping
355
+ skip
356
+ assert_equal 71, BookKeeping::VERSION
357
+ end
358
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trackler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1.157
4
+ version: 2.2.1.158
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-08 00:00:00.000000000 Z
11
+ date: 2018-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -12932,6 +12932,11 @@ files:
12932
12932
  - tracks/ruby/exercises/wordy/.meta/solutions/wordy.rb
12933
12933
  - tracks/ruby/exercises/wordy/README.md
12934
12934
  - tracks/ruby/exercises/wordy/wordy_test.rb
12935
+ - tracks/ruby/exercises/zipper/.meta/.version
12936
+ - tracks/ruby/exercises/zipper/.meta/generator/zipper_case.rb
12937
+ - tracks/ruby/exercises/zipper/.meta/solutions/zipper.rb
12938
+ - tracks/ruby/exercises/zipper/README.md
12939
+ - tracks/ruby/exercises/zipper/zipper_test.rb
12935
12940
  - tracks/ruby/img/icon.png
12936
12941
  - tracks/ruby/lib/bookkeeping.md
12937
12942
  - tracks/ruby/lib/disable_skip.rb