trackler 2.2.1.66 → 2.2.1.67
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/problem-specifications/README.md +1 -0
- data/tracks/bash/exercises/anagram/anagram_tests.sh +16 -0
- data/tracks/bash/exercises/bob/bob_test.sh +28 -0
- data/tracks/bash/exercises/difference-of-squares/difference_of_squares_test.sh +3 -0
- data/tracks/bash/exercises/error-handling/error_handling_test.sh +5 -0
- data/tracks/bash/exercises/gigasecond/gigasecond_test.sh +10 -0
- data/tracks/bash/exercises/hamming/hamming_test.sh +15 -0
- data/tracks/bash/exercises/leap/leap_test.sh +10 -0
- data/tracks/bash/exercises/nucleotide-count/nucleotide_count_test.sh +4 -0
- data/tracks/bash/exercises/pangram/pangram_tests.sh +9 -0
- data/tracks/bash/exercises/phone-number/phone_number_tests.sh +13 -1
- data/tracks/bash/exercises/raindrops/raindrops_test.sh +16 -0
- data/tracks/bash/exercises/rna-transcription/rna_transcription_test.sh +8 -0
- data/tracks/bash/exercises/two-fer/two_fer_test.sh +3 -0
- data/tracks/bash/exercises/word-count/word_count_test.sh +9 -1
- data/tracks/c/exercises/hello-world/src/hello_world.c +0 -2
- data/tracks/c/exercises/sieve/test/test_sieve.c +13 -16
- data/tracks/erlang/config.json +4 -4
- data/tracks/fsharp/config.json +12 -0
- data/tracks/fsharp/exercises/Exercises.sln +6 -0
- data/tracks/fsharp/exercises/rotational-cipher/Example.fs +29 -0
- data/tracks/fsharp/exercises/rotational-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/rotational-cipher/README.md +29 -0
- data/tracks/fsharp/exercises/rotational-cipher/RotationalCipher.fs +3 -0
- data/tracks/fsharp/exercises/rotational-cipher/RotationalCipher.fsproj +23 -0
- data/tracks/fsharp/exercises/rotational-cipher/RotationalCipherTest.fs +49 -0
- data/tracks/fsharp/generators/Generators.fs +3 -0
- data/tracks/go/exercises/grains/.meta/gen.go +99 -0
- data/tracks/go/exercises/grains/cases_test.go +64 -0
- data/tracks/go/exercises/grains/grains_test.go +4 -20
- data/tracks/go/exercises/space-age/space_age_test.go +3 -1
- data/tracks/java/config.json +12 -0
- data/tracks/java/exercises/beer-song/.meta/src/reference/java/BeerSong.java +4 -4
- data/tracks/java/exercises/diamond/src/main/java/DiamondPrinter.java +9 -0
- data/tracks/java/exercises/isbn-verifier/.meta/src/reference/java/IsbnVerifier.java +35 -0
- data/tracks/java/exercises/isbn-verifier/.meta/version +1 -0
- data/tracks/java/exercises/isbn-verifier/README.md +53 -0
- data/tracks/java/exercises/isbn-verifier/build.gradle +18 -0
- data/tracks/java/exercises/isbn-verifier/src/main/java/IsbnVerifier.java +7 -0
- data/tracks/java/exercises/isbn-verifier/src/test/java/IsbnVerifierTest.java +94 -0
- data/tracks/java/exercises/isogram/src/main/java/IsogramChecker.java +7 -0
- data/tracks/java/exercises/saddle-points/src/main/java/Matrix.java +13 -0
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/kotlin/config.json +1 -1
- data/tracks/ocaml/exercises/all-your-base/example.ml +1 -1
- data/tracks/ocaml/exercises/all-your-base/test.ml +9 -9
- data/tracks/perl6/config.json +1 -1
- data/tracks/perl6/docs/SNIPPET.txt +2 -2
- data/tracks/perl6/exercises/anagram/Anagram.pm6 +4 -1
- data/tracks/perl6/exercises/anagram/Example.pm6 +4 -15
- data/tracks/perl6/exercises/anagram/anagram.t +2 -2
- data/tracks/perl6/exercises/anagram/example.yaml +7 -15
- data/tracks/php/config.json +12 -0
- data/tracks/php/exercises/run-length-encoding/README.md +42 -0
- data/tracks/php/exercises/run-length-encoding/example.php +60 -0
- data/tracks/php/exercises/run-length-encoding/run-length-encoding.php +20 -0
- data/tracks/php/exercises/run-length-encoding/run-length-encoding_test.php +65 -0
- data/tracks/purescript/.travis.yml +1 -1
- data/tracks/purescript/bin/test.sh +9 -2
- data/tracks/python/config.json +7 -16
- data/tracks/r/exercises/hello-world/test_hello-world.R +0 -8
- data/tracks/racket/config.json +1 -1
- data/tracks/swift/config.json +12 -2
- data/tracks/swift/exercises/diamond/Package.swift +5 -0
- data/tracks/swift/exercises/diamond/README.md +64 -0
- data/tracks/swift/exercises/diamond/Sources/Diamond.swift +1 -0
- data/tracks/swift/exercises/diamond/Sources/DiamondExample.swift +30 -0
- data/tracks/swift/exercises/diamond/Tests/DiamondTests/DiamondTests.swift +98 -0
- data/tracks/swift/exercises/diamond/Tests/LinuxMain.swift +6 -0
- metadata +29 -8
- data/tracks/java/exercises/diamond/src/main/java/.keep +0 -0
- data/tracks/java/exercises/isogram/src/main/java/.keep +0 -0
- data/tracks/python/exercises/parallel-letter-frequency/README.md +0 -24
- data/tracks/python/exercises/parallel-letter-frequency/example.py +0 -56
- data/tracks/python/exercises/parallel-letter-frequency/parallel_letter_frequency.py +0 -2
- data/tracks/python/exercises/parallel-letter-frequency/parallel_letter_frequency_test.py +0 -61
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import java.util.List;
|
|
2
|
+
import java.util.Set;
|
|
3
|
+
|
|
4
|
+
class Matrix {
|
|
5
|
+
|
|
6
|
+
Matrix(List<List<Integer>> values) {
|
|
7
|
+
throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Set<MatrixCoordinate> getSaddlePoints() {
|
|
11
|
+
throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
|
|
12
|
+
}
|
|
13
|
+
}
|
data/tracks/kotlin/config.json
CHANGED
|
@@ -7,7 +7,7 @@ let rec to_digits (b: base) (acc: int list) = function
|
|
|
7
7
|
| n -> to_digits b (n % b :: acc) (n / b)
|
|
8
8
|
|
|
9
9
|
let convert_bases ~from ~digits ~target =
|
|
10
|
-
if from <= 1 || target <= 1
|
|
10
|
+
if from <= 1 || target <= 1
|
|
11
11
|
then None
|
|
12
12
|
else
|
|
13
13
|
let open Option.Monad_infix in
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(* Test/exercise version: "
|
|
1
|
+
(* Test/exercise version: "2.0.1" *)
|
|
2
2
|
|
|
3
3
|
open Core
|
|
4
4
|
open OUnit2
|
|
@@ -29,28 +29,28 @@ let tests = [
|
|
|
29
29
|
"15-bit integer" >::
|
|
30
30
|
ae (Some [6; 10; 45]) (convert_bases ~from:97 ~digits:[3; 46; 60] ~target:73);
|
|
31
31
|
"empty list" >::
|
|
32
|
-
ae
|
|
32
|
+
ae (Some [0]) (convert_bases ~from:2 ~digits:[] ~target:10);
|
|
33
33
|
"single zero" >::
|
|
34
34
|
ae (Some [0]) (convert_bases ~from:10 ~digits:[0] ~target:2);
|
|
35
35
|
"multiple zeros" >::
|
|
36
36
|
ae (Some [0]) (convert_bases ~from:10 ~digits:[0; 0; 0] ~target:2);
|
|
37
37
|
"leading zeros" >::
|
|
38
|
-
ae (Some [4;2]) (convert_bases ~from:7 ~digits:[0; 6; 0] ~target:10);
|
|
39
|
-
"
|
|
38
|
+
ae (Some [4; 2]) (convert_bases ~from:7 ~digits:[0; 6; 0] ~target:10);
|
|
39
|
+
"input base is one" >::
|
|
40
40
|
ae None (convert_bases ~from:1 ~digits:[] ~target:10);
|
|
41
|
-
"
|
|
41
|
+
"input base is zero" >::
|
|
42
42
|
ae None (convert_bases ~from:0 ~digits:[] ~target:10);
|
|
43
|
-
"
|
|
43
|
+
"input base is negative" >::
|
|
44
44
|
ae None (convert_bases ~from:(-2) ~digits:[1] ~target:10);
|
|
45
45
|
"negative digit" >::
|
|
46
46
|
ae None (convert_bases ~from:2 ~digits:[1; -1; 1; 0; 1; 0] ~target:10);
|
|
47
47
|
"invalid positive digit" >::
|
|
48
48
|
ae None (convert_bases ~from:2 ~digits:[1; 2; 1; 0; 1; 0] ~target:10);
|
|
49
|
-
"
|
|
49
|
+
"output base is one" >::
|
|
50
50
|
ae None (convert_bases ~from:2 ~digits:[1; 0; 1; 0; 1; 0] ~target:1);
|
|
51
|
-
"
|
|
51
|
+
"output base is zero" >::
|
|
52
52
|
ae None (convert_bases ~from:10 ~digits:[7] ~target:0);
|
|
53
|
-
"
|
|
53
|
+
"output base is negative" >::
|
|
54
54
|
ae None (convert_bases ~from:2 ~digits:[1] ~target:(-7));
|
|
55
55
|
"both bases are negative" >::
|
|
56
56
|
ae None (convert_bases ~from:(-2) ~digits:[1] ~target:(-7));
|
data/tracks/perl6/config.json
CHANGED
|
@@ -1,18 +1,7 @@
|
|
|
1
|
-
unit module Anagram:ver<
|
|
1
|
+
unit module Anagram:ver<2>;
|
|
2
2
|
|
|
3
|
-
sub match-anagrams (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
for @words -> $w {
|
|
7
|
-
next if $w.lc eq $word.lc;
|
|
8
|
-
my $try = canonize($w);
|
|
9
|
-
if $try eq $canonical {
|
|
10
|
-
@results.push: $w;
|
|
11
|
-
}
|
|
3
|
+
sub match-anagrams ( :$subject!, :@candidates! ) is export {
|
|
4
|
+
given $subject.uc -> $ucs {
|
|
5
|
+
@candidates.grep: { given .uc {$_ ne $ucs && .comb ~~ $ucs.comb.Bag} }
|
|
12
6
|
}
|
|
13
|
-
@results;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
sub canonize ($str) {
|
|
17
|
-
(($str.lc.split('')).sort).join('');
|
|
18
7
|
}
|
|
@@ -5,7 +5,7 @@ use lib my $dir = $?FILE.IO.dirname;
|
|
|
5
5
|
use JSON::Fast;
|
|
6
6
|
|
|
7
7
|
my Str:D $exercise := 'Anagram';
|
|
8
|
-
my Version:D $version =
|
|
8
|
+
my Version:D $version = v2;
|
|
9
9
|
my Str $module //= $exercise;
|
|
10
10
|
plan 18;
|
|
11
11
|
|
|
@@ -22,7 +22,7 @@ if ::($exercise).^ver !~~ $version {
|
|
|
22
22
|
require ::($module) <&match-anagrams>;
|
|
23
23
|
|
|
24
24
|
my $c-data = from-json $=pod.pop.contents;
|
|
25
|
-
|
|
25
|
+
cmp-ok match-anagrams( |%(.<subject candidates>:p) ), '~~', .<expected>.Set, .<description> for $c-data<cases>.values;
|
|
26
26
|
|
|
27
27
|
=head2 Canonical Data
|
|
28
28
|
=begin code
|
|
@@ -1,25 +1,17 @@
|
|
|
1
1
|
exercise: Anagram
|
|
2
|
-
version:
|
|
2
|
+
version: 2
|
|
3
3
|
plan: 18
|
|
4
4
|
imports: '&match-anagrams'
|
|
5
5
|
tests: |-
|
|
6
|
-
|
|
6
|
+
cmp-ok match-anagrams( |%(.<subject candidates>:p) ), '~~', .<expected>.Set, .<description> for $c-data<cases>.values;
|
|
7
7
|
|
|
8
8
|
unit: module
|
|
9
9
|
example: |-
|
|
10
|
-
sub match-anagrams (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
for @words -> $w {
|
|
14
|
-
next if $w.lc eq $word.lc;
|
|
15
|
-
my $try = canonize($w);
|
|
16
|
-
if $try eq $canonical {
|
|
17
|
-
@results.push: $w;
|
|
18
|
-
}
|
|
10
|
+
sub match-anagrams ( :$subject!, :@candidates! ) is export {
|
|
11
|
+
given $subject.uc -> $ucs {
|
|
12
|
+
@candidates.grep: { given .uc {$_ ne $ucs && .comb ~~ $ucs.comb.Bag} }
|
|
19
13
|
}
|
|
20
|
-
@results;
|
|
21
14
|
}
|
|
22
|
-
|
|
23
|
-
sub
|
|
24
|
-
(($str.lc.split('')).sort).join('');
|
|
15
|
+
stub: |-
|
|
16
|
+
sub match-anagrams (:$subject!, :@candidates!) is export {
|
|
25
17
|
}
|
data/tracks/php/config.json
CHANGED
|
@@ -48,6 +48,18 @@
|
|
|
48
48
|
"Control-flow (if-else statements)"
|
|
49
49
|
]
|
|
50
50
|
},
|
|
51
|
+
{
|
|
52
|
+
"uuid": "0a453685-55c2-47e2-88b2-e26d1d8fbde9",
|
|
53
|
+
"slug": "run-length-encoding",
|
|
54
|
+
"core": false,
|
|
55
|
+
"unlocked_by": null,
|
|
56
|
+
"difficulty": 1,
|
|
57
|
+
"topics": [
|
|
58
|
+
"strings",
|
|
59
|
+
"algorithms",
|
|
60
|
+
"text_formatting"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
51
63
|
{
|
|
52
64
|
"uuid": "4f15fc17-f68e-43bc-9417-403dd6d03f4f",
|
|
53
65
|
"slug": "pangram",
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Run Length Encoding
|
|
2
|
+
|
|
3
|
+
Implement run-length encoding and decoding.
|
|
4
|
+
|
|
5
|
+
Run-length encoding (RLE) is a simple form of data compression, where runs
|
|
6
|
+
(consecutive data elements) are replaced by just one data value and count.
|
|
7
|
+
|
|
8
|
+
For example we can represent the original 53 characters with only 13.
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
"WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" -> "12WB12W3B24WB"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
RLE allows the original data to be perfectly reconstructed from
|
|
15
|
+
the compressed data, which makes it a lossless data compression.
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
"AABCCCDEEEE" -> "2AB3CD4E" -> "AABCCCDEEEE"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
For simplicity, you can assume that the unencoded string will only contain
|
|
22
|
+
the letters A through Z (either lower or upper case) and whitespace. This way
|
|
23
|
+
data to be encoded will never contain any numbers and numbers inside data to
|
|
24
|
+
be decoded always represent the count for the following character.
|
|
25
|
+
|
|
26
|
+
## Submitting Exercises
|
|
27
|
+
|
|
28
|
+
1. Get [PHPUnit].
|
|
29
|
+
|
|
30
|
+
% wget --no-check-certificate https://phar.phpunit.de/phpunit.phar
|
|
31
|
+
% chmod +x phpunit.phar
|
|
32
|
+
|
|
33
|
+
2. Execute the tests for an assignment.
|
|
34
|
+
|
|
35
|
+
% phpunit.phar run-length-encoding/run-length-encoding_test.php
|
|
36
|
+
|
|
37
|
+
## Source
|
|
38
|
+
|
|
39
|
+
Wikipedia [https://en.wikipedia.org/wiki/Run-length_encoding](https://en.wikipedia.org/wiki/Run-length_encoding)
|
|
40
|
+
|
|
41
|
+
## Submitting Incomplete Solutions
|
|
42
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param string $input
|
|
5
|
+
* @return string
|
|
6
|
+
*/
|
|
7
|
+
function encode($input)
|
|
8
|
+
{
|
|
9
|
+
if (!$input) {
|
|
10
|
+
return '';
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
$output = '';
|
|
14
|
+
$prev = $letter = null;
|
|
15
|
+
$count = 1;
|
|
16
|
+
|
|
17
|
+
foreach (str_split($input) as $letter) {
|
|
18
|
+
if ($letter === $prev) {
|
|
19
|
+
$count++;
|
|
20
|
+
} else {
|
|
21
|
+
if ($count > 1) {
|
|
22
|
+
$output .= $count;
|
|
23
|
+
}
|
|
24
|
+
$output .= $prev;
|
|
25
|
+
$count = 1;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
$prev = $letter;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if ($count > 1) {
|
|
32
|
+
$output .= $count;
|
|
33
|
+
}
|
|
34
|
+
$output .= $letter;
|
|
35
|
+
|
|
36
|
+
return $output;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param string $input
|
|
41
|
+
* @return string
|
|
42
|
+
*/
|
|
43
|
+
function decode($input)
|
|
44
|
+
{
|
|
45
|
+
$output = '';
|
|
46
|
+
preg_match_all('/([1-9]*)(\w|\s)/', $input, $matches);
|
|
47
|
+
|
|
48
|
+
$length = count($matches[0]);
|
|
49
|
+
for ($i = 0; $i < $length; $i++) {
|
|
50
|
+
$count = $matches[1][$i];
|
|
51
|
+
if ($count === '') {
|
|
52
|
+
$count = 1;
|
|
53
|
+
}
|
|
54
|
+
$letter = $matches[2][$i];
|
|
55
|
+
|
|
56
|
+
$output .= str_repeat($letter, (int) $count);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return $output;
|
|
60
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
//
|
|
4
|
+
// This is only a SKELETON file for the "Run Length Encoding" exercise. It's been provided as a
|
|
5
|
+
// convenience to get you started writing code faster.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
function encode($input)
|
|
9
|
+
{
|
|
10
|
+
//
|
|
11
|
+
// YOUR CODE GOES HERE
|
|
12
|
+
//
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function decode($input)
|
|
16
|
+
{
|
|
17
|
+
//
|
|
18
|
+
// YOUR CODE GOES HERE
|
|
19
|
+
//
|
|
20
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
require "run-length-encoding.php";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Class RunLengthEncodingTest
|
|
7
|
+
*/
|
|
8
|
+
class RunLengthEncodingTest extends PHPUnit\Framework\TestCase
|
|
9
|
+
{
|
|
10
|
+
public function testEncodeEmptyString()
|
|
11
|
+
{
|
|
12
|
+
$this->assertEquals('', encode(''));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public function testEncodeSingleCharactersOnly()
|
|
16
|
+
{
|
|
17
|
+
$this->assertEquals('XYZ', encode('XYZ'));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public function testDecodeEmptyString()
|
|
21
|
+
{
|
|
22
|
+
$this->assertEquals('', decode(''));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public function testDecodeSingleCharactersOnly()
|
|
26
|
+
{
|
|
27
|
+
$this->assertEquals('XYZ', decode('XYZ'));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public function testEncodeSimple()
|
|
31
|
+
{
|
|
32
|
+
$this->assertEquals('2A3B4C', encode('AABBBCCCC'));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public function testDecodeSimple()
|
|
36
|
+
{
|
|
37
|
+
$this->assertEquals('AABBBCCCC', decode('2A3B4C'));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public function testEncodeWithSingleValues()
|
|
41
|
+
{
|
|
42
|
+
$this->assertEquals(
|
|
43
|
+
'12WB12W3B24WB',
|
|
44
|
+
encode('WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB')
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public function testDecodeWithSingleValues()
|
|
49
|
+
{
|
|
50
|
+
$this->assertEquals(
|
|
51
|
+
'WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB',
|
|
52
|
+
decode('12WB12W3B24WB')
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public function testDecodeMultipleWhitespaceMixedInString()
|
|
57
|
+
{
|
|
58
|
+
$this->assertEquals(' hsqq qww ', decode('2 hs2q q2w2 '));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public function testEncodeDecodeCombination()
|
|
62
|
+
{
|
|
63
|
+
$this->assertEquals('zzz ZZ zZ', decode(encode('zzz ZZ zZ')));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -58,7 +58,14 @@ node etc/test-module-updater.js $work_dir/test
|
|
|
58
58
|
cd $work_dir
|
|
59
59
|
|
|
60
60
|
time bower install
|
|
61
|
-
|
|
61
|
+
|
|
62
|
+
# CI reports that we can use more cores than we can, so limit
|
|
63
|
+
# the number we attempt to use to prevent slowdown on CI.
|
|
64
|
+
if [[ -z "$LIMIT_CORES" ]]; then
|
|
65
|
+
time pulp test -j 2
|
|
66
|
+
else
|
|
67
|
+
time pulp test
|
|
68
|
+
fi
|
|
62
69
|
|
|
63
70
|
test_result=$?
|
|
64
71
|
|
|
@@ -71,4 +78,4 @@ else
|
|
|
71
78
|
echo -e "\e[1;31m[ Some tests have failed ]\e[0;39m"
|
|
72
79
|
fi
|
|
73
80
|
|
|
74
|
-
exit $test_result
|
|
81
|
+
exit $test_result
|
data/tracks/python/config.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"language": "Python",
|
|
3
|
+
"blurb": "Python is a clear and powerful object-oriented programming language with an elegant and easy-to-read syntax. It is ideal for prototyping and ad-hoc tasks, but also sees wide use in scientific computing, web development, and automation.",
|
|
3
4
|
"active": true,
|
|
4
5
|
"exercises": [
|
|
5
6
|
{
|
|
@@ -54,20 +55,6 @@
|
|
|
54
55
|
"logic"
|
|
55
56
|
]
|
|
56
57
|
},
|
|
57
|
-
{
|
|
58
|
-
"uuid": "c4754efd-6d67-48bd-994e-4b07a217ffc3",
|
|
59
|
-
"slug": "parallel-letter-frequency",
|
|
60
|
-
"core": false,
|
|
61
|
-
"unlocked_by": null,
|
|
62
|
-
"difficulty": 5,
|
|
63
|
-
"topics": [
|
|
64
|
-
"threading",
|
|
65
|
-
"parallellism",
|
|
66
|
-
"loops",
|
|
67
|
-
"queues",
|
|
68
|
-
"strings"
|
|
69
|
-
]
|
|
70
|
-
},
|
|
71
58
|
{
|
|
72
59
|
"uuid": "ca7c5ef1-5135-4fb4-8e68-669ef0f2a51a",
|
|
73
60
|
"slug": "rna-transcription",
|
|
@@ -1105,6 +1092,8 @@
|
|
|
1105
1092
|
{
|
|
1106
1093
|
"uuid": "6f530d0c-d13e-4270-b120-e42c16691a66",
|
|
1107
1094
|
"slug": "two-bucket",
|
|
1095
|
+
"core": false,
|
|
1096
|
+
"unlocked_by": null,
|
|
1108
1097
|
"difficulty": 5,
|
|
1109
1098
|
"topics": [
|
|
1110
1099
|
"algorithms",
|
|
@@ -1115,6 +1104,8 @@
|
|
|
1115
1104
|
{
|
|
1116
1105
|
"uuid": "88610b9a-6d3e-4924-a092-6d2f907ed4e2",
|
|
1117
1106
|
"slug": "markdown",
|
|
1107
|
+
"core": false,
|
|
1108
|
+
"unlocked_by": null,
|
|
1118
1109
|
"difficulty": 3,
|
|
1119
1110
|
"topics": [
|
|
1120
1111
|
"refactoring"
|
|
@@ -1201,7 +1192,7 @@
|
|
|
1201
1192
|
]
|
|
1202
1193
|
},
|
|
1203
1194
|
{
|
|
1204
|
-
"uuid": "
|
|
1195
|
+
"uuid": "df7cd9b9-283a-4466-accf-98c4a7609450",
|
|
1205
1196
|
"slug": "binary-search-tree",
|
|
1206
1197
|
"core": false,
|
|
1207
1198
|
"unlocked_by": null,
|
|
@@ -1271,6 +1262,6 @@
|
|
|
1271
1262
|
}
|
|
1272
1263
|
],
|
|
1273
1264
|
"foregone": [
|
|
1274
|
-
|
|
1265
|
+
"parallel-letter-frequency"
|
|
1275
1266
|
]
|
|
1276
1267
|
}
|