trackler 2.2.1.51 → 2.2.1.52
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/exercises/saddle-points/description.md +1 -1
- data/tracks/cfml/.gitattributes +19 -0
- data/tracks/cfml/config.json +180 -186
- data/tracks/cfml/tasks/FormatConfig.cfc +26 -0
- data/tracks/cfml/tasks/ScaffoldExercise.cfc +1 -1
- data/tracks/common-lisp/config.json +26 -9
- data/tracks/common-lisp/exercises/acronym/README.md +61 -0
- data/tracks/common-lisp/exercises/acronym/acronym-test.lisp +48 -0
- data/tracks/common-lisp/exercises/acronym/acronym.lisp +6 -0
- data/tracks/common-lisp/exercises/acronym/example.lisp +24 -0
- data/tracks/common-lisp/exercises/isogram/README.md +65 -0
- data/tracks/common-lisp/exercises/isogram/example.lisp +18 -0
- data/tracks/common-lisp/exercises/isogram/isogram-test.lisp +39 -0
- data/tracks/common-lisp/exercises/isogram/isogram.lisp +8 -0
- data/tracks/delphi/exercises/etl/README.md +1 -1
- data/tracks/delphi/exercises/rna-transcription/README.md +1 -1
- data/tracks/delphi/exercises/saddle-points/README.md +1 -1
- data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +21 -21
- data/tracks/fsharp/exercises/kindergarten-garden/Example.fs +13 -14
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fs +1 -3
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +9 -41
- data/tracks/fsharp/exercises/phone-number/PhoneNumberTest.fs +12 -12
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +8 -8
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fs +3 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulatorTest.fs +129 -26
- data/tracks/fsharp/generators/Common.fs +10 -0
- data/tracks/fsharp/generators/Exercise.fs +5 -1
- data/tracks/fsharp/generators/Generators.fs +122 -33
- data/tracks/fsharp/generators/Output.fs +6 -1
- data/tracks/haskell/exercises/crypto-square/README.md +6 -4
- data/tracks/haskell/exercises/kindergarten-garden/README.md +10 -10
- data/tracks/haskell/exercises/saddle-points/README.md +1 -1
- data/tracks/haskell/exercises/space-age/README.md +1 -1
- data/tracks/java/config.json +8 -2
- data/tracks/java/exercises/queen-attack/.meta/src/reference/java/BoardCoordinate.java +12 -12
- data/tracks/java/exercises/queen-attack/.meta/src/reference/java/QueenAttackCalculator.java +14 -14
- data/tracks/java/exercises/queen-attack/.meta/version +1 -1
- data/tracks/java/exercises/queen-attack/src/test/java/QueenAttackCalculatorTest.java +11 -11
- data/tracks/javascript/exercises/prime-factors/example.js +10 -9
- data/tracks/julia/config.json +12 -0
- data/tracks/julia/exercises/run-length-encoding/README.md +31 -0
- data/tracks/julia/exercises/run-length-encoding/example.jl +22 -0
- data/tracks/julia/exercises/run-length-encoding/run-length-encoding.jl +7 -0
- data/tracks/julia/exercises/run-length-encoding/runtests.jl +29 -0
- data/tracks/objective-c/README.md +79 -1
- data/tracks/ocaml/config.json +430 -433
- data/tracks/ocaml/config/maintainers.json +11 -11
- data/tracks/php/config.json +16 -0
- data/tracks/php/exercises/all-your-base/README.md +31 -0
- data/tracks/php/exercises/all-your-base/all-your-base_test.php +135 -0
- data/tracks/php/exercises/all-your-base/example.php +27 -0
- data/tracks/php/exercises/series/README.md +21 -0
- data/tracks/php/exercises/series/example.php +15 -0
- data/tracks/php/exercises/series/series_test.php +64 -0
- data/tracks/python/README.md +1 -1
- data/tracks/python/config.json +4 -1
- data/tracks/python/exercises/forth/forth.py +4 -0
- data/tracks/python/exercises/forth/forth_test.py +1 -1
- data/tracks/python/exercises/markdown/example.py +1 -1
- data/tracks/python/exercises/markdown/markdown_test.py +3 -3
- data/tracks/ruby/exercises/two-bucket/.meta/.version +1 -1
- data/tracks/ruby/exercises/two-bucket/.meta/solutions/two_bucket.rb +23 -3
- data/tracks/ruby/exercises/two-bucket/two_bucket_test.rb +4 -4
- metadata +22 -2
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
|
+
"docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md",
|
|
2
3
|
"maintainers": [
|
|
3
4
|
{
|
|
4
|
-
"github_username": "dvberkel",
|
|
5
|
-
"show_on_website": false,
|
|
6
5
|
"alumnus": false,
|
|
7
|
-
"
|
|
6
|
+
"avatar_url": null,
|
|
8
7
|
"bio": null,
|
|
8
|
+
"github_username": "dvberkel",
|
|
9
9
|
"link_text": null,
|
|
10
10
|
"link_url": null,
|
|
11
|
-
"
|
|
11
|
+
"name": null,
|
|
12
|
+
"show_on_website": false
|
|
12
13
|
},
|
|
13
14
|
{
|
|
14
|
-
"github_username": "stevejb71",
|
|
15
|
-
"show_on_website": false,
|
|
16
15
|
"alumnus": false,
|
|
17
|
-
"
|
|
16
|
+
"avatar_url": null,
|
|
18
17
|
"bio": null,
|
|
18
|
+
"github_username": "stevejb71",
|
|
19
19
|
"link_text": null,
|
|
20
20
|
"link_url": null,
|
|
21
|
-
"
|
|
21
|
+
"name": null,
|
|
22
|
+
"show_on_website": false
|
|
22
23
|
}
|
|
23
|
-
]
|
|
24
|
-
|
|
25
|
-
}
|
|
24
|
+
]
|
|
25
|
+
}
|
data/tracks/php/config.json
CHANGED
|
@@ -589,6 +589,14 @@
|
|
|
589
589
|
],
|
|
590
590
|
"unlocked_by": "null"
|
|
591
591
|
},
|
|
592
|
+
{
|
|
593
|
+
"uuid": "C5D81BB4-7041-4EA9-B0ED-C3A17CF3E071",
|
|
594
|
+
"core" : false,
|
|
595
|
+
"difficulty" : 1,
|
|
596
|
+
"slug" : "series",
|
|
597
|
+
"topics": [ ],
|
|
598
|
+
"unlocked_by": "null"
|
|
599
|
+
},
|
|
592
600
|
{
|
|
593
601
|
"uuid": "cb413881-99b6-493f-bea2-89563dc173a6",
|
|
594
602
|
"core" : false,
|
|
@@ -603,6 +611,14 @@
|
|
|
603
611
|
"text_formatting"
|
|
604
612
|
],
|
|
605
613
|
"unlocked_by": "null"
|
|
614
|
+
},
|
|
615
|
+
{
|
|
616
|
+
"uuid": "94AA4B63-66BA-4EF4-8E27-36C146682F05",
|
|
617
|
+
"core" : false,
|
|
618
|
+
"difficulty" : 1,
|
|
619
|
+
"slug" : "all-your-base",
|
|
620
|
+
"topics": [ ],
|
|
621
|
+
"unlocked_by": "null"
|
|
606
622
|
}
|
|
607
623
|
]
|
|
608
624
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Convert a number, represented as a sequence of digits in one base, to any other base.
|
|
2
|
+
|
|
3
|
+
Implement general base conversion. Given a number in base **a**,
|
|
4
|
+
represented as a sequence of digits, convert it to base **b**.
|
|
5
|
+
|
|
6
|
+
## Note
|
|
7
|
+
|
|
8
|
+
- Try to implement the conversion yourself.
|
|
9
|
+
Do not use something else to perform the conversion for you.
|
|
10
|
+
|
|
11
|
+
## About [Positional Notation](https://en.wikipedia.org/wiki/Positional_notation)
|
|
12
|
+
|
|
13
|
+
In positional notation, a number in base **b** can be understood as a linear
|
|
14
|
+
combination of powers of **b**.
|
|
15
|
+
|
|
16
|
+
The number 42, *in base 10*, means:
|
|
17
|
+
|
|
18
|
+
(4 * 10^1) + (2 * 10^0)
|
|
19
|
+
|
|
20
|
+
The number 101010, *in base 2*, means:
|
|
21
|
+
|
|
22
|
+
(1 * 2^5) + (0 * 2^4) + (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (0 * 2^0)
|
|
23
|
+
|
|
24
|
+
The number 1120, *in base 3*, means:
|
|
25
|
+
|
|
26
|
+
(1 * 3^3) + (1 * 3^2) + (2 * 3^1) + (0 * 3^0)
|
|
27
|
+
|
|
28
|
+
I think you got the idea!
|
|
29
|
+
|
|
30
|
+
*Yes. Those three numbers above are exactly the same. Congratulations!*
|
|
31
|
+
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
require "all-your-base.php";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* These tests are adapted from the canonical data in the
|
|
7
|
+
* `problem-specifications` repository.
|
|
8
|
+
*/
|
|
9
|
+
class AllYourBaseTest extends PHPUnit\Framework\TestCase
|
|
10
|
+
{
|
|
11
|
+
public function testSingleBitOneToDecimal()
|
|
12
|
+
{
|
|
13
|
+
$this->assertEquals(rebase(2, [1], 10), [1]);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public function testBinaryToSingleDecimal()
|
|
17
|
+
{
|
|
18
|
+
$this->markTestSkipped();
|
|
19
|
+
$this->assertEquals(rebase(2, [1, 0, 1], 10), [5]);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public function testSingleDecimalToBinary()
|
|
23
|
+
{
|
|
24
|
+
$this->markTestSkipped();
|
|
25
|
+
$this->assertEquals(rebase(10, [5], 2), [1, 0, 1]);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public function testBinaryToMultipleDecimal()
|
|
29
|
+
{
|
|
30
|
+
$this->markTestSkipped();
|
|
31
|
+
$this->assertEquals(rebase(2, [1, 0, 1, 0, 1, 0], 10), [4, 2]);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public function testDecimalToBinary()
|
|
35
|
+
{
|
|
36
|
+
$this->markTestSkipped();
|
|
37
|
+
$this->assertEquals(rebase(10, [4, 2], 2), [1, 0, 1, 0, 1, 0]);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public function testTrinaryToHexadecimal()
|
|
41
|
+
{
|
|
42
|
+
$this->markTestSkipped();
|
|
43
|
+
$this->assertEquals(rebase(3, [1, 1, 2, 0], 16), [2, 10]);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public function testHexadecimalToTrinary()
|
|
47
|
+
{
|
|
48
|
+
$this->markTestSkipped();
|
|
49
|
+
$this->assertEquals(rebase(16, [2, 10], 3), [1, 1, 2, 0]);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public function test15BitIntegers()
|
|
53
|
+
{
|
|
54
|
+
$this->markTestSkipped();
|
|
55
|
+
$this->assertEquals(rebase(97, [3, 46, 60], 73), [6, 10, 45]);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public function testEmptyListReturnsNull()
|
|
59
|
+
{
|
|
60
|
+
$this->markTestSkipped();
|
|
61
|
+
$this->assertEquals(rebase(10, [], 10), null);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public function testSingleZeroReturnsNull()
|
|
65
|
+
{
|
|
66
|
+
$this->markTestSkipped();
|
|
67
|
+
$this->assertEquals(rebase(10, [0], 2), null);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public function testMultipleZerosReturnsNull()
|
|
71
|
+
{
|
|
72
|
+
$this->markTestSkipped();
|
|
73
|
+
$this->assertEquals(rebase(10, [0, 0, 0], 2), null);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public function testLeadingZerosReturnsNull()
|
|
77
|
+
{
|
|
78
|
+
$this->markTestSkipped();
|
|
79
|
+
$this->assertEquals(rebase(10, [0, 6, 0], 2), null);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public function testFirstBaseIsOne()
|
|
83
|
+
{
|
|
84
|
+
$this->markTestSkipped();
|
|
85
|
+
$this->assertEquals(rebase(1, [6, 0], 2), null);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public function testFirstBaseIsZero()
|
|
89
|
+
{
|
|
90
|
+
$this->markTestSkipped();
|
|
91
|
+
$this->assertEquals(rebase(0, [6, 0], 2), null);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public function testFirstBaseIsNegative()
|
|
95
|
+
{
|
|
96
|
+
$this->markTestSkipped();
|
|
97
|
+
$this->assertEquals(rebase(-1, [6, 0], 2), null);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public function testNegativeDigit()
|
|
101
|
+
{
|
|
102
|
+
$this->markTestSkipped();
|
|
103
|
+
$this->assertEquals(rebase(10, [1, -1, 0], 2), null);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public function testInvalidPositiveDigit()
|
|
107
|
+
{
|
|
108
|
+
$this->markTestSkipped();
|
|
109
|
+
$this->assertEquals(rebase(2, [1, 2, 0], 10), null);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
public function testSecondBaseIsOne()
|
|
113
|
+
{
|
|
114
|
+
$this->markTestSkipped();
|
|
115
|
+
$this->assertEquals(rebase(2, [1, 1, 0], 1), null);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
public function testSecondBaseIsZero()
|
|
119
|
+
{
|
|
120
|
+
$this->markTestSkipped();
|
|
121
|
+
$this->assertEquals(rebase(2, [1, 1, 0], 0), null);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
public function testSecondBaseIsNegative()
|
|
125
|
+
{
|
|
126
|
+
$this->markTestSkipped();
|
|
127
|
+
$this->assertEquals(rebase(2, [1, 1, 0], -1), null);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
public function testBothBasesIsNegative()
|
|
131
|
+
{
|
|
132
|
+
$this->markTestSkipped();
|
|
133
|
+
$this->assertEquals(rebase(-3, [1, 1, 0], -1), null);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
function rebase(int $fromBase, array $digits, int $toBase)
|
|
4
|
+
{
|
|
5
|
+
if (empty($digits) || $digits[0] == 0 || $fromBase <= 1 || $toBase <= 1) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
$decTotal = 0;
|
|
10
|
+
$ordered = array_reverse($digits);
|
|
11
|
+
for ($i = 0; $i < count($digits); $i++) {
|
|
12
|
+
$decTotal += $ordered[$i] * pow($fromBase, $i);
|
|
13
|
+
if ($ordered[$i] >= $fromBase || $ordered[$i] < 0) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
$newArr = [];
|
|
19
|
+
while ($decTotal >= $toBase) {
|
|
20
|
+
$remainder = $decTotal % $toBase;
|
|
21
|
+
$newArr[] = $remainder;
|
|
22
|
+
$decTotal = floor($decTotal / $toBase);
|
|
23
|
+
}
|
|
24
|
+
$newArr[] = $decTotal;
|
|
25
|
+
|
|
26
|
+
return array_reverse($newArr);
|
|
27
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Series
|
|
2
|
+
|
|
3
|
+
Given a string of digits, output all the contiguous substrings of length `n` in
|
|
4
|
+
that string.
|
|
5
|
+
|
|
6
|
+
For example, the string "49142" has the following 3-digit series:
|
|
7
|
+
|
|
8
|
+
- 491
|
|
9
|
+
- 914
|
|
10
|
+
- 142
|
|
11
|
+
|
|
12
|
+
And the following 4-digit series:
|
|
13
|
+
|
|
14
|
+
- 4914
|
|
15
|
+
- 9142
|
|
16
|
+
|
|
17
|
+
And if you ask for a 6-digit series from a 5-digit string, you deserve
|
|
18
|
+
whatever you get.
|
|
19
|
+
|
|
20
|
+
Note that these series are only required to occupy *adjacent positions*
|
|
21
|
+
in the input; the digits need not be *numerically consecutive*.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Exception;
|
|
4
|
+
|
|
5
|
+
function slices($series, $size)
|
|
6
|
+
{
|
|
7
|
+
if ($size > strlen($series) || $size < 1) {
|
|
8
|
+
throw new Exception();
|
|
9
|
+
}
|
|
10
|
+
$arr = [];
|
|
11
|
+
for ($i = 0; $i <= strlen($series) - $size; $i++) {
|
|
12
|
+
$arr[] = substr($series, $i, $size);
|
|
13
|
+
}
|
|
14
|
+
return $arr;
|
|
15
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
require "series.php";
|
|
3
|
+
use Exception;
|
|
4
|
+
|
|
5
|
+
class SieveTest extends PHPUnit\Framework\TestCase
|
|
6
|
+
{
|
|
7
|
+
public function testSlicesOfOne()
|
|
8
|
+
{
|
|
9
|
+
$this->assertEquals(
|
|
10
|
+
slices("01234", 1),
|
|
11
|
+
["0", "1", "2", "3", "4"]
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public function testSlicesOfTwo()
|
|
16
|
+
{
|
|
17
|
+
$this->markTestSkipped();
|
|
18
|
+
$this->assertEquals(
|
|
19
|
+
slices("97867564", 2),
|
|
20
|
+
["97", "78", "86", "67", "75", "56", "64"]
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public function testSlicesOfThree()
|
|
25
|
+
{
|
|
26
|
+
$this->markTestSkipped();
|
|
27
|
+
$this->assertEquals(
|
|
28
|
+
slices("97867564", 3),
|
|
29
|
+
["978", "786", "867", "675", "756", "564"]
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public function testSlicesOfFour()
|
|
34
|
+
{
|
|
35
|
+
$this->markTestSkipped();
|
|
36
|
+
$this->assertEquals(
|
|
37
|
+
slices("01234", 4),
|
|
38
|
+
["0123", "1234"]
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public function testSlicesOfFive()
|
|
43
|
+
{
|
|
44
|
+
$this->markTestSkipped();
|
|
45
|
+
$this->assertEquals(
|
|
46
|
+
slices("01234", 5),
|
|
47
|
+
["01234"]
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public function testOverlyLongSlice()
|
|
52
|
+
{
|
|
53
|
+
$this->markTestSkipped();
|
|
54
|
+
$this->expectException(Exception::class);
|
|
55
|
+
slices("012", 4);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public function testOverlyShortSlice()
|
|
59
|
+
{
|
|
60
|
+
$this->markTestSkipped();
|
|
61
|
+
$this->expectException(Exception::class);
|
|
62
|
+
slices("01234", 0);
|
|
63
|
+
}
|
|
64
|
+
}
|
data/tracks/python/README.md
CHANGED
|
@@ -67,7 +67,7 @@ Please try to follow the [The seven rules of a great Git commit message](https:/
|
|
|
67
67
|
|
|
68
68
|
If you're interested, Tim Pope even has an [entire blog post](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) on good commit messages.
|
|
69
69
|
|
|
70
|
-
If you're new to Git take a look at [this short guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md#git-basics).
|
|
70
|
+
If you're new to Git, take a look at [this short guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md#git-basics).
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
## Python icon
|
data/tracks/python/config.json
CHANGED
|
@@ -66,7 +66,7 @@ def parse_line(line, in_list):
|
|
|
66
66
|
if not re.match('<h|<ul|<li', res):
|
|
67
67
|
res = wrap(res, 'p')
|
|
68
68
|
|
|
69
|
-
if
|
|
69
|
+
if list_match is None:
|
|
70
70
|
res = re.sub('(.*)(<li>)(.*)(</li>)(.*)', r'\1\2<p>\3</p>\4\5', res)
|
|
71
71
|
|
|
72
72
|
while check_bold(res):
|
|
@@ -2,7 +2,7 @@ import unittest
|
|
|
2
2
|
from markdown import parse_markdown
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.
|
|
5
|
+
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class TestMarkdown(unittest.TestCase):
|
|
@@ -37,8 +37,8 @@ class TestMarkdown(unittest.TestCase):
|
|
|
37
37
|
|
|
38
38
|
def test_unordered_lists(self):
|
|
39
39
|
self.assertEqual(parse_markdown('* Item 1\n* Item 2'),
|
|
40
|
-
'<ul><li
|
|
41
|
-
'<li
|
|
40
|
+
'<ul><li>Item 1</li>'
|
|
41
|
+
'<li>Item 2</li></ul>')
|
|
42
42
|
|
|
43
43
|
def test_little_bit_of_everything(self):
|
|
44
44
|
self.assertEqual(parse_markdown(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
4
|