trackler 2.0.6.1 → 2.0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/go/exercises/word-count/cases_test.go +23 -4
- data/tracks/go/exercises/word-count/example.go +6 -2
- data/tracks/go/exercises/word-count/word_count.go +1 -1
- data/tracks/go/exercises/word-count/word_count_test.go +1 -1
- data/tracks/pony/.travis.yml +16 -4
- data/tracks/pony/bin/install-deps +12 -0
- data/tracks/pony/bin/test-exercises +22 -0
- data/tracks/ruby/Gemfile +1 -0
- data/tracks/ruby/Rakefile +1 -1
- data/tracks/ruby/bin/generate +4 -29
- data/tracks/ruby/exercises/all-your-base/.meta/.version +1 -0
- data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +50 -60
- data/tracks/ruby/exercises/all-your-base/example.rb +13 -8
- data/tracks/ruby/exercises/all-your-base/example.tt +17 -0
- data/tracks/ruby/lib/all_your_base_cases.rb +109 -0
- data/tracks/ruby/lib/generator.rb +21 -100
- data/tracks/ruby/lib/generator/command_line.rb +119 -0
- data/tracks/ruby/lib/generator/files.rb +58 -0
- data/tracks/ruby/lib/generator/files/metadata_files.rb +22 -0
- data/tracks/ruby/lib/generator/files/track_files.rb +83 -0
- data/tracks/ruby/lib/generator/git_command.rb +8 -0
- data/tracks/ruby/lib/generator/repository.rb +62 -0
- data/tracks/ruby/lib/generator/template_values.rb +47 -0
- data/tracks/ruby/lib/helper.rb +5 -2
- data/tracks/ruby/test/fixtures/metadata/exercises/alpha/canonical-data.json +8 -9
- data/tracks/ruby/test/fixtures/{exercises → xruby/exercises}/alpha/.meta/.version +0 -0
- data/tracks/ruby/test/fixtures/{exercises → xruby/exercises}/alpha/example.rb +0 -0
- data/tracks/ruby/test/fixtures/xruby/exercises/alpha/example.tt +20 -0
- data/tracks/ruby/test/fixtures/xruby/lib/alpha_cases.rb +20 -0
- data/tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb +0 -0
- data/tracks/ruby/test/generator/command_line_test.rb +83 -0
- data/tracks/ruby/test/generator/files/metadata_files_test.rb +25 -0
- data/tracks/ruby/test/generator/files/track_files_test.rb +117 -0
- data/tracks/ruby/test/generator/files_test.rb +63 -0
- data/tracks/ruby/test/generator/git_command_test.rb +9 -0
- data/tracks/ruby/test/generator/repository_test.rb +98 -0
- data/tracks/ruby/test/generator/template_values_test.rb +59 -0
- data/tracks/ruby/test/generator_test.rb +19 -63
- data/tracks/ruby/test/test_helper.rb +8 -5
- metadata +26 -6
- data/tracks/ruby/test/fixtures/exercises/alpha/alpha_test.rb +0 -1
- data/tracks/ruby/test/fixtures/exercises/alpha/example.tt +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4e158fdc06604fcbf8f1d27f05a396e4261aaf1
|
4
|
+
data.tar.gz: 9f340d289a11e75954cff74b6443048991f45def
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f72f08277f2e36d640b7e99a9a527e11b48ff5160457a57590e7c48beed426b75b4191faf5286bf97880a39bf5fea9c49ad6716202c804617551b30c4d6190d
|
7
|
+
data.tar.gz: 908336cbfd218c1e95f05f6a2c16c1f9e158a05b43bac7df5d1e1af15a196ec9341597fad8a61cbf0760f240082b350fedd0d04b06a90660fafe99ba1fd864a9
|
data/lib/trackler/version.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
package wordcount
|
2
2
|
|
3
3
|
// Source: exercism/x-common
|
4
|
-
// Commit: 3b07e53 Merge pull request #117 from mikeyjcat/add-raindrops-json
|
5
4
|
|
6
5
|
var testCases = []struct {
|
7
6
|
description string
|
@@ -23,9 +22,19 @@ var testCases = []struct {
|
|
23
22
|
"one fish two fish red fish blue fish",
|
24
23
|
Frequency{"blue": 1, "fish": 4, "one": 1, "red": 1, "two": 1},
|
25
24
|
},
|
25
|
+
{
|
26
|
+
"handles cramped lists",
|
27
|
+
"one,two,three",
|
28
|
+
Frequency{"one": 1, "three": 1, "two": 1},
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"handles expanded lists",
|
32
|
+
"one,\ntwo,\nthree",
|
33
|
+
Frequency{"one": 1, "three": 1, "two": 1},
|
34
|
+
},
|
26
35
|
{
|
27
36
|
"ignore punctuation",
|
28
|
-
"car
|
37
|
+
"car: carpet as java: javascript!!&@$%^&",
|
29
38
|
Frequency{"as": 1, "car": 1, "carpet": 1, "java": 1, "javascript": 1},
|
30
39
|
},
|
31
40
|
{
|
@@ -35,7 +44,17 @@ var testCases = []struct {
|
|
35
44
|
},
|
36
45
|
{
|
37
46
|
"normalize case",
|
38
|
-
"go Go GO",
|
39
|
-
Frequency{"go": 3},
|
47
|
+
"go Go GO Stop stop",
|
48
|
+
Frequency{"go": 3, "stop": 2},
|
49
|
+
},
|
50
|
+
{
|
51
|
+
"with apostrophes",
|
52
|
+
"First: don't laugh. Then: don't cry.",
|
53
|
+
Frequency{"cry": 1, "don't": 2, "first": 1, "laugh": 1, "then": 1},
|
54
|
+
},
|
55
|
+
{
|
56
|
+
"with_quotations",
|
57
|
+
"Joe can't tell between 'large' and large.",
|
58
|
+
Frequency{"and": 1, "between": 1, "can't": 1, "joe": 1, "large": 2, "tell": 1},
|
40
59
|
},
|
41
60
|
}
|
@@ -5,20 +5,24 @@ import (
|
|
5
5
|
"strings"
|
6
6
|
)
|
7
7
|
|
8
|
-
const testVersion =
|
8
|
+
const testVersion = 3
|
9
9
|
|
10
|
+
// Frequency is a map of the frequency of occurrence keyed to the unique word.
|
10
11
|
type Frequency map[string]int
|
11
12
|
|
13
|
+
// WordCount returns the map of frequency of words based on the input phrase.
|
12
14
|
func WordCount(phrase string) Frequency {
|
13
15
|
freq := Frequency{}
|
14
16
|
for _, word := range strings.Fields(normalize(phrase)) {
|
17
|
+
word = strings.Trim(word, "'")
|
15
18
|
freq[word]++
|
16
19
|
}
|
17
20
|
return freq
|
18
21
|
}
|
19
22
|
|
20
23
|
func normalize(phrase string) string {
|
21
|
-
|
24
|
+
// Allow for apostrophes in words.
|
25
|
+
r, _ := regexp.Compile(`[^\w|']`)
|
22
26
|
phrase = strings.ToLower(phrase)
|
23
27
|
return r.ReplaceAllLiteralString(phrase, " ")
|
24
28
|
}
|
data/tracks/pony/.travis.yml
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
---
|
2
|
-
language:
|
2
|
+
language: c
|
3
|
+
|
4
|
+
sudo: true
|
5
|
+
|
6
|
+
install:
|
7
|
+
- sudo apt-get update -q
|
8
|
+
- sudo apt-get install -y python-software-properties
|
9
|
+
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
10
|
+
- sudo apt-get update -q
|
11
|
+
- sudo apt-get install -y wget git apt-transport-https g++-5 build-essential zlib1g-dev libncurses5-dev libssl-dev
|
12
|
+
|
13
|
+
- sudo bash bin/install-deps
|
14
|
+
|
3
15
|
script:
|
4
|
-
- bin/fetch-configlet
|
5
|
-
- bin/configlet .
|
6
|
-
|
16
|
+
- bin/fetch-configlet
|
17
|
+
- bin/configlet .
|
18
|
+
- bin/test-exercises
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# Install pcre2
|
4
|
+
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre2-10.21.tar.bz2
|
5
|
+
tar -xjvf pcre2-10.21.tar.bz2
|
6
|
+
cd pcre2-10.21 && ./configure --prefix=/usr && make && sudo make install && cd -
|
7
|
+
rm -r pcre2-10.21
|
8
|
+
|
9
|
+
# Insall ponyc
|
10
|
+
echo "deb https://dl.bintray.com/pony-language/ponyc-debian pony-language main" | sudo tee -a /etc/apt/sources.list
|
11
|
+
sudo apt-get update -q
|
12
|
+
sudo apt-get install -y --force-yes ponyc-release
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -eu
|
4
|
+
|
5
|
+
run_tests() {
|
6
|
+
local path=$1
|
7
|
+
local base=$(basename $path)
|
8
|
+
printf "\nRunning tests for %s\n\n" $base
|
9
|
+
(
|
10
|
+
cd $path
|
11
|
+
ponyc -d -V0
|
12
|
+
./$base
|
13
|
+
rm $base
|
14
|
+
)
|
15
|
+
}
|
16
|
+
|
17
|
+
exercises_dir="exercises/*"
|
18
|
+
|
19
|
+
for path in $exercises_dir; do
|
20
|
+
[ -d "${path}" ] || continue
|
21
|
+
run_tests $path
|
22
|
+
done
|
data/tracks/ruby/Gemfile
CHANGED
data/tracks/ruby/Rakefile
CHANGED
data/tracks/ruby/bin/generate
CHANGED
@@ -3,34 +3,9 @@
|
|
3
3
|
require_relative '../lib/helper'
|
4
4
|
require 'generator'
|
5
5
|
|
6
|
-
|
7
|
-
cases = File.join( __dir__, '../lib/*_cases.rb')
|
8
|
-
Dir[cases].map {|filename| /([^\/]*)_cases\.rb$/.match(filename).captures}
|
9
|
-
end
|
6
|
+
paths = Generator::Paths.new(track: XRUBY_ROOT, metadata: METADATA_REPOSITORY_PATH)
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
"Available exercise generators:\n" +
|
14
|
-
available_generators.sort.join(' ')
|
15
|
-
end
|
16
|
-
|
17
|
-
exercise = ARGV[0]
|
18
|
-
|
19
|
-
unless exercise
|
20
|
-
STDERR.puts "Exercise name required!\n"
|
21
|
-
puts usage
|
22
|
-
exit
|
23
|
-
end
|
24
|
-
|
25
|
-
cases = "#{exercise.tr('-','_')}_cases"
|
26
|
-
|
27
|
-
begin
|
28
|
-
require "#{cases}"
|
29
|
-
rescue LoadError
|
30
|
-
puts "A generator does not currently exist for #{exercise}!"
|
31
|
-
exit(1)
|
32
|
-
end
|
33
|
-
|
34
|
-
klass = Object.const_get(cases.split('_').map(&:capitalize).join)
|
35
|
-
Generator.new(exercise, klass).generate
|
8
|
+
generator = Generator::CommandLine.new(paths).parse(ARGV)
|
9
|
+
exit 1 unless generator
|
36
10
|
|
11
|
+
generator.call
|
@@ -0,0 +1 @@
|
|
1
|
+
2
|
@@ -1,9 +1,10 @@
|
|
1
|
-
gem 'minitest', '>= 5.0.0'
|
2
1
|
require 'minitest/autorun'
|
3
2
|
require_relative 'all_your_base'
|
4
3
|
|
4
|
+
# Test data version: aa12f2e
|
5
5
|
class AllYourBaseTest < Minitest::Test
|
6
|
-
def
|
6
|
+
def test_single_bit_one_to_decimal
|
7
|
+
# skip
|
7
8
|
digits = [1]
|
8
9
|
input_base = 2
|
9
10
|
output_base = 10
|
@@ -131,7 +132,7 @@ class AllYourBaseTest < Minitest::Test
|
|
131
132
|
def test_single_zero
|
132
133
|
skip
|
133
134
|
digits = [0]
|
134
|
-
input_base
|
135
|
+
input_base = 10
|
135
136
|
output_base = 2
|
136
137
|
expected = [0]
|
137
138
|
|
@@ -142,10 +143,10 @@ class AllYourBaseTest < Minitest::Test
|
|
142
143
|
"Expected #{expected} but got #{converted}."
|
143
144
|
end
|
144
145
|
|
145
|
-
def
|
146
|
+
def test_multiple_zeros
|
146
147
|
skip
|
147
148
|
digits = [0, 0, 0]
|
148
|
-
input_base
|
149
|
+
input_base = 10
|
149
150
|
output_base = 2
|
150
151
|
expected = [0]
|
151
152
|
|
@@ -175,13 +176,10 @@ class AllYourBaseTest < Minitest::Test
|
|
175
176
|
digits = [1, -1, 1, 0, 1, 0]
|
176
177
|
input_base = 2
|
177
178
|
output_base = 10
|
178
|
-
expected = nil
|
179
|
-
|
180
|
-
converted = BaseConverter.convert(input_base, digits, output_base)
|
181
179
|
|
182
|
-
|
183
|
-
|
184
|
-
|
180
|
+
assert_raises ArgumentError do
|
181
|
+
BaseConverter.convert(input_base, digits, output_base)
|
182
|
+
end
|
185
183
|
end
|
186
184
|
|
187
185
|
def test_invalid_positive_digit
|
@@ -189,13 +187,10 @@ class AllYourBaseTest < Minitest::Test
|
|
189
187
|
digits = [1, 2, 1, 0, 1, 0]
|
190
188
|
input_base = 2
|
191
189
|
output_base = 10
|
192
|
-
expected = nil
|
193
|
-
|
194
|
-
converted = BaseConverter.convert(input_base, digits, output_base)
|
195
190
|
|
196
|
-
|
197
|
-
|
198
|
-
|
191
|
+
assert_raises ArgumentError do
|
192
|
+
BaseConverter.convert(input_base, digits, output_base)
|
193
|
+
end
|
199
194
|
end
|
200
195
|
|
201
196
|
def test_first_base_is_one
|
@@ -203,13 +198,10 @@ class AllYourBaseTest < Minitest::Test
|
|
203
198
|
digits = []
|
204
199
|
input_base = 1
|
205
200
|
output_base = 10
|
206
|
-
expected = nil
|
207
201
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
"Input base: #{input_base}, output base #{output_base}. " \
|
212
|
-
"Expected #{expected} but got #{converted}."
|
202
|
+
assert_raises ArgumentError do
|
203
|
+
BaseConverter.convert(input_base, digits, output_base)
|
204
|
+
end
|
213
205
|
end
|
214
206
|
|
215
207
|
def test_second_base_is_one
|
@@ -217,13 +209,10 @@ class AllYourBaseTest < Minitest::Test
|
|
217
209
|
digits = [1, 0, 1, 0, 1, 0]
|
218
210
|
input_base = 2
|
219
211
|
output_base = 1
|
220
|
-
expected = nil
|
221
|
-
|
222
|
-
converted = BaseConverter.convert(input_base, digits, output_base)
|
223
212
|
|
224
|
-
|
225
|
-
|
226
|
-
|
213
|
+
assert_raises ArgumentError do
|
214
|
+
BaseConverter.convert(input_base, digits, output_base)
|
215
|
+
end
|
227
216
|
end
|
228
217
|
|
229
218
|
def test_first_base_is_zero
|
@@ -231,13 +220,10 @@ class AllYourBaseTest < Minitest::Test
|
|
231
220
|
digits = []
|
232
221
|
input_base = 0
|
233
222
|
output_base = 10
|
234
|
-
expected = nil
|
235
|
-
|
236
|
-
converted = BaseConverter.convert(input_base, digits, output_base)
|
237
223
|
|
238
|
-
|
239
|
-
|
240
|
-
|
224
|
+
assert_raises ArgumentError do
|
225
|
+
BaseConverter.convert(input_base, digits, output_base)
|
226
|
+
end
|
241
227
|
end
|
242
228
|
|
243
229
|
def test_second_base_is_zero
|
@@ -245,13 +231,10 @@ class AllYourBaseTest < Minitest::Test
|
|
245
231
|
digits = [7]
|
246
232
|
input_base = 10
|
247
233
|
output_base = 0
|
248
|
-
expected = nil
|
249
234
|
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
"Input base: #{input_base}, output base #{output_base}. " \
|
254
|
-
"Expected #{expected} but got #{converted}."
|
235
|
+
assert_raises ArgumentError do
|
236
|
+
BaseConverter.convert(input_base, digits, output_base)
|
237
|
+
end
|
255
238
|
end
|
256
239
|
|
257
240
|
def test_first_base_is_negative
|
@@ -259,13 +242,10 @@ class AllYourBaseTest < Minitest::Test
|
|
259
242
|
digits = [1]
|
260
243
|
input_base = -2
|
261
244
|
output_base = 10
|
262
|
-
expected = nil
|
263
|
-
|
264
|
-
converted = BaseConverter.convert(input_base, digits, output_base)
|
265
245
|
|
266
|
-
|
267
|
-
|
268
|
-
|
246
|
+
assert_raises ArgumentError do
|
247
|
+
BaseConverter.convert(input_base, digits, output_base)
|
248
|
+
end
|
269
249
|
end
|
270
250
|
|
271
251
|
def test_second_base_is_negative
|
@@ -273,13 +253,10 @@ class AllYourBaseTest < Minitest::Test
|
|
273
253
|
digits = [1]
|
274
254
|
input_base = 2
|
275
255
|
output_base = -7
|
276
|
-
expected = nil
|
277
|
-
|
278
|
-
converted = BaseConverter.convert(input_base, digits, output_base)
|
279
256
|
|
280
|
-
|
281
|
-
|
282
|
-
|
257
|
+
assert_raises ArgumentError do
|
258
|
+
BaseConverter.convert(input_base, digits, output_base)
|
259
|
+
end
|
283
260
|
end
|
284
261
|
|
285
262
|
def test_both_bases_are_negative
|
@@ -287,17 +264,30 @@ class AllYourBaseTest < Minitest::Test
|
|
287
264
|
digits = [1]
|
288
265
|
input_base = -2
|
289
266
|
output_base = -7
|
290
|
-
expected = nil
|
291
267
|
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
"Input base: #{input_base}, output base #{output_base}. " \
|
296
|
-
"Expected #{expected} but got #{converted}."
|
268
|
+
assert_raises ArgumentError do
|
269
|
+
BaseConverter.convert(input_base, digits, output_base)
|
270
|
+
end
|
297
271
|
end
|
298
272
|
|
273
|
+
# Problems in exercism evolve over time, as we find better ways to ask
|
274
|
+
# questions.
|
275
|
+
# The version number refers to the version of the problem you solved,
|
276
|
+
# not your solution.
|
277
|
+
#
|
278
|
+
# Define a constant named VERSION inside of the top level BookKeeping
|
279
|
+
# module, which may be placed near the end of your file.
|
280
|
+
#
|
281
|
+
# In your file, it will look like this:
|
282
|
+
#
|
283
|
+
# module BookKeeping
|
284
|
+
# VERSION = 1 # Where the version number matches the one in the test.
|
285
|
+
# end
|
286
|
+
#
|
287
|
+
# If you are curious, read more about constants on RubyDoc:
|
288
|
+
# http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
|
299
289
|
def test_bookkeeping
|
300
290
|
skip
|
301
|
-
assert_equal
|
291
|
+
assert_equal 2, BookKeeping::VERSION
|
302
292
|
end
|
303
293
|
end
|
@@ -1,21 +1,26 @@
|
|
1
1
|
module BookKeeping
|
2
|
-
VERSION =
|
2
|
+
VERSION = 2
|
3
3
|
end
|
4
4
|
|
5
5
|
class BaseConverter
|
6
6
|
def self.convert(base_from, number_array, base_to)
|
7
|
-
|
8
|
-
return if base_from <= 1 || base_to <= 1
|
7
|
+
fail ArgumentError if invalid_inputs?(base_from, number_array, base_to)
|
9
8
|
return [] unless number_array.any?
|
10
9
|
number_in_canonical_base = convert_to_canonical_base(number_array, base_from)
|
11
10
|
convert_from_canonical_base(number_in_canonical_base, base_to)
|
12
11
|
end
|
13
12
|
|
14
|
-
|
13
|
+
private_class_method
|
14
|
+
|
15
|
+
def self.invalid_inputs?(base_from, number_array, base_to)
|
16
|
+
number_array.any? { |number| number < 0 || number >= base_from } ||
|
17
|
+
base_from <= 1 || base_to <= 1
|
18
|
+
end
|
19
|
+
|
15
20
|
def self.convert_to_canonical_base(number_array, base)
|
16
21
|
total = 0
|
17
22
|
number_array.reverse.each_with_index do |number, index|
|
18
|
-
total += number * base
|
23
|
+
total += number * base**index
|
19
24
|
end
|
20
25
|
total
|
21
26
|
end
|
@@ -23,9 +28,9 @@ class BaseConverter
|
|
23
28
|
def self.convert_from_canonical_base(number, base_to)
|
24
29
|
result = []
|
25
30
|
current_number = number
|
26
|
-
while current_number >= base_to
|
27
|
-
|
28
|
-
|
31
|
+
while current_number >= base_to
|
32
|
+
result << current_number % base_to
|
33
|
+
current_number /= base_to
|
29
34
|
end
|
30
35
|
result << current_number % base_to
|
31
36
|
result.reverse
|