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
|
@@ -5,12 +5,4 @@ test_that("no name", {
|
|
|
5
5
|
expect_equal(hello_world(), "Hello, World!")
|
|
6
6
|
})
|
|
7
7
|
|
|
8
|
-
test_that("sample name", {
|
|
9
|
-
expect_equal(hello_world("Alice"), "Hello, Alice!")
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
test_that("other sample name", {
|
|
13
|
-
expect_equal(hello_world("Bob"), "Hello, Bob!")
|
|
14
|
-
})
|
|
15
|
-
|
|
16
8
|
message("All tests passed for exercise: hello-world")
|
data/tracks/racket/config.json
CHANGED
data/tracks/swift/config.json
CHANGED
|
@@ -346,7 +346,17 @@
|
|
|
346
346
|
"mathematics"
|
|
347
347
|
],
|
|
348
348
|
"unlocked_by": null,
|
|
349
|
-
"uuid": "
|
|
349
|
+
"uuid": "1b068d66-c8de-42a8-a566-03848c9c7941"
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"core": false,
|
|
353
|
+
"difficulty": 3,
|
|
354
|
+
"slug": "diamond",
|
|
355
|
+
"topics": [
|
|
356
|
+
"strings"
|
|
357
|
+
],
|
|
358
|
+
"unlocked_by": null,
|
|
359
|
+
"uuid": "6d70fd81-76a4-4e44-a64a-9a070e07e83d"
|
|
350
360
|
},
|
|
351
361
|
{
|
|
352
362
|
"core": false,
|
|
@@ -831,4 +841,4 @@
|
|
|
831
841
|
],
|
|
832
842
|
"foregone": [],
|
|
833
843
|
"language": "Swift"
|
|
834
|
-
}
|
|
844
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
The diamond kata takes as its input a letter, and outputs it in a diamond
|
|
2
|
+
shape. Given a letter, it prints a diamond starting with 'A', with the
|
|
3
|
+
supplied letter at the widest point.
|
|
4
|
+
|
|
5
|
+
## Requirements
|
|
6
|
+
|
|
7
|
+
* The first row contains one 'A'.
|
|
8
|
+
* The last row contains one 'A'.
|
|
9
|
+
* All rows, except the first and last, have exactly two identical letters.
|
|
10
|
+
* All rows have as many trailing spaces as leading spaces. (This might be 0).
|
|
11
|
+
* The diamond is horizontally symmetric.
|
|
12
|
+
* The diamond is vertically symmetric.
|
|
13
|
+
* The diamond has a square shape (width equals height).
|
|
14
|
+
* The letters form a diamond shape.
|
|
15
|
+
* The top half has the letters in ascending order.
|
|
16
|
+
* The bottom half has the letters in descending order.
|
|
17
|
+
* The four corners (containing the spaces) are triangles.
|
|
18
|
+
|
|
19
|
+
## Examples
|
|
20
|
+
|
|
21
|
+
In the following examples, spaces are indicated by `·` characters.
|
|
22
|
+
|
|
23
|
+
Diamond for letter 'A':
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
A
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Diamond for letter 'C':
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
··A··
|
|
33
|
+
·B·B·
|
|
34
|
+
C···C
|
|
35
|
+
·B·B·
|
|
36
|
+
··A··
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Diamond for letter 'E':
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
····A····
|
|
43
|
+
···B·B···
|
|
44
|
+
··C···C··
|
|
45
|
+
·D·····D·
|
|
46
|
+
E·······E
|
|
47
|
+
·D·····D·
|
|
48
|
+
··C···C··
|
|
49
|
+
···B·B···
|
|
50
|
+
····A····
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Setup
|
|
54
|
+
|
|
55
|
+
Go through the project setup instructions for Xcode using Swift:
|
|
56
|
+
|
|
57
|
+
http://exercism.io/languages/swift
|
|
58
|
+
|
|
59
|
+
## Source
|
|
60
|
+
|
|
61
|
+
Seb Rose [http://claysnow.co.uk/recycling-tests-in-tdd/](http://claysnow.co.uk/recycling-tests-in-tdd/)
|
|
62
|
+
|
|
63
|
+
## Submitting Incomplete Solutions
|
|
64
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//Solution goes in Sources
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
struct Diamond {
|
|
2
|
+
static let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.map { $0 }
|
|
3
|
+
|
|
4
|
+
static func makeDiamond(letter: Character) -> [String] {
|
|
5
|
+
guard let index = alphabet.index(of: letter) else {
|
|
6
|
+
return []
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
let numberOfLines = index * 2 + 1
|
|
10
|
+
let middle = numberOfLines / 2
|
|
11
|
+
var result = [String]()
|
|
12
|
+
|
|
13
|
+
for lineNumber in 0..<numberOfLines {
|
|
14
|
+
var line = ""
|
|
15
|
+
|
|
16
|
+
for column in 0..<numberOfLines {
|
|
17
|
+
let distanceFromMiddle = middle - abs(middle - lineNumber)
|
|
18
|
+
|
|
19
|
+
if abs(middle - column) == distanceFromMiddle {
|
|
20
|
+
line.append(alphabet[distanceFromMiddle])
|
|
21
|
+
} else {
|
|
22
|
+
line.append(" ")
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
result.append(line)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return result
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import XCTest
|
|
2
|
+
@testable import Diamond
|
|
3
|
+
|
|
4
|
+
class DiamondTests: XCTestCase {
|
|
5
|
+
|
|
6
|
+
func testLetterA() {
|
|
7
|
+
XCTAssertEqual(Diamond.makeDiamond(letter: "A"), ["A"])
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
func testLetterC() {
|
|
11
|
+
let expected = [
|
|
12
|
+
" A ",
|
|
13
|
+
" B B ",
|
|
14
|
+
"C C",
|
|
15
|
+
" B B ",
|
|
16
|
+
" A "]
|
|
17
|
+
XCTAssertEqual(Diamond.makeDiamond(letter: "C"), expected)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
func testLetterE() {
|
|
21
|
+
let expected = [
|
|
22
|
+
" A ",
|
|
23
|
+
" B B ",
|
|
24
|
+
" C C ",
|
|
25
|
+
" D D ",
|
|
26
|
+
"E E",
|
|
27
|
+
" D D ",
|
|
28
|
+
" C C ",
|
|
29
|
+
" B B ",
|
|
30
|
+
" A "]
|
|
31
|
+
XCTAssertEqual(Diamond.makeDiamond(letter: "E"), expected)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
func testLargestPossibleDiamond() {
|
|
35
|
+
let expected = [
|
|
36
|
+
" A ",
|
|
37
|
+
" B B ",
|
|
38
|
+
" C C ",
|
|
39
|
+
" D D ",
|
|
40
|
+
" E E ",
|
|
41
|
+
" F F ",
|
|
42
|
+
" G G ",
|
|
43
|
+
" H H ",
|
|
44
|
+
" I I ",
|
|
45
|
+
" J J ",
|
|
46
|
+
" K K ",
|
|
47
|
+
" L L ",
|
|
48
|
+
" M M ",
|
|
49
|
+
" N N ",
|
|
50
|
+
" O O ",
|
|
51
|
+
" P P ",
|
|
52
|
+
" Q Q ",
|
|
53
|
+
" R R ",
|
|
54
|
+
" S S ",
|
|
55
|
+
" T T ",
|
|
56
|
+
" U U ",
|
|
57
|
+
" V V ",
|
|
58
|
+
" W W ",
|
|
59
|
+
" X X ",
|
|
60
|
+
" Y Y ",
|
|
61
|
+
"Z Z",
|
|
62
|
+
" Y Y ",
|
|
63
|
+
" X X ",
|
|
64
|
+
" W W ",
|
|
65
|
+
" V V ",
|
|
66
|
+
" U U ",
|
|
67
|
+
" T T ",
|
|
68
|
+
" S S ",
|
|
69
|
+
" R R ",
|
|
70
|
+
" Q Q ",
|
|
71
|
+
" P P ",
|
|
72
|
+
" O O ",
|
|
73
|
+
" N N ",
|
|
74
|
+
" M M ",
|
|
75
|
+
" L L ",
|
|
76
|
+
" K K ",
|
|
77
|
+
" J J ",
|
|
78
|
+
" I I ",
|
|
79
|
+
" H H ",
|
|
80
|
+
" G G ",
|
|
81
|
+
" F F ",
|
|
82
|
+
" E E ",
|
|
83
|
+
" D D ",
|
|
84
|
+
" C C ",
|
|
85
|
+
" B B ",
|
|
86
|
+
" A "]
|
|
87
|
+
XCTAssertEqual(Diamond.makeDiamond(letter: "Z"), expected)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
static var allTests: [(String, (DiamondTests) -> () throws -> Void)] {
|
|
91
|
+
return [
|
|
92
|
+
("testLetterA", testLetterA),
|
|
93
|
+
("testLetterC", testLetterC),
|
|
94
|
+
("testLetterE", testLetterE),
|
|
95
|
+
("testLargestPossibleDiamond", testLargestPossibleDiamond),
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
}
|
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.2.1.
|
|
4
|
+
version: 2.2.1.67
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Katrina Owen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-11-
|
|
11
|
+
date: 2017-11-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rubyzip
|
|
@@ -5388,6 +5388,12 @@ files:
|
|
|
5388
5388
|
- tracks/fsharp/exercises/roman-numerals/RomanNumerals.fs
|
|
5389
5389
|
- tracks/fsharp/exercises/roman-numerals/RomanNumerals.fsproj
|
|
5390
5390
|
- tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs
|
|
5391
|
+
- tracks/fsharp/exercises/rotational-cipher/Example.fs
|
|
5392
|
+
- tracks/fsharp/exercises/rotational-cipher/Program.fs
|
|
5393
|
+
- tracks/fsharp/exercises/rotational-cipher/README.md
|
|
5394
|
+
- tracks/fsharp/exercises/rotational-cipher/RotationalCipher.fs
|
|
5395
|
+
- tracks/fsharp/exercises/rotational-cipher/RotationalCipher.fsproj
|
|
5396
|
+
- tracks/fsharp/exercises/rotational-cipher/RotationalCipherTest.fs
|
|
5391
5397
|
- tracks/fsharp/exercises/run-length-encoding/Example.fs
|
|
5392
5398
|
- tracks/fsharp/exercises/run-length-encoding/Program.fs
|
|
5393
5399
|
- tracks/fsharp/exercises/run-length-encoding/README.md
|
|
@@ -5785,7 +5791,9 @@ files:
|
|
|
5785
5791
|
- tracks/go/exercises/grade-school/README.md
|
|
5786
5792
|
- tracks/go/exercises/grade-school/example.go
|
|
5787
5793
|
- tracks/go/exercises/grade-school/grade_school_test.go
|
|
5794
|
+
- tracks/go/exercises/grains/.meta/gen.go
|
|
5788
5795
|
- tracks/go/exercises/grains/README.md
|
|
5796
|
+
- tracks/go/exercises/grains/cases_test.go
|
|
5789
5797
|
- tracks/go/exercises/grains/example.go
|
|
5790
5798
|
- tracks/go/exercises/grains/grains_test.go
|
|
5791
5799
|
- tracks/go/exercises/hamming/.meta/gen.go
|
|
@@ -7100,7 +7108,7 @@ files:
|
|
|
7100
7108
|
- tracks/java/exercises/diamond/.meta/version
|
|
7101
7109
|
- tracks/java/exercises/diamond/README.md
|
|
7102
7110
|
- tracks/java/exercises/diamond/build.gradle
|
|
7103
|
-
- tracks/java/exercises/diamond/src/main/java
|
|
7111
|
+
- tracks/java/exercises/diamond/src/main/java/DiamondPrinter.java
|
|
7104
7112
|
- tracks/java/exercises/diamond/src/test/java/DiamondPrinterTest.java
|
|
7105
7113
|
- tracks/java/exercises/difference-of-squares/.meta/src/reference/java/DifferenceOfSquaresCalculator.java
|
|
7106
7114
|
- tracks/java/exercises/difference-of-squares/.meta/version
|
|
@@ -7166,11 +7174,17 @@ files:
|
|
|
7166
7174
|
- tracks/java/exercises/house/build.gradle
|
|
7167
7175
|
- tracks/java/exercises/house/src/main/java/.keep
|
|
7168
7176
|
- tracks/java/exercises/house/src/test/java/HouseTest.java
|
|
7177
|
+
- tracks/java/exercises/isbn-verifier/.meta/src/reference/java/IsbnVerifier.java
|
|
7178
|
+
- tracks/java/exercises/isbn-verifier/.meta/version
|
|
7179
|
+
- tracks/java/exercises/isbn-verifier/README.md
|
|
7180
|
+
- tracks/java/exercises/isbn-verifier/build.gradle
|
|
7181
|
+
- tracks/java/exercises/isbn-verifier/src/main/java/IsbnVerifier.java
|
|
7182
|
+
- tracks/java/exercises/isbn-verifier/src/test/java/IsbnVerifierTest.java
|
|
7169
7183
|
- tracks/java/exercises/isogram/.meta/hints.md
|
|
7170
7184
|
- tracks/java/exercises/isogram/.meta/src/reference/java/IsogramChecker.java
|
|
7171
7185
|
- tracks/java/exercises/isogram/README.md
|
|
7172
7186
|
- tracks/java/exercises/isogram/build.gradle
|
|
7173
|
-
- tracks/java/exercises/isogram/src/main/java
|
|
7187
|
+
- tracks/java/exercises/isogram/src/main/java/IsogramChecker.java
|
|
7174
7188
|
- tracks/java/exercises/isogram/src/test/java/IsogramCheckerTest.java
|
|
7175
7189
|
- tracks/java/exercises/kindergarten-garden/.meta/src/reference/java/KindergartenGarden.java
|
|
7176
7190
|
- tracks/java/exercises/kindergarten-garden/.meta/src/reference/java/Plant.java
|
|
@@ -7356,6 +7370,7 @@ files:
|
|
|
7356
7370
|
- tracks/java/exercises/saddle-points/.meta/version
|
|
7357
7371
|
- tracks/java/exercises/saddle-points/README.md
|
|
7358
7372
|
- tracks/java/exercises/saddle-points/build.gradle
|
|
7373
|
+
- tracks/java/exercises/saddle-points/src/main/java/Matrix.java
|
|
7359
7374
|
- tracks/java/exercises/saddle-points/src/main/java/MatrixCoordinate.java
|
|
7360
7375
|
- tracks/java/exercises/saddle-points/src/test/java/MatrixTest.java
|
|
7361
7376
|
- tracks/java/exercises/scrabble-score/.meta/src/reference/java/Scrabble.java
|
|
@@ -10133,6 +10148,10 @@ files:
|
|
|
10133
10148
|
- tracks/php/exercises/roman-numerals/README.md
|
|
10134
10149
|
- tracks/php/exercises/roman-numerals/example.php
|
|
10135
10150
|
- tracks/php/exercises/roman-numerals/roman-numerals_test.php
|
|
10151
|
+
- tracks/php/exercises/run-length-encoding/README.md
|
|
10152
|
+
- tracks/php/exercises/run-length-encoding/example.php
|
|
10153
|
+
- tracks/php/exercises/run-length-encoding/run-length-encoding.php
|
|
10154
|
+
- tracks/php/exercises/run-length-encoding/run-length-encoding_test.php
|
|
10136
10155
|
- tracks/php/exercises/scrabble-score/README.md
|
|
10137
10156
|
- tracks/php/exercises/scrabble-score/example.php
|
|
10138
10157
|
- tracks/php/exercises/scrabble-score/scrabble-score_test.php
|
|
@@ -10766,10 +10785,6 @@ files:
|
|
|
10766
10785
|
- tracks/python/exercises/pangram/example.py
|
|
10767
10786
|
- tracks/python/exercises/pangram/pangram.py
|
|
10768
10787
|
- tracks/python/exercises/pangram/pangram_test.py
|
|
10769
|
-
- tracks/python/exercises/parallel-letter-frequency/README.md
|
|
10770
|
-
- tracks/python/exercises/parallel-letter-frequency/example.py
|
|
10771
|
-
- tracks/python/exercises/parallel-letter-frequency/parallel_letter_frequency.py
|
|
10772
|
-
- tracks/python/exercises/parallel-letter-frequency/parallel_letter_frequency_test.py
|
|
10773
10788
|
- tracks/python/exercises/pascals-triangle/README.md
|
|
10774
10789
|
- tracks/python/exercises/pascals-triangle/example.py
|
|
10775
10790
|
- tracks/python/exercises/pascals-triangle/pascals_triangle.py
|
|
@@ -13190,6 +13205,12 @@ files:
|
|
|
13190
13205
|
- tracks/swift/exercises/custom-set/Sources/CustomSetExample.swift
|
|
13191
13206
|
- tracks/swift/exercises/custom-set/Tests/CustomSetTests/CustomSetTests.swift
|
|
13192
13207
|
- tracks/swift/exercises/custom-set/Tests/LinuxMain.swift
|
|
13208
|
+
- tracks/swift/exercises/diamond/Package.swift
|
|
13209
|
+
- tracks/swift/exercises/diamond/README.md
|
|
13210
|
+
- tracks/swift/exercises/diamond/Sources/Diamond.swift
|
|
13211
|
+
- tracks/swift/exercises/diamond/Sources/DiamondExample.swift
|
|
13212
|
+
- tracks/swift/exercises/diamond/Tests/DiamondTests/DiamondTests.swift
|
|
13213
|
+
- tracks/swift/exercises/diamond/Tests/LinuxMain.swift
|
|
13193
13214
|
- tracks/swift/exercises/difference-of-squares/.gitignore
|
|
13194
13215
|
- tracks/swift/exercises/difference-of-squares/Package.swift
|
|
13195
13216
|
- tracks/swift/exercises/difference-of-squares/README.md
|
|
File without changes
|
|
File without changes
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Parallel Letter Frequency
|
|
2
|
-
|
|
3
|
-
Count the frequency of letters in texts using parallel computation.
|
|
4
|
-
|
|
5
|
-
Parallelism is about doing things in parallel that can also be done
|
|
6
|
-
sequentially. A common example is counting the frequency of letters.
|
|
7
|
-
Create a function that returns the total frequency of each letter in a
|
|
8
|
-
list of texts and that employs parallelism.
|
|
9
|
-
|
|
10
|
-
The letters used consists of ASCII letters `a` to `z`, inclusive, and is case
|
|
11
|
-
insensitive.
|
|
12
|
-
|
|
13
|
-
## Submitting Exercises
|
|
14
|
-
|
|
15
|
-
Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
|
|
16
|
-
|
|
17
|
-
For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
For more detailed information about running tests, code style and linting,
|
|
21
|
-
please see the [help page](http://exercism.io/languages/python).
|
|
22
|
-
|
|
23
|
-
## Submitting Incomplete Solutions
|
|
24
|
-
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
from collections import Counter
|
|
3
|
-
from threading import Lock, Thread
|
|
4
|
-
from time import sleep
|
|
5
|
-
import sys
|
|
6
|
-
if sys.version[0] == '2':
|
|
7
|
-
from Queue import Queue
|
|
8
|
-
else:
|
|
9
|
-
from queue import Queue
|
|
10
|
-
|
|
11
|
-
total_workers = 3 # Maximum number of threads chosen arbitrarily
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class LetterCounter(object):
|
|
15
|
-
|
|
16
|
-
def __init__(self):
|
|
17
|
-
self.lock = Lock()
|
|
18
|
-
self.value = Counter()
|
|
19
|
-
|
|
20
|
-
def add_counter(self, counter_to_add):
|
|
21
|
-
self.lock.acquire()
|
|
22
|
-
try:
|
|
23
|
-
self.value = self.value + counter_to_add
|
|
24
|
-
finally:
|
|
25
|
-
self.lock.release()
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def count_letters(queue_of_texts, letter_to_frequency, worker_id):
|
|
29
|
-
while not queue_of_texts.empty():
|
|
30
|
-
sleep(worker_id + 1)
|
|
31
|
-
line_input = queue_of_texts.get()
|
|
32
|
-
if line_input is not None:
|
|
33
|
-
letters_in_line = Counter([x for x in line_input.lower() if
|
|
34
|
-
x.isalpha()])
|
|
35
|
-
letter_to_frequency.add_counter(letters_in_line)
|
|
36
|
-
queue_of_texts.task_done()
|
|
37
|
-
if line_input is None:
|
|
38
|
-
break
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def calculate(list_of_texts):
|
|
42
|
-
queue_of_texts = Queue()
|
|
43
|
-
[queue_of_texts.put(line) for line in list_of_texts]
|
|
44
|
-
letter_to_frequency = LetterCounter()
|
|
45
|
-
threads = []
|
|
46
|
-
for i in range(total_workers):
|
|
47
|
-
worker = Thread(target=count_letters, args=(queue_of_texts,
|
|
48
|
-
letter_to_frequency, i))
|
|
49
|
-
worker.start()
|
|
50
|
-
threads.append(worker)
|
|
51
|
-
queue_of_texts.join()
|
|
52
|
-
for i in range(total_workers):
|
|
53
|
-
queue_of_texts.put(None)
|
|
54
|
-
for t in threads:
|
|
55
|
-
t.join()
|
|
56
|
-
return letter_to_frequency.value
|