trackler 2.0.5.12 → 2.0.5.13
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 +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/java/config.json +4 -24
- data/tracks/lua/config.json +10 -0
- data/tracks/lua/exercises/tournament/example.lua +80 -0
- data/tracks/lua/exercises/tournament/tournament_spec.lua +153 -0
- data/tracks/ruby/Gemfile +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3fb3f595ae75435478d8fbbef0c23e2162172ed
|
4
|
+
data.tar.gz: 80fd34ca47be249684cb10419cc188010031190d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f4ad43839ccb8751ab5d572c1711a66d8bbfdcd9549494e88b03fb67bdb5305052cb81abcf4060f229b845995096153714e0ffa13d77d19410f0fd5cd90cd6c
|
7
|
+
data.tar.gz: 35db17c7480a108dfc9599364d9092ab8da5ba8dac0d1c010d9ee4f5dcb2fa7b576431b0890912fed0567d24a49bd904b83a0261f66fcfe8ed9c76abad5b92bc
|
data/lib/trackler/version.rb
CHANGED
data/tracks/java/config.json
CHANGED
@@ -22,7 +22,6 @@
|
|
22
22
|
"acronym",
|
23
23
|
"scrabble-score",
|
24
24
|
"roman-numerals",
|
25
|
-
"binary",
|
26
25
|
"prime-factors",
|
27
26
|
"raindrops",
|
28
27
|
"allergies",
|
@@ -30,12 +29,9 @@
|
|
30
29
|
"atbash-cipher",
|
31
30
|
"accumulate",
|
32
31
|
"crypto-square",
|
33
|
-
"trinary",
|
34
32
|
"rna-transcription",
|
35
|
-
"hexadecimal",
|
36
33
|
"sieve",
|
37
34
|
"simple-cipher",
|
38
|
-
"octal",
|
39
35
|
"luhn",
|
40
36
|
"pig-latin",
|
41
37
|
"simple-linked-list",
|
@@ -150,11 +146,6 @@
|
|
150
146
|
"difficulty": 1,
|
151
147
|
"topics": []
|
152
148
|
},
|
153
|
-
{
|
154
|
-
"slug": "binary",
|
155
|
-
"difficulty": 1,
|
156
|
-
"topics": []
|
157
|
-
},
|
158
149
|
{
|
159
150
|
"slug": "prime-factors",
|
160
151
|
"difficulty": 1,
|
@@ -190,21 +181,11 @@
|
|
190
181
|
"difficulty": 1,
|
191
182
|
"topics": []
|
192
183
|
},
|
193
|
-
{
|
194
|
-
"slug": "trinary",
|
195
|
-
"difficulty": 1,
|
196
|
-
"topics": []
|
197
|
-
},
|
198
184
|
{
|
199
185
|
"slug": "rna-transcription",
|
200
186
|
"difficulty": 1,
|
201
187
|
"topics": []
|
202
188
|
},
|
203
|
-
{
|
204
|
-
"slug": "hexadecimal",
|
205
|
-
"difficulty": 1,
|
206
|
-
"topics": []
|
207
|
-
},
|
208
189
|
{
|
209
190
|
"slug": "sieve",
|
210
191
|
"difficulty": 1,
|
@@ -215,11 +196,6 @@
|
|
215
196
|
"difficulty": 1,
|
216
197
|
"topics": []
|
217
198
|
},
|
218
|
-
{
|
219
|
-
"slug": "octal",
|
220
|
-
"difficulty": 1,
|
221
|
-
"topics": []
|
222
|
-
},
|
223
199
|
{
|
224
200
|
"slug": "luhn",
|
225
201
|
"difficulty": 1,
|
@@ -332,6 +308,10 @@
|
|
332
308
|
}
|
333
309
|
],
|
334
310
|
"deprecated": [
|
311
|
+
"binary",
|
312
|
+
"hexadecimal",
|
313
|
+
"octal",
|
314
|
+
"trinary"
|
335
315
|
],
|
336
316
|
"ignored": [
|
337
317
|
"_template",
|
data/tracks/lua/config.json
CHANGED
@@ -488,6 +488,16 @@
|
|
488
488
|
"algorithms",
|
489
489
|
"control-flow (loops)"
|
490
490
|
]
|
491
|
+
}, {
|
492
|
+
"slug": "tournament",
|
493
|
+
"difficulty": 5,
|
494
|
+
"topics": [
|
495
|
+
"arrays",
|
496
|
+
"strings",
|
497
|
+
"text formatting",
|
498
|
+
"text parsing",
|
499
|
+
"control-flow (loops)"
|
500
|
+
]
|
491
501
|
}, {
|
492
502
|
"slug": "circular-buffer",
|
493
503
|
"difficulty": 4,
|
@@ -0,0 +1,80 @@
|
|
1
|
+
local function pad_right(s, width)
|
2
|
+
return s .. (' '):rep(width - #s)
|
3
|
+
end
|
4
|
+
|
5
|
+
local function parse(results)
|
6
|
+
local stats = {}
|
7
|
+
|
8
|
+
for _, result in ipairs(results) do
|
9
|
+
local t1, t2, outcome = result:match('^([^;]+);([^;]+);([^;]+)$')
|
10
|
+
|
11
|
+
if t1 and t2 and outcome then
|
12
|
+
stats[t1] = stats[t1] or { w = 0, l = 0, d = 0 }
|
13
|
+
stats[t2] = stats[t2] or { w = 0, l = 0, d = 0 }
|
14
|
+
|
15
|
+
if outcome == 'win' then
|
16
|
+
stats[t1].w = stats[t1].w + 1
|
17
|
+
stats[t2].l = stats[t2].l + 1
|
18
|
+
elseif outcome == 'loss' then
|
19
|
+
stats[t1].l = stats[t1].l + 1
|
20
|
+
stats[t2].w = stats[t2].w + 1
|
21
|
+
elseif outcome == 'draw' then
|
22
|
+
stats[t1].d = stats[t1].d + 1
|
23
|
+
stats[t2].d = stats[t2].d + 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
return stats
|
29
|
+
end
|
30
|
+
|
31
|
+
local function finalize(stats)
|
32
|
+
for _, team_stats in pairs(stats) do
|
33
|
+
team_stats.mp = team_stats.w + team_stats.l + team_stats.d
|
34
|
+
team_stats.p = team_stats.w * 3 + team_stats.d
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
local function sorted_stats(stats)
|
39
|
+
local sorted = {}
|
40
|
+
|
41
|
+
for name, stats in pairs(stats) do
|
42
|
+
table.insert(sorted, { name = name, stats = stats })
|
43
|
+
end
|
44
|
+
|
45
|
+
table.sort(sorted, function(x, y)
|
46
|
+
if x.stats.p == y.stats.p then
|
47
|
+
return x.name < y.name
|
48
|
+
else
|
49
|
+
return x.stats.p > y.stats.p
|
50
|
+
end
|
51
|
+
end)
|
52
|
+
|
53
|
+
return sorted
|
54
|
+
end
|
55
|
+
|
56
|
+
local function format(stats)
|
57
|
+
local sorted = sorted_stats(stats)
|
58
|
+
local formatted = {}
|
59
|
+
|
60
|
+
table.insert(formatted, pad_right('Team', 31) .. '| MP | W | D | L | P')
|
61
|
+
for _, b in ipairs(sorted) do
|
62
|
+
table.insert(formatted, string.format(
|
63
|
+
'%s| %2d | %2d | %2d | %2d | %2d',
|
64
|
+
pad_right(b.name, 31),
|
65
|
+
b.stats.mp,
|
66
|
+
b.stats.w,
|
67
|
+
b.stats.d,
|
68
|
+
b.stats.l,
|
69
|
+
b.stats.p
|
70
|
+
))
|
71
|
+
end
|
72
|
+
|
73
|
+
return formatted
|
74
|
+
end
|
75
|
+
|
76
|
+
return function(results)
|
77
|
+
local stats = parse(results)
|
78
|
+
finalize(stats)
|
79
|
+
return format(stats)
|
80
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
local tournament = require 'tournament'
|
2
|
+
|
3
|
+
describe('tournament', function()
|
4
|
+
it('should generate standings for a complete competition', function()
|
5
|
+
local results = {
|
6
|
+
'Allegoric Alaskans;Blithering Badgers;win',
|
7
|
+
'Devastating Donkeys;Courageous Californians;draw',
|
8
|
+
'Devastating Donkeys;Allegoric Alaskans;win',
|
9
|
+
'Courageous Californians;Blithering Badgers;loss',
|
10
|
+
'Blithering Badgers;Devastating Donkeys;loss',
|
11
|
+
'Allegoric Alaskans;Courageous Californians;win'
|
12
|
+
}
|
13
|
+
|
14
|
+
local expected = {
|
15
|
+
'Team | MP | W | D | L | P',
|
16
|
+
'Devastating Donkeys | 3 | 2 | 1 | 0 | 7',
|
17
|
+
'Allegoric Alaskans | 3 | 2 | 0 | 1 | 6',
|
18
|
+
'Blithering Badgers | 3 | 1 | 0 | 2 | 3',
|
19
|
+
'Courageous Californians | 3 | 0 | 1 | 2 | 1'
|
20
|
+
}
|
21
|
+
|
22
|
+
assert.are.same(expected, tournament(results))
|
23
|
+
end)
|
24
|
+
|
25
|
+
it('should generate standings for an incomplete competition', function()
|
26
|
+
local results = {
|
27
|
+
'Allegoric Alaskans;Blithering Badgers;loss',
|
28
|
+
'Devastating Donkeys;Allegoric Alaskans;loss',
|
29
|
+
'Courageous Californians;Blithering Badgers;draw',
|
30
|
+
'Allegoric Alaskans;Courageous Californians;win'
|
31
|
+
}
|
32
|
+
|
33
|
+
local expected = {
|
34
|
+
'Team | MP | W | D | L | P',
|
35
|
+
'Allegoric Alaskans | 3 | 2 | 0 | 1 | 6',
|
36
|
+
'Blithering Badgers | 2 | 1 | 1 | 0 | 4',
|
37
|
+
'Courageous Californians | 2 | 0 | 1 | 1 | 1',
|
38
|
+
'Devastating Donkeys | 1 | 0 | 0 | 1 | 0'
|
39
|
+
}
|
40
|
+
|
41
|
+
assert.are.same(expected, tournament(results))
|
42
|
+
end)
|
43
|
+
|
44
|
+
it('should break any ties alphabetically', function()
|
45
|
+
local results = {
|
46
|
+
'Courageous Californians;Devastating Donkeys;win',
|
47
|
+
'Allegoric Alaskans;Blithering Badgers;win',
|
48
|
+
'Devastating Donkeys;Allegoric Alaskans;loss',
|
49
|
+
'Courageous Californians;Blithering Badgers;win',
|
50
|
+
'Blithering Badgers;Devastating Donkeys;draw',
|
51
|
+
'Allegoric Alaskans;Courageous Californians;draw'
|
52
|
+
}
|
53
|
+
|
54
|
+
local expected = {
|
55
|
+
'Team | MP | W | D | L | P',
|
56
|
+
'Allegoric Alaskans | 3 | 2 | 1 | 0 | 7',
|
57
|
+
'Courageous Californians | 3 | 2 | 1 | 0 | 7',
|
58
|
+
'Blithering Badgers | 3 | 0 | 1 | 2 | 1',
|
59
|
+
'Devastating Donkeys | 3 | 0 | 1 | 2 | 1'
|
60
|
+
}
|
61
|
+
|
62
|
+
assert.are.same(expected, tournament(results))
|
63
|
+
end)
|
64
|
+
|
65
|
+
it('should ignore blank lines', function()
|
66
|
+
local results = {
|
67
|
+
'Allegoric Alaskans;Blithering Badgers;win',
|
68
|
+
'',
|
69
|
+
'Devastating Donkeys;Courageous Californians;draw',
|
70
|
+
'Devastating Donkeys@Courageous Californians;draw',
|
71
|
+
'Devastating Donkeys;Allegoric Alaskans;win',
|
72
|
+
'Courageous Californians;Blithering Badgers;loss',
|
73
|
+
'Blithering Badgers;Devastating Donkeys;loss',
|
74
|
+
'Allegoric Alaskans;Courageous Californians;win'
|
75
|
+
}
|
76
|
+
|
77
|
+
local expected = {
|
78
|
+
'Team | MP | W | D | L | P',
|
79
|
+
'Devastating Donkeys | 3 | 2 | 1 | 0 | 7',
|
80
|
+
'Allegoric Alaskans | 3 | 2 | 0 | 1 | 6',
|
81
|
+
'Blithering Badgers | 3 | 1 | 0 | 2 | 3',
|
82
|
+
'Courageous Californians | 3 | 0 | 1 | 2 | 1'
|
83
|
+
}
|
84
|
+
|
85
|
+
assert.are.same(expected, tournament(results))
|
86
|
+
end)
|
87
|
+
|
88
|
+
it('should ignore lines with invalid separators', function()
|
89
|
+
local results = {
|
90
|
+
'Allegoric Alaskans;Blithering Badgers;win',
|
91
|
+
'Devastating Donkeys;Courageous Californians;draw',
|
92
|
+
'Devastating Donkeys@Courageous Californians;draw',
|
93
|
+
'Devastating Donkeys;Allegoric Alaskans;win',
|
94
|
+
'Courageous Californians;Blithering Badgers;loss',
|
95
|
+
'Blithering Badgers;Devastating Donkeys;loss',
|
96
|
+
'Allegoric Alaskans;Courageous Californians;win'
|
97
|
+
}
|
98
|
+
|
99
|
+
local expected = {
|
100
|
+
'Team | MP | W | D | L | P',
|
101
|
+
'Devastating Donkeys | 3 | 2 | 1 | 0 | 7',
|
102
|
+
'Allegoric Alaskans | 3 | 2 | 0 | 1 | 6',
|
103
|
+
'Blithering Badgers | 3 | 1 | 0 | 2 | 3',
|
104
|
+
'Courageous Californians | 3 | 0 | 1 | 2 | 1'
|
105
|
+
}
|
106
|
+
|
107
|
+
assert.are.same(expected, tournament(results))
|
108
|
+
end)
|
109
|
+
|
110
|
+
it('should ignore lines with too many separators', function()
|
111
|
+
local results = {
|
112
|
+
'Allegoric Alaskans;Blithering Badgers;win',
|
113
|
+
'Devastating Donkeys;Courageous Californians;draw',
|
114
|
+
'Devastating Donkeys;Courageous Californians;draw;5',
|
115
|
+
'Devastating Donkeys;Allegoric Alaskans;win',
|
116
|
+
'Courageous Californians;Blithering Badgers;loss',
|
117
|
+
'Blithering Badgers;Devastating Donkeys;loss',
|
118
|
+
'Allegoric Alaskans;Courageous Californians;win'
|
119
|
+
}
|
120
|
+
|
121
|
+
local expected = {
|
122
|
+
'Team | MP | W | D | L | P',
|
123
|
+
'Devastating Donkeys | 3 | 2 | 1 | 0 | 7',
|
124
|
+
'Allegoric Alaskans | 3 | 2 | 0 | 1 | 6',
|
125
|
+
'Blithering Badgers | 3 | 1 | 0 | 2 | 3',
|
126
|
+
'Courageous Californians | 3 | 0 | 1 | 2 | 1'
|
127
|
+
}
|
128
|
+
|
129
|
+
assert.are.same(expected, tournament(results))
|
130
|
+
end)
|
131
|
+
|
132
|
+
it('should ignore lines with invalid match results', function()
|
133
|
+
local results = {
|
134
|
+
'Allegoric Alaskans;Blithering Badgers;win',
|
135
|
+
'Devastating Donkeys;Courageous Californians;draw',
|
136
|
+
'Devastating Donkeys;Allegoric Alaskans;dra',
|
137
|
+
'Devastating Donkeys;Allegoric Alaskans;win',
|
138
|
+
'Courageous Californians;Blithering Badgers;loss',
|
139
|
+
'Blithering Badgers;Devastating Donkeys;loss',
|
140
|
+
'Allegoric Alaskans;Courageous Californians;win'
|
141
|
+
}
|
142
|
+
|
143
|
+
local expected = {
|
144
|
+
'Team | MP | W | D | L | P',
|
145
|
+
'Devastating Donkeys | 3 | 2 | 1 | 0 | 7',
|
146
|
+
'Allegoric Alaskans | 3 | 2 | 0 | 1 | 6',
|
147
|
+
'Blithering Badgers | 3 | 1 | 0 | 2 | 3',
|
148
|
+
'Courageous Californians | 3 | 0 | 1 | 2 | 1'
|
149
|
+
}
|
150
|
+
|
151
|
+
assert.are.same(expected, tournament(results))
|
152
|
+
end)
|
153
|
+
end)
|
data/tracks/ruby/Gemfile
CHANGED
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.0.5.
|
4
|
+
version: 2.0.5.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -4597,6 +4597,8 @@ files:
|
|
4597
4597
|
- tracks/lua/exercises/sublist/sublist_spec.lua
|
4598
4598
|
- tracks/lua/exercises/sum-of-multiples/example.lua
|
4599
4599
|
- tracks/lua/exercises/sum-of-multiples/sum-of-multiples_spec.lua
|
4600
|
+
- tracks/lua/exercises/tournament/example.lua
|
4601
|
+
- tracks/lua/exercises/tournament/tournament_spec.lua
|
4600
4602
|
- tracks/lua/exercises/transpose/example.lua
|
4601
4603
|
- tracks/lua/exercises/transpose/transpose_spec.lua
|
4602
4604
|
- tracks/lua/exercises/triangle/example.lua
|