trackler 2.2.1.157 → 2.2.1.158

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: 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