trackler 2.0.3.5 → 2.0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/exercises/leap/canonical-data.json +8 -23
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/exercises/meetup/makefile +1 -1
- data/tracks/crystal/config.json +0 -18
- data/tracks/dlang/config.json +13 -94
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTreeTest.fs +2 -2
- data/tracks/haskell/README.md +118 -24
- data/tracks/perl5/config.json +5 -0
- data/tracks/perl5/exercises/all-your-base/Example.pm +32 -0
- data/tracks/perl5/exercises/all-your-base/all-your-base.t +184 -0
- data/tracks/perl6/config.json +5 -0
- data/tracks/perl6/exercises/trinary/Example.p6 +6 -0
- data/tracks/perl6/exercises/trinary/trinary.t +60 -0
- data/tracks/rust/exercises/allergies/.gitignore +7 -0
- data/tracks/rust/exercises/anagram/.gitignore +7 -0
- data/tracks/rust/exercises/beer-song/.gitignore +7 -0
- data/tracks/rust/exercises/bob/.gitignore +7 -0
- data/tracks/rust/exercises/bracket-push/.gitignore +7 -0
- data/tracks/rust/exercises/circular-buffer/.gitignore +7 -0
- data/tracks/rust/exercises/custom-set/.gitignore +7 -0
- data/tracks/rust/exercises/difference-of-squares/.gitignore +7 -0
- data/tracks/rust/exercises/dominoes/.gitignore +7 -0
- data/tracks/rust/exercises/etl/.gitignore +7 -0
- data/tracks/rust/exercises/forth/.gitignore +7 -0
- data/tracks/rust/exercises/gigasecond/.gitignore +7 -0
- data/tracks/rust/exercises/grade-school/.gitignore +7 -0
- data/tracks/rust/exercises/hamming/.gitignore +7 -0
- data/tracks/rust/exercises/hello-world/.gitignore +7 -0
- data/tracks/rust/exercises/hexadecimal/.gitignore +7 -0
- data/tracks/rust/exercises/leap/.gitignore +7 -0
- data/tracks/rust/exercises/minesweeper/.gitignore +7 -0
- data/tracks/rust/exercises/nucleotide-codons/.gitignore +7 -0
- data/tracks/rust/exercises/nucleotide-count/.gitignore +7 -0
- data/tracks/rust/exercises/ocr-numbers/.gitignore +7 -0
- data/tracks/rust/exercises/pangram/.gitignore +7 -0
- data/tracks/rust/exercises/parallel-letter-frequency/.gitignore +7 -0
- data/tracks/rust/exercises/phone-number/.gitignore +7 -0
- data/tracks/rust/exercises/queen-attack/.gitignore +7 -0
- data/tracks/rust/exercises/raindrops/.gitignore +7 -0
- data/tracks/rust/exercises/rectangles/.gitignore +7 -0
- data/tracks/rust/exercises/rna-transcription/.gitignore +7 -0
- data/tracks/rust/exercises/robot-name/.gitignore +7 -0
- data/tracks/rust/exercises/robot-simulator/.gitignore +7 -0
- data/tracks/rust/exercises/roman-numerals/.gitignore +7 -0
- data/tracks/rust/exercises/scrabble-score/.gitignore +7 -0
- data/tracks/rust/exercises/sieve/.gitignore +7 -0
- data/tracks/rust/exercises/space-age/.gitignore +7 -0
- data/tracks/rust/exercises/sublist/.gitignore +7 -0
- data/tracks/rust/exercises/tournament/.gitignore +7 -0
- data/tracks/rust/exercises/variable-length-quantity/.gitignore +7 -0
- data/tracks/rust/exercises/word-count/.gitignore +7 -0
- data/tracks/rust/exercises/wordy/.gitignore +7 -0
- metadata +45 -2
data/tracks/perl5/config.json
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
package Example;
|
2
|
+
|
3
|
+
use strict;
|
4
|
+
use warnings;
|
5
|
+
|
6
|
+
use Carp;
|
7
|
+
|
8
|
+
sub convert_base {
|
9
|
+
my( $digits, $in_base, $out_base ) = @_;
|
10
|
+
|
11
|
+
croak "base must be greater than 1" if grep { $_ <= 1 } $in_base, $out_base;
|
12
|
+
|
13
|
+
croak 'negative digit not allowed' if grep { $_ < 0 } @$digits;
|
14
|
+
|
15
|
+
croak 'digit equal of greater than the base' if grep { $_ >= $in_base } @$digits;
|
16
|
+
|
17
|
+
my $number = 0;
|
18
|
+
$number = $number * $in_base + $_ for @$digits;
|
19
|
+
|
20
|
+
my @output;
|
21
|
+
|
22
|
+
while( $number ) {
|
23
|
+
unshift @output, $number % $out_base;
|
24
|
+
$number = int $number / $out_base;
|
25
|
+
}
|
26
|
+
|
27
|
+
push @output, 0 unless @output;
|
28
|
+
|
29
|
+
return \@output;
|
30
|
+
}
|
31
|
+
|
32
|
+
1;
|
@@ -0,0 +1,184 @@
|
|
1
|
+
#!/usr/bin/env perl
|
2
|
+
use strict;
|
3
|
+
use warnings;
|
4
|
+
|
5
|
+
use Test::More;
|
6
|
+
use FindBin;
|
7
|
+
my $dir;
|
8
|
+
BEGIN { $dir = $FindBin::Bin . '/' };
|
9
|
+
use lib $dir;
|
10
|
+
|
11
|
+
my $module = $ENV{EXERCISM} ? 'Example' : 'AllYourBase';
|
12
|
+
|
13
|
+
my $function = 'convert_base';
|
14
|
+
|
15
|
+
plan tests => 24;
|
16
|
+
|
17
|
+
ok -e "${dir}${module}.pm", "$module.pm present"
|
18
|
+
or BAIL_OUT "You need to create file: $module.pm";
|
19
|
+
|
20
|
+
eval "use $module";
|
21
|
+
ok !$@, "can load $module"
|
22
|
+
or BAIL_OUT "Cannot load $module. Does it compile? Does it end with 1;?";
|
23
|
+
can_ok $module, $function
|
24
|
+
or BAIL_OUT "Missing package $module; or missing sub $function()?";
|
25
|
+
|
26
|
+
my $sub = \&{ join '::', $module, $function };
|
27
|
+
|
28
|
+
sub testcase {
|
29
|
+
my %test = @_;
|
30
|
+
|
31
|
+
my $r = eval {
|
32
|
+
# cloning the input_digits to make sure the sub doesn't modify the
|
33
|
+
# original array
|
34
|
+
$sub->( [ @{$test{input_digits}} ], $test{input_base}, $test{output_base} )
|
35
|
+
};
|
36
|
+
|
37
|
+
my $success = $test{error}
|
38
|
+
? like( $@ => $test{error}, $test{description} )
|
39
|
+
: is_deeply( $r, $test{output_digits}, $test{description} )
|
40
|
+
;
|
41
|
+
|
42
|
+
return if $success;
|
43
|
+
|
44
|
+
$test{got} = $r;
|
45
|
+
diag explain \%test;
|
46
|
+
BAIL_OUT( 'a test failed, try again!' );
|
47
|
+
}
|
48
|
+
|
49
|
+
testcase(%$_) for
|
50
|
+
{ "description" => "single bit one to decimal"
|
51
|
+
, "input_base" => 2
|
52
|
+
, "input_digits" => [1]
|
53
|
+
, "output_base" => 10
|
54
|
+
, "output_digits"=> [1]
|
55
|
+
},
|
56
|
+
{ "description" => "binary to single decimal"
|
57
|
+
, "input_base" => 2
|
58
|
+
, "input_digits" => [1, 0, 1]
|
59
|
+
, "output_base" => 10
|
60
|
+
, "output_digits"=> [5]
|
61
|
+
},
|
62
|
+
{ "description" => "single decimal to binary"
|
63
|
+
, "input_base" => 10
|
64
|
+
, "input_digits" => [5]
|
65
|
+
, "output_base" => 2
|
66
|
+
, "output_digits"=> [1, 0, 1]
|
67
|
+
},
|
68
|
+
{ "description" => "binary to multiple decimal"
|
69
|
+
, "input_base" => 2
|
70
|
+
, "input_digits" => [1, 0, 1, 0, 1, 0]
|
71
|
+
, "output_base" => 10
|
72
|
+
, "output_digits"=> [4, 2]
|
73
|
+
},
|
74
|
+
{ "description" => "decimal to binary"
|
75
|
+
, "input_base" => 10
|
76
|
+
, "input_digits" => [4, 2]
|
77
|
+
, "output_base" => 2
|
78
|
+
, "output_digits"=> [1, 0, 1, 0, 1, 0]
|
79
|
+
},
|
80
|
+
{ "description" => "trinary to hexadecimal"
|
81
|
+
, "input_base" => 3
|
82
|
+
, "input_digits" => [1, 1, 2, 0]
|
83
|
+
, "output_base" => 16
|
84
|
+
, "output_digits"=> [2, 10]
|
85
|
+
},
|
86
|
+
{ "description" => "hexadecimal to trinary"
|
87
|
+
, "input_base" => 16
|
88
|
+
, "input_digits" => [2, 10]
|
89
|
+
, "output_base" => 3
|
90
|
+
, "output_digits"=> [1, 1, 2, 0]
|
91
|
+
},
|
92
|
+
{ "description" => "15-bit integer"
|
93
|
+
, "input_base" => 97
|
94
|
+
, "input_digits" => [3,46,60]
|
95
|
+
, "output_base" => 73
|
96
|
+
, "output_digits"=> [6,10,45]
|
97
|
+
},
|
98
|
+
{ "description" => "empty list"
|
99
|
+
, "input_base" => 2
|
100
|
+
, "input_digits" => []
|
101
|
+
, "output_base" => 10
|
102
|
+
, "output_digits"=> [0]
|
103
|
+
},
|
104
|
+
{ "description" => "single zero"
|
105
|
+
, "input_base" => 10
|
106
|
+
, "input_digits" => [0]
|
107
|
+
, "output_base" => 2
|
108
|
+
, "output_digits"=> [0]
|
109
|
+
},
|
110
|
+
{ "description" => "multiple zeros"
|
111
|
+
, "input_base" => 10
|
112
|
+
, "input_digits" => [0, 0, 0]
|
113
|
+
, "output_base" => 2
|
114
|
+
, "output_digits"=> [0]
|
115
|
+
},
|
116
|
+
{ "description" => "leading zeros"
|
117
|
+
, "input_base" => 7
|
118
|
+
, "input_digits" => [0, 6, 0]
|
119
|
+
, "output_base" => 10
|
120
|
+
, "output_digits"=> [ 4, 2 ]
|
121
|
+
},
|
122
|
+
{ "description" => "negative digit"
|
123
|
+
, "input_base" => 2
|
124
|
+
, "input_digits" => [1, -1, 1, 0, 1, 0]
|
125
|
+
, "output_base" => 10
|
126
|
+
, "output_digits"=> undef
|
127
|
+
, error => qr/negative digit not allowed/
|
128
|
+
},
|
129
|
+
{ "description" => "invalid positive digit"
|
130
|
+
, "input_base" => 2
|
131
|
+
, "input_digits" => [1, 2, 1, 0, 1, 0]
|
132
|
+
, "output_base" => 10
|
133
|
+
, "output_digits"=> undef
|
134
|
+
, error => qr/digit equal of greater than the base/
|
135
|
+
},
|
136
|
+
{ "description" => "first base is one"
|
137
|
+
, "input_base" => 1
|
138
|
+
, "input_digits" => []
|
139
|
+
, "output_base" => 10
|
140
|
+
, "output_digits"=> undef
|
141
|
+
, error => qr/base must be greater than 1/
|
142
|
+
},
|
143
|
+
{ "description" => "second base is one"
|
144
|
+
, "input_base" => 2
|
145
|
+
, "input_digits" => [1, 0, 1, 0, 1, 0]
|
146
|
+
, "output_base" => 1
|
147
|
+
, "output_digits"=> undef
|
148
|
+
, error => qr/base must be greater than 1/
|
149
|
+
},
|
150
|
+
{ "description" => "first base is zero"
|
151
|
+
, "input_base" => 0
|
152
|
+
, "input_digits" => []
|
153
|
+
, "output_base" => 10
|
154
|
+
, "output_digits"=> undef
|
155
|
+
, error => qr/base must be greater than 1/
|
156
|
+
},
|
157
|
+
{ "description" => "second base is zero"
|
158
|
+
, "input_base" => 10
|
159
|
+
, "input_digits" => [7]
|
160
|
+
, "output_base" => 0
|
161
|
+
, "output_digits"=> undef
|
162
|
+
, error => qr/base must be greater than 1/
|
163
|
+
},
|
164
|
+
{ "description" => "first base is negative"
|
165
|
+
, "input_base" => -2
|
166
|
+
, "input_digits" => [1]
|
167
|
+
, "output_base" => 10
|
168
|
+
, "output_digits"=> undef
|
169
|
+
, error => qr/base must be greater than 1/
|
170
|
+
},
|
171
|
+
{ "description" => "second base is negative"
|
172
|
+
, "input_base" => 2
|
173
|
+
, "input_digits" => [1]
|
174
|
+
, "output_base" => -7
|
175
|
+
, "output_digits"=> undef
|
176
|
+
, error => qr/base must be greater than 1/
|
177
|
+
},
|
178
|
+
{ "description" => "both bases are negative"
|
179
|
+
, "input_base" => -2
|
180
|
+
, "input_digits" => [1]
|
181
|
+
, "output_base" => -7
|
182
|
+
, "output_digits"=> undef
|
183
|
+
, error => qr/base must be greater than 1/
|
184
|
+
};
|
data/tracks/perl6/config.json
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env perl6
|
2
|
+
|
3
|
+
use Test;
|
4
|
+
|
5
|
+
use lib ( my $dir = IO::Path.new($?FILE).parent ).path;
|
6
|
+
|
7
|
+
my $module_name = %*ENV<EXERCISM>.so ?? 'Example' !! 'Trinary';
|
8
|
+
my @potential_module = <p6 pm6 pm>.map: $module_name ~ '.' ~ *;
|
9
|
+
|
10
|
+
my $module = first { $dir.child($_).e }, |@potential_module
|
11
|
+
or die "No file '$module_name.p6' found\n";
|
12
|
+
|
13
|
+
require $module <&to-decimal>;
|
14
|
+
|
15
|
+
my @cases = (
|
16
|
+
{
|
17
|
+
input => 1,
|
18
|
+
expected => 1,
|
19
|
+
},
|
20
|
+
{
|
21
|
+
input => 2,
|
22
|
+
expected => 2,
|
23
|
+
},
|
24
|
+
{
|
25
|
+
input => 10,
|
26
|
+
expected => 3,
|
27
|
+
},
|
28
|
+
{
|
29
|
+
input => 11,
|
30
|
+
expected => 4,
|
31
|
+
},
|
32
|
+
{
|
33
|
+
input => 100,
|
34
|
+
expected => 9,
|
35
|
+
},
|
36
|
+
{
|
37
|
+
input => 10,
|
38
|
+
expected => 3,
|
39
|
+
},
|
40
|
+
{
|
41
|
+
input => 112,
|
42
|
+
expected => 14,
|
43
|
+
},
|
44
|
+
{
|
45
|
+
input => 222,
|
46
|
+
expected => 26,
|
47
|
+
},
|
48
|
+
{
|
49
|
+
input => 1122000120,
|
50
|
+
expected => 32091,
|
51
|
+
},
|
52
|
+
{
|
53
|
+
input => "carrot",
|
54
|
+
expected => 0,
|
55
|
+
}
|
56
|
+
);
|
57
|
+
|
58
|
+
plan @cases.elems;
|
59
|
+
|
60
|
+
is to-decimal( .<input> ), .<expected>, .<input> for @cases;
|