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
@@ -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
|