trackler 2.2.1.66 → 2.2.1.67
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/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
|
}
|