trackler 2.2.1.77 → 2.2.1.78

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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/transpose/canonical-data.json +94 -116
  4. data/tracks/bash/config/maintainers.json +11 -1
  5. data/tracks/clojure/config.json +10 -2
  6. data/tracks/clojure/exercises/reverse-string/README.md +14 -0
  7. data/tracks/clojure/exercises/reverse-string/project.clj +4 -0
  8. data/tracks/clojure/exercises/reverse-string/src/example.clj +5 -0
  9. data/tracks/clojure/exercises/reverse-string/src/reverse_string.clj +5 -0
  10. data/tracks/clojure/exercises/reverse-string/test/reverse_string_test.clj +18 -0
  11. data/tracks/clojure/exercises/say/README.md +70 -0
  12. data/tracks/clojure/exercises/{two-fer → say}/project.clj +3 -3
  13. data/tracks/clojure/exercises/say/src/example.clj +9 -0
  14. data/tracks/clojure/exercises/say/src/say.clj +5 -0
  15. data/tracks/clojure/exercises/say/test/say_test.clj +48 -0
  16. data/tracks/coffeescript/docs/ABOUT.md +4 -9
  17. data/tracks/coffeescript/docs/INSTALLATION.md +2 -2
  18. data/tracks/erlang/exercises/pangram/rebar.config +1 -1
  19. data/tracks/erlang/exercises/pangram/src/example.erl +2 -3
  20. data/tracks/erlang/exercises/pangram/test/pangram_tests.erl +12 -13
  21. data/tracks/fsharp/exercises/grep/Example.fs +16 -20
  22. data/tracks/fsharp/exercises/grep/GrepTest.fs +154 -233
  23. data/tracks/fsharp/generators/Common.fs +7 -2
  24. data/tracks/fsharp/generators/Exercise.fs +51 -16
  25. data/tracks/fsharp/generators/Formatting.fs +13 -6
  26. data/tracks/fsharp/generators/Generators.fs +44 -14
  27. data/tracks/fsharp/generators/Rendering.fs +8 -1
  28. data/tracks/fsharp/generators/Templates/Generators/_GrepSetup.liquid +37 -0
  29. data/tracks/fsharp/generators/Templates/_TestClass.liquid +9 -3
  30. data/tracks/fsharp/generators/Templates/{_TestMethod.liquid → _TestFunction.liquid} +0 -0
  31. data/tracks/fsharp/generators/Templates/{_TestMethodBody.liquid → _TestFunctionBody.liquid} +0 -0
  32. data/tracks/fsharp/generators/Templates/_TestMember.liquid +3 -0
  33. data/tracks/fsharp/generators/Templates/_TestMemberBody.liquid +4 -0
  34. data/tracks/fsharp/generators/Templates/_TestModule.liquid +17 -0
  35. data/tracks/go/config.json +24 -0
  36. data/tracks/go/exercises/acronym/.meta/gen.go +5 -3
  37. data/tracks/go/exercises/acronym/acronym.go +0 -2
  38. data/tracks/go/exercises/acronym/cases_test.go +2 -2
  39. data/tracks/go/exercises/acronym/example.go +2 -3
  40. data/tracks/go/exercises/all-your-base/.meta/gen.go +9 -7
  41. data/tracks/go/exercises/all-your-base/cases_test.go +2 -2
  42. data/tracks/go/exercises/allergies/.meta/gen.go +10 -6
  43. data/tracks/go/exercises/allergies/cases_test.go +2 -2
  44. data/tracks/go/exercises/anagram/.meta/gen.go +7 -5
  45. data/tracks/go/exercises/anagram/cases_test.go +2 -2
  46. data/tracks/go/exercises/armstrong-numbers/.meta/gen.go +54 -0
  47. data/tracks/go/exercises/armstrong-numbers/armstrong_test.go +12 -0
  48. data/tracks/go/exercises/armstrong-numbers/cases_test.go +52 -0
  49. data/tracks/go/exercises/armstrong-numbers/example.go +24 -0
  50. data/tracks/go/exercises/binary-search/.meta/gen.go +7 -5
  51. data/tracks/go/exercises/binary-search/cases_test.go +2 -2
  52. data/tracks/go/exercises/book-store/.meta/gen.go +5 -3
  53. data/tracks/go/exercises/book-store/cases_test.go +2 -2
  54. data/tracks/go/exercises/connect/example.go +4 -5
  55. data/tracks/go/exercises/dominoes/.meta/gen.go +61 -0
  56. data/tracks/go/exercises/dominoes/.meta/hints.md +29 -0
  57. data/tracks/go/exercises/dominoes/README.md +67 -0
  58. data/tracks/go/exercises/dominoes/cases_test.go +72 -0
  59. data/tracks/go/exercises/dominoes/dominoes_test.go +106 -0
  60. data/tracks/go/exercises/dominoes/example.go +146 -0
  61. data/tracks/go/exercises/ledger/example.go +1 -1
  62. data/tracks/groovy/.gitignore +3 -0
  63. data/tracks/groovy/.travis.yml +10 -1
  64. data/tracks/groovy/bin/prepeare_exercise_builds.groovy +77 -0
  65. data/tracks/groovy/build.gradle +25 -0
  66. data/tracks/groovy/exercises/difference-of-squares/Example.groovy +3 -3
  67. data/tracks/groovy/exercises/gigasecond/GigasecondSpec.groovy +3 -3
  68. data/tracks/groovy/exercises/linked-list/{DoubleLinkedList.groovy → LinkedList.groovy} +0 -0
  69. data/tracks/groovy/exercises/linked-list/{DoubleLinkedListSpec.groovy → LinkedListSpec.groovy} +0 -0
  70. data/tracks/groovy/exercises/linked-list/README.md +1 -1
  71. data/tracks/groovy/gradle/wrapper/gradle-wrapper.jar +0 -0
  72. data/tracks/groovy/gradle/wrapper/gradle-wrapper.properties +6 -0
  73. data/tracks/groovy/gradlew +172 -0
  74. data/tracks/groovy/gradlew.bat +84 -0
  75. data/tracks/groovy/settings.gradle +9 -0
  76. data/tracks/ocaml/exercises/acronym/.merlin +1 -1
  77. data/tracks/ocaml/exercises/all-your-base/.merlin +1 -1
  78. data/tracks/ocaml/exercises/anagram/.merlin +1 -1
  79. data/tracks/ocaml/exercises/atbash-cipher/.merlin +1 -1
  80. data/tracks/ocaml/exercises/beer-song/.merlin +1 -1
  81. data/tracks/ocaml/exercises/binary-search/.merlin +1 -1
  82. data/tracks/ocaml/exercises/bob/.merlin +1 -1
  83. data/tracks/ocaml/exercises/bowling/.merlin +1 -1
  84. data/tracks/ocaml/exercises/change/.merlin +1 -1
  85. data/tracks/ocaml/exercises/difference-of-squares/.merlin +1 -1
  86. data/tracks/ocaml/exercises/etl/.merlin +1 -1
  87. data/tracks/ocaml/exercises/forth/.merlin +1 -1
  88. data/tracks/ocaml/exercises/grade-school/.merlin +1 -1
  89. data/tracks/ocaml/exercises/hamming/.merlin +1 -1
  90. data/tracks/ocaml/exercises/hangman/.merlin +1 -1
  91. data/tracks/ocaml/exercises/hello-world/.merlin +1 -1
  92. data/tracks/ocaml/exercises/hexadecimal/.merlin +1 -1
  93. data/tracks/ocaml/exercises/leap/.merlin +1 -1
  94. data/tracks/ocaml/exercises/list-ops/.merlin +1 -1
  95. data/tracks/ocaml/exercises/luhn/.merlin +1 -1
  96. data/tracks/ocaml/exercises/meetup/.merlin +1 -1
  97. data/tracks/ocaml/exercises/minesweeper/.merlin +1 -1
  98. data/tracks/ocaml/exercises/nucleotide-count/.merlin +1 -1
  99. data/tracks/ocaml/exercises/phone-number/.merlin +1 -1
  100. data/tracks/ocaml/exercises/prime-factors/.merlin +1 -1
  101. data/tracks/ocaml/exercises/raindrops/.merlin +1 -1
  102. data/tracks/ocaml/exercises/react/.merlin +1 -1
  103. data/tracks/ocaml/exercises/rectangles/.merlin +1 -1
  104. data/tracks/ocaml/exercises/rna-transcription/.merlin +1 -1
  105. data/tracks/ocaml/exercises/run-length-encoding/.merlin +1 -1
  106. data/tracks/ocaml/exercises/say/.merlin +1 -1
  107. data/tracks/ocaml/exercises/space-age/.merlin +1 -1
  108. data/tracks/ocaml/exercises/triangle/.merlin +1 -1
  109. data/tracks/ocaml/exercises/word-count/.merlin +1 -1
  110. data/tracks/ocaml/exercises/zipper/.merlin +1 -1
  111. data/tracks/typescript/config/maintainers.json +2 -2
  112. metadata +37 -12
  113. data/tracks/clojure/exercises/two-fer/README.md +0 -19
  114. data/tracks/clojure/exercises/two-fer/src/example.clj +0 -5
  115. data/tracks/clojure/exercises/two-fer/src/two_fer.clj +0 -5
  116. data/tracks/clojure/exercises/two-fer/test/two_fer_test.clj +0 -12
  117. data/tracks/erlang/exercises/pangram/include/exercism.hrl +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3da6a850390bdbe8037da25408699c986444008c
4
- data.tar.gz: 9d76e2252a450507df607663a2247737af897deb
3
+ metadata.gz: 1c9b981950c88180c82d402ad10c2cad2fe1521a
4
+ data.tar.gz: 2cda694ae9c0522d67786b6b598afead61a3d89d
5
5
  SHA512:
6
- metadata.gz: a61be70536d4c202b42e48b50b5e43ac99e7af60ec9d6b776825af83a146f22f64d71f0be5cd6d95dd1c1f47f8285ce60569ae99b3293ddfa92505f6ebe98558
7
- data.tar.gz: eae0a204221616c6d66d209c1096fd88aaee9326953beb440d90a2a53e386fd3e76dfe96b4f2f7ab5d64a703f4be03e78d7fb35e4f24e701cea7a80d66e8a12e
6
+ metadata.gz: 995e912fd7358ce72fe0827f690c629e508aaa4265051a8d6b039c5493e332fb24390cfa14599506b20fb2fccf61b2db915da30d8546afcee98ae7265ad0922b
7
+ data.tar.gz: e57b484660dfd3207c19bc63e06f1e6891b4f0cad158004546e951f973105a87e1dc08cabc860e4c78364d65526f73cc6eec865c7e08516fad3bf7e3224f8a90
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.77"
2
+ VERSION = "2.2.1.78"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "exercise": "transpose",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "comments": [
5
5
  "JSON doesn't allow for multi-line strings, so all multi-line input is ",
6
6
  "presented here as arrays of strings. It's up to the test generator to join the ",
@@ -10,13 +10,19 @@
10
10
  {
11
11
  "description": "empty string",
12
12
  "property": "transpose",
13
- "input": [],
13
+ "input": {
14
+ "lines": []
15
+ },
14
16
  "expected": []
15
17
  },
16
18
  {
17
19
  "description": "two characters in a row",
18
20
  "property": "transpose",
19
- "input": ["A1"],
21
+ "input": {
22
+ "lines": [
23
+ "A1"
24
+ ]
25
+ },
20
26
  "expected": [
21
27
  "A",
22
28
  "1"
@@ -25,10 +31,12 @@
25
31
  {
26
32
  "description": "two characters in a column",
27
33
  "property": "transpose",
28
- "input": [
29
- "A",
30
- "1"
31
- ],
34
+ "input": {
35
+ "lines": [
36
+ "A",
37
+ "1"
38
+ ]
39
+ },
32
40
  "expected": [
33
41
  "A1"
34
42
  ]
@@ -36,10 +44,12 @@
36
44
  {
37
45
  "description": "simple",
38
46
  "property": "transpose",
39
- "input": [
40
- "ABC",
41
- "123"
42
- ],
47
+ "input": {
48
+ "lines": [
49
+ "ABC",
50
+ "123"
51
+ ]
52
+ },
43
53
  "expected": [
44
54
  "A1",
45
55
  "B2",
@@ -49,7 +59,9 @@
49
59
  {
50
60
  "description": "single line",
51
61
  "property": "transpose",
52
- "input": ["Single line."],
62
+ "input": {
63
+ "lines": ["Single line."]
64
+ },
53
65
  "expected": [
54
66
  "S",
55
67
  "i",
@@ -68,10 +80,12 @@
68
80
  {
69
81
  "description": "first line longer than second line",
70
82
  "property": "transpose",
71
- "input": [
72
- "The fourth line.",
73
- "The fifth line."
74
- ],
83
+ "input": {
84
+ "lines": [
85
+ "The fourth line.",
86
+ "The fifth line."
87
+ ]
88
+ },
75
89
  "expected": [
76
90
  "TT",
77
91
  "hh",
@@ -94,10 +108,12 @@
94
108
  {
95
109
  "description": "second line longer than first line",
96
110
  "property": "transpose",
97
- "input": [
98
- "The first line.",
99
- "The second line."
100
- ],
111
+ "input": {
112
+ "lines": [
113
+ "The first line.",
114
+ "The second line."
115
+ ]
116
+ },
101
117
  "expected": [
102
118
  "TT",
103
119
  "hh",
@@ -117,16 +133,49 @@
117
133
  " ."
118
134
  ]
119
135
  },
136
+ {
137
+ "description": "mixed line length",
138
+ "property": "transpose",
139
+ "input": {
140
+ "lines": [
141
+ "The longest line.",
142
+ "A long line.",
143
+ "A longer line.",
144
+ "A line."
145
+ ]
146
+ },
147
+ "expected": [
148
+ "TAAA",
149
+ "h ",
150
+ "elll",
151
+ " ooi",
152
+ "lnnn",
153
+ "ogge",
154
+ "n e.",
155
+ "glr",
156
+ "ei ",
157
+ "snl",
158
+ "tei",
159
+ " .n",
160
+ "l e",
161
+ "i .",
162
+ "n",
163
+ "e",
164
+ "."
165
+ ]
166
+ },
120
167
  {
121
168
  "description": "square",
122
169
  "property": "transpose",
123
- "input": [
124
- "HEART",
125
- "EMBER",
126
- "ABUSE",
127
- "RESIN",
128
- "TREND"
129
- ],
170
+ "input": {
171
+ "lines": [
172
+ "HEART",
173
+ "EMBER",
174
+ "ABUSE",
175
+ "RESIN",
176
+ "TREND"
177
+ ]
178
+ },
130
179
  "expected": [
131
180
  "HEART",
132
181
  "EMBER",
@@ -138,12 +187,14 @@
138
187
  {
139
188
  "description": "rectangle",
140
189
  "property": "transpose",
141
- "input": [
142
- "FRACTURE",
143
- "OUTLINED",
144
- "BLOOMING",
145
- "SEPTETTE"
146
- ],
190
+ "input": {
191
+ "lines": [
192
+ "FRACTURE",
193
+ "OUTLINED",
194
+ "BLOOMING",
195
+ "SEPTETTE"
196
+ ]
197
+ },
147
198
  "expected": [
148
199
  "FOBS",
149
200
  "RULE",
@@ -158,14 +209,16 @@
158
209
  {
159
210
  "description": "triangle",
160
211
  "property": "transpose",
161
- "input": [
162
- "T",
163
- "EE",
164
- "AAA",
165
- "SSSS",
166
- "EEEEE",
167
- "RRRRRR"
168
- ],
212
+ "input": {
213
+ "lines": [
214
+ "T",
215
+ "EE",
216
+ "AAA",
217
+ "SSSS",
218
+ "EEEEE",
219
+ "RRRRRR"
220
+ ]
221
+ },
169
222
  "expected": [
170
223
  "TEASER",
171
224
  " EASER",
@@ -174,81 +227,6 @@
174
227
  " ER",
175
228
  " R"
176
229
  ]
177
- },
178
- {
179
- "description": "many lines",
180
- "property": "transpose",
181
- "input": [
182
- "Chor. Two households, both alike in dignity,",
183
- "In fair Verona, where we lay our scene,",
184
- "From ancient grudge break to new mutiny,",
185
- "Where civil blood makes civil hands unclean.",
186
- "From forth the fatal loins of these two foes",
187
- "A pair of star-cross'd lovers take their life;",
188
- "Whose misadventur'd piteous overthrows",
189
- "Doth with their death bury their parents' strife.",
190
- "The fearful passage of their death-mark'd love,",
191
- "And the continuance of their parents' rage,",
192
- "Which, but their children's end, naught could remove,",
193
- "Is now the two hours' traffic of our stage;",
194
- "The which if you with patient ears attend,",
195
- "What here shall miss, our toil shall strive to mend."
196
- ],
197
- "expected": [
198
- "CIFWFAWDTAWITW",
199
- "hnrhr hohnhshh",
200
- "o oeopotedi ea",
201
- "rfmrmash cn t",
202
- ".a e ie fthow ",
203
- " ia fr weh,whh",
204
- "Trnco miae ie",
205
- "w ciroitr btcr",
206
- "oVivtfshfcuhhe",
207
- " eeih a uote ",
208
- "hrnl sdtln is",
209
- "oot ttvh tttfh",
210
- "un bhaeepihw a",
211
- "saglernianeoyl",
212
- "e,ro -trsui ol",
213
- "h uofcu sarhu ",
214
- "owddarrdan o m",
215
- "lhg to'egccuwi",
216
- "deemasdaeehris",
217
- "sr als t ists",
218
- ",ebk 'phool'h,",
219
- " reldi ffd ",
220
- "bweso tb rtpo",
221
- "oea ileutterau",
222
- "t kcnoorhhnatr",
223
- "hl isvuyee'fi ",
224
- " atv es iisfet",
225
- "ayoior trr ino",
226
- "l lfsoh ecti",
227
- "ion vedpn l",
228
- "kuehtteieadoe ",
229
- "erwaharrar,fas",
230
- " nekt te rh",
231
- "ismdsehphnnosa",
232
- "ncuse ra-tau l",
233
- " et tormsural",
234
- "dniuthwea'g t ",
235
- "iennwesnr hsts",
236
- "g,ycoi tkrttet",
237
- "n ,l r s'a anr",
238
- "i ef 'dgcgdi",
239
- "t aol eoe,v",
240
- "y nei sl,u; e",
241
- ", .sf to l ",
242
- " e rv d t",
243
- " ; ie o",
244
- " f, r ",
245
- " e e m",
246
- " . m e",
247
- " o n",
248
- " v d",
249
- " e .",
250
- " ,"
251
- ]
252
230
  }
253
231
  ]
254
232
  }
@@ -19,6 +19,16 @@
19
19
  "link_url": null,
20
20
  "name": null,
21
21
  "show_on_website": false
22
+ },
23
+ {
24
+ "alumnus": false,
25
+ "avatar_url": null,
26
+ "bio": "I am a software developer and consultant working for Black Pepper Software, a software company based in Leamington Spa, England. I'm a recent Computer Science graduate from the University of Warwick, and love all things to do with computers!",
27
+ "github_username": "sjwarner-bp",
28
+ "link_text": null,
29
+ "link_url": null,
30
+ "name": "Sam Warner",
31
+ "show_on_website": true
22
32
  }
23
33
  ]
24
- }
34
+ }
@@ -12,10 +12,10 @@
12
12
  {
13
13
  "core": false,
14
14
  "difficulty": 1,
15
- "slug": "two-fer",
15
+ "slug": "reverse-string",
16
16
  "topics": null,
17
17
  "unlocked_by": null,
18
- "uuid": "91a1f32c-0dac-4c65-8a13-49da90d21520"
18
+ "uuid": "a8957cc5-d99e-4a31-9d49-4653226fd50b"
19
19
  },
20
20
  {
21
21
  "core": false,
@@ -65,6 +65,14 @@
65
65
  "unlocked_by": null,
66
66
  "uuid": "04ac2bd0-504c-4faa-912e-d2111b46123c"
67
67
  },
68
+ {
69
+ "core": false,
70
+ "difficulty": 1,
71
+ "slug": "say",
72
+ "topics": null,
73
+ "unlocked_by": null,
74
+ "uuid": "31aa2618-b971-44ff-9799-761fdec53b87"
75
+ },
68
76
  {
69
77
  "core": false,
70
78
  "difficulty": 1,
@@ -0,0 +1,14 @@
1
+ # Reverse String
2
+
3
+ Reverse a string
4
+
5
+ For example:
6
+ input: "cool"
7
+ output: "looc"
8
+
9
+ ## Source
10
+
11
+ Introductory challenge to reverse an input string. [https://medium.freecodecamp.org/how-to-reverse-a-string-in-javascript-in-3-different-ways-75e4763c68cb](https://medium.freecodecamp.org/how-to-reverse-a-string-in-javascript-in-3-different-ways-75e4763c68cb)
12
+
13
+ ## Submitting Incomplete Solutions
14
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,4 @@
1
+ (defproject reverse-string "0.1.0-SNAPSHOT"
2
+ :description "reverse-string exercise."
3
+ :url "https://github.com/exercism/clojure/tree/master/exercises/reverse-string"
4
+ :dependencies [[org.clojure/clojure "1.8.0"]])
@@ -0,0 +1,5 @@
1
+ (ns reverse-string
2
+ (:require [clojure.string :as s]))
3
+
4
+ (defn reverse-string
5
+ ([word] (s/reverse word)))
@@ -0,0 +1,5 @@
1
+ (ns reverse-string)
2
+
3
+ (defn reverse-string [] ;; <- arglist goes here
4
+ ;; your code goes here
5
+ )
@@ -0,0 +1,18 @@
1
+ (ns reverse-string-test
2
+ (:require [clojure.test :refer [deftest is]]
3
+ reverse-string))
4
+
5
+ (deftest empty-string-test
6
+ (is (= "" (reverse-string/reverse-string ""))))
7
+
8
+ (deftest a-word-test
9
+ (is (= "tobor" (reverse-string/reverse-string "robot"))))
10
+
11
+ (deftest capitalised-word-test
12
+ (is (= "nemaR" (reverse-string/reverse-string "Ramen"))))
13
+
14
+ (deftest sentence-with-punctuation-test
15
+ (is (= "!yrgnuh m'I" (reverse-string/reverse-string "I'm hungry!"))))
16
+
17
+ (deftest palindrome-test
18
+ (is (= "racecar" (reverse-string/reverse-string "racecar"))))
@@ -0,0 +1,70 @@
1
+ # Say
2
+
3
+ Given a number from 0 to 999,999,999,999, spell out that number in English.
4
+
5
+ ## Step 1
6
+
7
+ Handle the basic case of 0 through 99.
8
+
9
+ If the input to the program is `22`, then the output should be
10
+ `'twenty-two'`.
11
+
12
+ Your program should complain loudly if given a number outside the
13
+ blessed range.
14
+
15
+ Some good test cases for this program are:
16
+
17
+ - 0
18
+ - 14
19
+ - 50
20
+ - 98
21
+ - -1
22
+ - 100
23
+
24
+ ### Extension
25
+
26
+ If you're on a Mac, shell out to Mac OS X's `say` program to talk out
27
+ loud.
28
+
29
+ ## Step 2
30
+
31
+ Implement breaking a number up into chunks of thousands.
32
+
33
+ So `1234567890` should yield a list like 1, 234, 567, and 890, while the
34
+ far simpler `1000` should yield just 1 and 0.
35
+
36
+ The program must also report any values that are out of range.
37
+
38
+ ## Step 3
39
+
40
+ Now handle inserting the appropriate scale word between those chunks.
41
+
42
+ So `1234567890` should yield `'1 billion 234 million 567 thousand 890'`
43
+
44
+ The program must also report any values that are out of range. It's
45
+ fine to stop at "trillion".
46
+
47
+ ## Step 4
48
+
49
+ Put it all together to get nothing but plain English.
50
+
51
+ `12345` should give `twelve thousand three hundred forty-five`.
52
+
53
+ The program must also report any values that are out of range.
54
+
55
+ ### Extensions
56
+
57
+ Use _and_ (correctly) when spelling out the number in English:
58
+
59
+ - 14 becomes "fourteen".
60
+ - 100 becomes "one hundred".
61
+ - 120 becomes "one hundred and twenty".
62
+ - 1002 becomes "one thousand and two".
63
+ - 1323 becomes "one thousand three hundred and twenty-three".
64
+
65
+ ## Source
66
+
67
+ This is an exercise to introduce users to using Exercism [http://en.wikipedia.org/wiki/%22Hello,_world!%22_program](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program)
68
+
69
+ ## Submitting Incomplete Solutions
70
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.