trackler 2.1.0.20 → 2.1.0.21

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f87268f3d1befaae03d6be8ac007d0728f59a122
4
- data.tar.gz: 54c2c7df1d551ac6082730d8daa399d82fc18886
3
+ metadata.gz: 10fae0e15e9198dab905f9201679574b543a3803
4
+ data.tar.gz: a463c33562dc740ccfa9a73402a211d2a19ecc6a
5
5
  SHA512:
6
- metadata.gz: 4f32ea0316601002cd7b6e36d6d67b2ebacc550f8e975761b436a33b5679e26f76da9aa8be03bbce38b58c2574dfd5c67b8f43a07da8ec97954a89e0eb0dee28
7
- data.tar.gz: afa5fb4fda304732356033a7fc863a5417427e3f8ab0a2512922572a31418a7cd17c2bb67da348ae89c41a434949e7c6f7f9553138802e4a53c90b95c69197fb
6
+ metadata.gz: 2ece06dd2344a889439d5fdad91e9a8b8838ac4a1c734a2b98971eac2af3ab5ee6aeca6048ea537894a051ed82a426af86e90555baf40d9db7bae7f6ae134aa9
7
+ data.tar.gz: a39f6786f6d649c82f57c58e8094bd3768dcea709d3e05ad248ca12a3188acc1f646b06b2303872a768712b55540775ffe243addf18b1eeb62ba6b40e996518f
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.1.0.20"
2
+ VERSION = "2.1.0.21"
3
3
  end
@@ -3,3 +3,7 @@
3
3
  Your code should contain a frequency :: Int -> [Text] -> Map Char Int
4
4
  function which accepts a number of workers to use in parallel and a list
5
5
  of texts and returns the total frequency of each letter in the text.
6
+
7
+ ### Benchmark
8
+
9
+ Check how changing number of workers affects performance of your solution by running the benchmark. Use `stack bench` to run it. Feel free to modify `bench/Benchmark.hs` to explore your solution's performance on different inputs.
@@ -0,0 +1,40 @@
1
+ {-# LANGUAGE OverloadedStrings #-}
2
+
3
+ import Frequency (frequency)
4
+
5
+ import Prelude hiding (unlines)
6
+ import Data.Text (Text, unlines)
7
+
8
+ import Criterion.Main (bench, bgroup, defaultMain, nf)
9
+ import Criterion.Types (Benchmark)
10
+ import Control.Concurrent (getNumCapabilities)
11
+ import Data.List (nub, sort, replicate)
12
+
13
+ odeAnDieFreude :: Text
14
+ odeAnDieFreude = unlines
15
+ [ "Freude schöner Götterfunken"
16
+ , "Tochter aus Elysium,"
17
+ , "Wir betreten feuertrunken,"
18
+ , "Himmlische, dein Heiligtum!"
19
+ , "Deine Zauber binden wieder"
20
+ , "Was die Mode streng geteilt;"
21
+ , "Alle Menschen werden Brüder,"
22
+ , "Wo dein sanfter Flügel weilt."
23
+ ]
24
+
25
+
26
+ makeBench :: [Text] -> Int -> Benchmark
27
+ makeBench anthems workers = bench name $ nf (`frequency` anthems) workers
28
+ where name = show workers ++ " workers"
29
+
30
+ benchGroup :: Int -> [Int] -> Int -> Benchmark
31
+ benchGroup processors numWorkers numAnthems =
32
+ bgroup (show numAnthems ++ " anthems on " ++ show processors ++ " threads") (makeBench anthems <$> numWorkers)
33
+ where anthems = replicate numAnthems odeAnDieFreude
34
+
35
+ main :: IO ()
36
+ main = do threads <- getNumCapabilities
37
+ let numsOfWorkers = nub $ sort [1..threads]
38
+ numsOfAnthems = [500]
39
+
40
+ defaultMain $ benchGroup threads numsOfWorkers <$> numsOfAnthems
@@ -18,3 +18,13 @@ tests:
18
18
  dependencies:
19
19
  - parallel-letter-frequency
20
20
  - hspec
21
+
22
+ benchmarks:
23
+ bench:
24
+ ghc-options: -threaded -with-rtsopts=-N -O2
25
+
26
+ main: Benchmark.hs
27
+ source-dirs: bench
28
+ dependencies:
29
+ - parallel-letter-frequency
30
+ - criterion
@@ -1,5 +1,5 @@
1
1
  name: parallel-letter-frequency
2
- version: 0.1.0.2
2
+ version: 0.1.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -20,3 +20,13 @@ tests:
20
20
  dependencies:
21
21
  - parallel-letter-frequency
22
22
  - hspec
23
+
24
+ benchmarks:
25
+ bench:
26
+ ghc-options: -threaded -with-rtsopts=-N -O2
27
+
28
+ main: Benchmark.hs
29
+ source-dirs: bench
30
+ dependencies:
31
+ - parallel-letter-frequency
32
+ - criterion
@@ -1,136 +1,128 @@
1
1
 
2
+ import org.junit.Ignore;
3
+ import org.junit.Test;
4
+
2
5
  import java.util.ArrayList;
3
6
  import java.util.Arrays;
4
7
  import java.util.Collections;
5
8
  import java.util.List;
9
+
6
10
  import static org.junit.Assert.assertEquals;
7
- import org.junit.Ignore;
8
- import org.junit.Test;
9
11
 
10
12
  public class BinarySearchTest {
11
13
 
12
- public static final List<Integer> EMPTY_LIST
13
- = Collections.unmodifiableList(new ArrayList<Integer>(0));
14
-
15
- public static final List<Integer> LIST_OF_UNIT_LENGTH
16
- = Collections.unmodifiableList(
17
- Arrays.asList(6)
18
- );
19
-
20
- private static final List<Integer> SORTED_LIST
21
- = Collections.unmodifiableList(
22
- Arrays.asList(1, 3, 4, 6, 8, 9, 11)
23
- );
24
-
25
- public static final List<Integer> SORTED_LIST_OF_ODD_LENGTH
26
- = Collections.unmodifiableList(
27
- Arrays.asList(1, 3, 5, 8, 13, 21, 34, 55,
28
- 89, 144, 233, 377, 634)
29
- );
30
-
31
- public static final List<Integer> SORTED_LIST_OF_EVEN_LENGTH
32
- = Collections.unmodifiableList(
33
- Arrays.asList(1, 3, 5, 8, 13, 21, 34, 55,
34
- 89, 144, 233, 377)
35
- );
36
-
37
14
  @Test
38
15
  public void findsAValueInAnArrayWithOneElement() {
39
- BinarySearch<Integer> sut = new BinarySearch<>(LIST_OF_UNIT_LENGTH);
40
- final int value = 6;
41
- final int actual = sut.indexOf(value);
42
- final int expected = 0;
43
- assertEquals(expected, actual);
16
+ List<Integer> listOfUnitLength = Collections.singletonList(6);
17
+
18
+ BinarySearch<Integer> sut = new BinarySearch<>(listOfUnitLength);
19
+
20
+ assertEquals(0, sut.indexOf(6));
44
21
  }
45
22
 
46
23
  @Ignore("Remove to run test")
47
24
  @Test
48
25
  public void findsAValueInTheMiddleOfAnArray() {
49
- BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
50
- final int value = 6;
51
- final int actual = sut.indexOf(value);
52
- final int expected = 3;
53
- assertEquals(expected, actual);
26
+ List<Integer> sortedList = Collections.unmodifiableList(
27
+ Arrays.asList(1, 3, 4, 6, 8, 9, 11)
28
+ );
29
+
30
+ BinarySearch<Integer> sut = new BinarySearch<>(sortedList);
31
+
32
+ assertEquals(3, sut.indexOf(6));
54
33
  }
55
34
 
56
35
  @Ignore("Remove to run test")
57
36
  @Test
58
37
  public void findsAValueAtTheBeginningOfAnArray() {
59
- BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
60
- final int value = 1;
61
- final int actual = sut.indexOf(value);
62
- final int expected = 0;
63
- assertEquals(expected, actual);
38
+ List<Integer> sortedList = Collections.unmodifiableList(
39
+ Arrays.asList(1, 3, 4, 6, 8, 9, 11)
40
+ );
41
+
42
+ BinarySearch<Integer> sut = new BinarySearch<>(sortedList);
43
+
44
+ assertEquals(0, sut.indexOf(1));
64
45
  }
65
46
 
66
47
  @Ignore("Remove to run test")
67
48
  @Test
68
49
  public void findsAValueAtTheEndOfAnArray() {
69
- BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
70
- final int value = 11;
71
- final int actual = sut.indexOf(value);
72
- final int expected = 6;
73
- assertEquals(expected, actual);
50
+ List<Integer> sortedList = Collections.unmodifiableList(
51
+ Arrays.asList(1, 3, 4, 6, 8, 9, 11)
52
+ );
53
+
54
+ BinarySearch<Integer> sut = new BinarySearch<>(sortedList);
55
+
56
+ assertEquals(6, sut.indexOf(11));
74
57
  }
75
58
 
76
59
  @Ignore("Remove to run test")
77
60
  @Test
78
61
  public void findsAValueInAnArrayOfOddLength() {
79
- BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST_OF_ODD_LENGTH);
80
- final int value = 144;
81
- final int actual = sut.indexOf(value);
82
- final int expected = 9;
83
- assertEquals(expected, actual);
62
+ List<Integer> sortedListOfOddLength = Collections.unmodifiableList(
63
+ Arrays.asList(1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 634)
64
+ );
65
+
66
+ BinarySearch<Integer> sut = new BinarySearch<>(sortedListOfOddLength);
67
+
68
+ assertEquals(9, sut.indexOf(144));
84
69
  }
85
70
 
86
71
  @Ignore("Remove to run test")
87
72
  @Test
88
73
  public void findsAValueInAnArrayOfEvenLength() {
89
- BinarySearch<Integer> sut
90
- = new BinarySearch<>(SORTED_LIST_OF_EVEN_LENGTH);
91
- final int value = 21;
92
- final int actual = sut.indexOf(value);
93
- final int expected = 5;
94
- assertEquals(expected, actual);
74
+ List<Integer> sortedListOfEvenLength = Collections.unmodifiableList(
75
+ Arrays.asList(1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377)
76
+ );
77
+
78
+ BinarySearch<Integer> sut = new BinarySearch<>(sortedListOfEvenLength);
79
+
80
+ assertEquals(5, sut.indexOf(21));
95
81
  }
96
82
 
97
83
  @Ignore("Remove to run test")
98
84
  @Test
99
85
  public void identifiesThatAValueIsNotIncludedInTheArray() {
100
- BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
101
- final int value = 7;
102
- final int actual = sut.indexOf(value);
103
- final int expected = -1;
104
- assertEquals(expected, actual);
86
+ List<Integer> sortedList = Collections.unmodifiableList(
87
+ Arrays.asList(1, 3, 4, 6, 8, 9, 11)
88
+ );
89
+
90
+ BinarySearch<Integer> sut = new BinarySearch<>(sortedList);
91
+
92
+ assertEquals(-1, sut.indexOf(7));
105
93
  }
106
94
 
107
95
  @Ignore("Remove to run test")
108
96
  @Test
109
97
  public void aValueSmallerThanTheArraysSmallestValueIsNotIncluded() {
110
- BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
111
- final int value = 0;
112
- final int actual = sut.indexOf(value);
113
- final int expected = -1;
114
- assertEquals(expected, actual);
98
+ List<Integer> sortedList = Collections.unmodifiableList(
99
+ Arrays.asList(1, 3, 4, 6, 8, 9, 11)
100
+ );
101
+
102
+ BinarySearch<Integer> sut = new BinarySearch<>(sortedList);
103
+
104
+ assertEquals(-1, sut.indexOf(0));
115
105
  }
116
106
 
117
107
  @Ignore("Remove to run test")
118
108
  @Test
119
109
  public void aValueLargerThanTheArraysSmallestValueIsNotIncluded() {
120
- BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
121
- final int value = 13;
122
- final int actual = sut.indexOf(value);
123
- final int expected = -1;
124
- assertEquals(expected, actual);
110
+ List<Integer> sortedList = Collections.unmodifiableList(
111
+ Arrays.asList(1, 3, 4, 6, 8, 9, 11)
112
+ );
113
+
114
+ BinarySearch<Integer> sut = new BinarySearch<>(sortedList);
115
+
116
+ assertEquals(-1, sut.indexOf(13));
125
117
  }
126
118
 
127
119
  @Ignore("Remove to run test")
128
120
  @Test
129
121
  public void nothingIsIncludedInAnEmptyArray() {
130
- BinarySearch<Integer> sut = new BinarySearch<>(EMPTY_LIST);
131
- final int value = 1;
132
- final int actual = sut.indexOf(value);
133
- final int expected = -1;
134
- assertEquals(expected, actual);
122
+ List<Integer> emptyList = Collections.emptyList();
123
+
124
+ BinarySearch<Integer> sut = new BinarySearch<>(emptyList);
125
+
126
+ assertEquals(-1, sut.indexOf(1));
135
127
  }
136
128
  }
@@ -8,7 +8,7 @@ import static java.util.Collections.emptyList;
8
8
  import static java.util.Collections.singletonList;
9
9
  import static org.junit.Assert.assertEquals;
10
10
 
11
- public final class ChangeCalculatorTest {
11
+ public class ChangeCalculatorTest {
12
12
 
13
13
  /*
14
14
  * See https://github.com/junit-team/junit4/wiki/Rules for information on JUnit Rules in general and
@@ -3,6 +3,7 @@
3
3
  "language": "Vim script",
4
4
  "repository": "https://github.com/exercism/xvimscript",
5
5
  "active": false,
6
+ "test_pattern": "\\.vader$",
6
7
  "exercises": [
7
8
  {
8
9
  "slug": "hello-world",
@@ -32,20 +33,27 @@
32
33
  {
33
34
  "slug": "anagram",
34
35
  "difficulty": 1,
35
- "topics": [
36
- ]
36
+ "topics": []
37
37
  },
38
38
  {
39
39
  "slug": "difference-of-squares",
40
40
  "difficulty": 1,
41
- "topics": [
42
- ]
41
+ "topics": []
43
42
  },
44
43
  {
45
44
  "slug": "raindrops",
46
45
  "difficulty": 1,
47
- "topics": [
48
- ]
46
+ "topics": []
47
+ },
48
+ {
49
+ "slug": "word-count",
50
+ "difficulty": 1,
51
+ "topics": []
52
+ },
53
+ {
54
+ "slug": "atbash-cipher",
55
+ "difficulty": 1,
56
+ "topics": []
49
57
  }
50
58
  ],
51
59
  "deprecated": [],
@@ -0,0 +1,50 @@
1
+ " The tests are divided into two groups:
2
+ "
3
+ " - encoding from English to atbash cipher
4
+ " - decoding from atbash cipher to all-lowercase-mashed-together English
5
+
6
+ " Test encoding from English to atbash
7
+
8
+ Execute (encode yes):
9
+ AssertEqual 'bvh', AtbashEncode('yes')
10
+
11
+ Execute (encode no):
12
+ AssertEqual 'ml', AtbashEncode('no')
13
+
14
+ Execute (encode OMG):
15
+ AssertEqual 'lnt', AtbashEncode('OMG')
16
+
17
+ Execute (encode spaces):
18
+ AssertEqual 'lnt', AtbashEncode('O M G')
19
+
20
+ Execute (encode mindblowingly):
21
+ AssertEqual 'nrmwy oldrm tob', AtbashEncode('mindblowingly')
22
+
23
+ Execute (encode numbers):
24
+ AssertEqual 'gvhgr mt123 gvhgr mt', AtbashEncode('Testing,1 2 3, testing.')
25
+
26
+ Execute (encode deep thought):
27
+ AssertEqual 'gifgs rhurx grlm', AtbashEncode('Truth is fiction.')
28
+
29
+ Execute (encode all the letters):
30
+ AssertEqual
31
+ \ 'gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt',
32
+ \ AtbashEncode('The quick brown fox jumps over the lazy dog.')
33
+
34
+ " Test decoding from atbash to English
35
+
36
+ Execute (decode exercism):
37
+ AssertEqual 'exercism', AtbashDecode('vcvix rhn')
38
+
39
+ Execute (decode a sentence):
40
+ AssertEqual
41
+ \ 'anobstacleisoftenasteppingstone',
42
+ \ AtbashDecode('zmlyh gzxov rhlug vmzhg vkkrm thglm v')
43
+
44
+ Execute (decode numbers):
45
+ AssertEqual 'testing123testing', AtbashDecode('gvhgr mt123 gvhgr mt')
46
+
47
+ Execute (decode all the letters):
48
+ AssertEqual
49
+ \ 'thequickbrownfoxjumpsoverthelazydog',
50
+ \ AtbashDecode('gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt')
@@ -0,0 +1,23 @@
1
+ "
2
+ " Create an implementation of the atbash cipher, an ancient encryption system
3
+ " created in the Middle East.
4
+ "
5
+ " Examples:
6
+ "
7
+ " :echo AtbashEncode('test')
8
+ " gvhg
9
+ "
10
+ " :echo AtbashDecode('gvhg')
11
+ " test
12
+ "
13
+ " :echo AtbashDecode('gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt')
14
+ " thequickbrownfoxjumpsoverthelazydog
15
+ "
16
+
17
+ function! AtbashDecode(cipher) abort
18
+ " your code goes here
19
+ endfunction
20
+
21
+ function! AtbashEncode(plaintext) abort
22
+ " your code goes here
23
+ endfunction
@@ -0,0 +1,21 @@
1
+ function! AtbashDecode(cipher) abort
2
+ return s:algorithm(s:normalize(a:cipher))
3
+ endfunction
4
+
5
+ function! AtbashEncode(plaintext) abort
6
+ return s:chunk(AtbashDecode(a:plaintext))
7
+ endfunction
8
+
9
+ function! s:normalize(text) abort
10
+ return substitute(tolower(a:text), '[^a-z0-9]', '', 'g')
11
+ endfunction
12
+
13
+ function! s:algorithm(text) abort
14
+ let alphabet = 'abcdefghijklmnopqrstuvwxyz'
15
+ let reversed = 'zyxwvutsrqponmlkjihgfedcba'
16
+ return tr(a:text, alphabet, reversed)
17
+ endfunction
18
+
19
+ function! s:chunk(text) abort
20
+ return join(split(a:text, '.\{5}\zs'))
21
+ endfunction
@@ -0,0 +1,10 @@
1
+ function! WordCount(phrase) abort
2
+ let words = {}
3
+
4
+ for word in split(a:phrase, "[^[:alnum:]']\\+")
5
+ let word = substitute(tolower(word), "^'\\(.*\\)'$", '\1', '')
6
+ let words[word] = get(words, word) + 1
7
+ endfor
8
+
9
+ return words
10
+ endfunction
@@ -0,0 +1,54 @@
1
+ Before:
2
+ if exists('expected')
3
+ unlet expected
4
+ endif
5
+
6
+ Execute (count one word):
7
+ let phrase = 'word'
8
+ let expected = {'word': 1}
9
+ AssertEqual expected, WordCount(phrase)
10
+
11
+ Execute (count one of each word):
12
+ let phrase = 'one of each'
13
+ let expected = {'one': 1, 'of': 1, 'each': 1}
14
+ AssertEqual expected, WordCount(phrase)
15
+
16
+ Execute (multiple occurrences of a word):
17
+ let phrase = 'one fish two fish red fish blue fish'
18
+ let expected = {'one': 1, 'fish': 4, 'two': 1, 'red': 1, 'blue': 1}
19
+ AssertEqual expected, WordCount(phrase)
20
+
21
+ Execute (handles cramped lists):
22
+ let phrase = 'one,two,three'
23
+ let expected = {'one': 1, 'two': 1, 'three': 1}
24
+ AssertEqual expected, WordCount(phrase)
25
+
26
+ Execute (handles expanded lists):
27
+ let phrase = "one,\ntwo,\nthree"
28
+ let expected = {'one': 1, 'two': 1, 'three': 1}
29
+ AssertEqual expected, WordCount(phrase)
30
+
31
+ Execute (ignore punctuation):
32
+ let phrase = 'car: carpet as java: javascript!!&@$%^&'
33
+ let expected = {'car': 1, 'carpet': 1, 'as': 1, 'java': 1, 'javascript': 1}
34
+ AssertEqual expected, WordCount(phrase)
35
+
36
+ Execute (include numbers):
37
+ let phrase = 'testing, 1, 2 testing'
38
+ let expected = {'testing': 2, '1': 1, '2': 1}
39
+ AssertEqual expected, WordCount(phrase)
40
+
41
+ Execute (normalize case):
42
+ let phrase = 'go Go GO Stop stop'
43
+ let expected = {'go': 3, 'stop': 2}
44
+ AssertEqual expected, WordCount(phrase)
45
+
46
+ Execute (with apostrophes):
47
+ let phrase = "First: don't laugh. Then: don't cry."
48
+ let expected = {'first': 1, 'don''t': 2, 'laugh': 1, 'then': 1, 'cry': 1}
49
+ AssertEqual expected, WordCount(phrase)
50
+
51
+ Execute (with quotations):
52
+ let phrase = "Joe can't tell between 'large' and large."
53
+ let expected = {'joe': 1, 'can''t': 1, 'tell': 1, 'between': 1, 'large': 2, 'and': 1}
54
+ AssertEqual expected, WordCount(phrase)
@@ -0,0 +1,14 @@
1
+ "
2
+ " Given a phrase, return a dictionary containing the count of occurrences of
3
+ " each word.
4
+ "
5
+ " Example:
6
+ "
7
+ " :echo WordCount('olly olly in come free')
8
+ " {'olly': 2, 'come': 1, 'in': 1, 'free': 1}
9
+ "
10
+ function! WordCount(phrase) abort
11
+
12
+ " your solution goes here
13
+
14
+ endfunction
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.1.0.20
4
+ version: 2.1.0.21
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-05-25 00:00:00.000000000 Z
11
+ date: 2017-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -3991,6 +3991,7 @@ files:
3991
3991
  - tracks/haskell/exercises/pangram/stack.yaml
3992
3992
  - tracks/haskell/exercises/pangram/test/Tests.hs
3993
3993
  - tracks/haskell/exercises/parallel-letter-frequency/HINTS.md
3994
+ - tracks/haskell/exercises/parallel-letter-frequency/bench/Benchmark.hs
3994
3995
  - tracks/haskell/exercises/parallel-letter-frequency/examples/success-standard/package.yaml
3995
3996
  - tracks/haskell/exercises/parallel-letter-frequency/examples/success-standard/src/Frequency.hs
3996
3997
  - tracks/haskell/exercises/parallel-letter-frequency/package.yaml
@@ -9060,6 +9061,9 @@ files:
9060
9061
  - tracks/vimscript/exercises/anagram/anagram.vader
9061
9062
  - tracks/vimscript/exercises/anagram/anagram.vim
9062
9063
  - tracks/vimscript/exercises/anagram/example.vim
9064
+ - tracks/vimscript/exercises/atbash-cipher/atbash_cipher.vader
9065
+ - tracks/vimscript/exercises/atbash-cipher/atbash_cipher.vim
9066
+ - tracks/vimscript/exercises/atbash-cipher/example.vim
9063
9067
  - tracks/vimscript/exercises/bob/bob.vader
9064
9068
  - tracks/vimscript/exercises/bob/bob.vim
9065
9069
  - tracks/vimscript/exercises/bob/example.vim
@@ -9081,6 +9085,9 @@ files:
9081
9085
  - tracks/vimscript/exercises/rna-transcription/example.vim
9082
9086
  - tracks/vimscript/exercises/rna-transcription/rna_transcription.vader
9083
9087
  - tracks/vimscript/exercises/rna-transcription/rna_transcription.vim
9088
+ - tracks/vimscript/exercises/word-count/example.vim
9089
+ - tracks/vimscript/exercises/word-count/word_count.vader
9090
+ - tracks/vimscript/exercises/word-count/word_count.vim
9084
9091
  - tracks/vimscript/img/icon.png
9085
9092
  homepage: http://exercism.io
9086
9093
  licenses: