trackler 2.2.1.89 → 2.2.1.90

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 54dcd4e9322bb9c0319c133fdbd385c681223090
4
- data.tar.gz: 70685e822782caa9d0154d29d929809c87468a2c
3
+ metadata.gz: 864f7f9fd0030d0ceacb92fe02ebc4cb64963a2f
4
+ data.tar.gz: 657a52e0507d4eb1c880cbd0db58e53ccf168a51
5
5
  SHA512:
6
- metadata.gz: 85c27aebbbfa56706709ada5850ab5b85afb1d2a7d51fdd9ed7fbc94b3c976f125e9b2c13082719c95b4b4bef6d151964460dba1350e4d0eac166cf5135152c4
7
- data.tar.gz: 449d36d2f05e4271075a1cab1cd17d1b407ce7b817bfc67548862f17a3f4240b337be81a6c437337cfe4f1c1c77c222b035cd0133fa82a2570d3ef3e02d66a24
6
+ metadata.gz: 4a6152d2213d3450066bbcc8f92861a023d53fdccfd0080ef04118db4844fc251e6057fdc3ebb8dd2022c8b1422bb70ef1556a66d1e8b5ed56f0fe453b5a6bf2
7
+ data.tar.gz: 454d3f097d1f99585b11e8ec4a75a9df31e9f9f59a3dfb699f1bed45c995486adb320240e67e4c5ccd7e6f9b024b08970b6136572c3f3579ddca347aa83b2ba8
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.89"
2
+ VERSION = "2.2.1.90"
3
3
  end
@@ -1,13 +1,16 @@
1
1
  {
2
2
  "exercise": "book-store",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "cases": [
5
5
  {
6
6
  "description": "Return the total basket price after applying the best discount.",
7
7
  "comments": [
8
8
  "Calculate lowest price for a shopping basket containing books only from ",
9
9
  "a single series. There is no discount advantage for having more than ",
10
- "one copy of any single book in a grouping."
10
+ "one copy of any single book in a grouping.",
11
+ "implementors should use proper fixed-point or currency data types of the ",
12
+ "corresponding language and not float.",
13
+ "All 'expected' amounts are in cents."
11
14
  ],
12
15
  "cases": [
13
16
  {
@@ -17,7 +20,7 @@
17
20
  "input": {
18
21
  "basket": [1]
19
22
  },
20
- "expected": 8.00
23
+ "expected": 800
21
24
  },
22
25
  {
23
26
  "property": "total",
@@ -26,7 +29,7 @@
26
29
  "input": {
27
30
  "basket": [2,2]
28
31
  },
29
- "expected": 16.00
32
+ "expected": 1600
30
33
  },
31
34
  {
32
35
  "property": "total",
@@ -35,7 +38,7 @@
35
38
  "input": {
36
39
  "basket": []
37
40
  },
38
- "expected": 0.00
41
+ "expected": 0
39
42
  },
40
43
  {
41
44
  "property": "total",
@@ -44,7 +47,7 @@
44
47
  "input": {
45
48
  "basket": [1,2]
46
49
  },
47
- "expected": 15.20
50
+ "expected": 1520
48
51
  },
49
52
  {
50
53
  "property": "total",
@@ -53,7 +56,7 @@
53
56
  "input": {
54
57
  "basket": [1,2,3]
55
58
  },
56
- "expected": 21.60
59
+ "expected": 2160
57
60
  },
58
61
  {
59
62
  "property": "total",
@@ -62,7 +65,7 @@
62
65
  "input": {
63
66
  "basket": [1,2,3,4]
64
67
  },
65
- "expected": 25.60
68
+ "expected": 2560
66
69
  },
67
70
  {
68
71
  "property": "total",
@@ -71,7 +74,7 @@
71
74
  "input": {
72
75
  "basket": [1,2,3,4,5]
73
76
  },
74
- "expected": 30.00
77
+ "expected": 3000
75
78
  },
76
79
  {
77
80
  "property": "total",
@@ -80,7 +83,7 @@
80
83
  "input": {
81
84
  "basket": [1,1,2,2,3,3,4,5]
82
85
  },
83
- "expected": 51.20
86
+ "expected": 5120
84
87
  },
85
88
  {
86
89
  "property": "total",
@@ -89,7 +92,7 @@
89
92
  "input": {
90
93
  "basket": [1,1,2,2,3,4]
91
94
  },
92
- "expected": 40.80
95
+ "expected": 4080
93
96
  },
94
97
  {
95
98
  "property": "total",
@@ -98,7 +101,7 @@
98
101
  "input": {
99
102
  "basket": [1,1,2,2,3,3,4,4,5]
100
103
  },
101
- "expected": 55.60
104
+ "expected": 5560
102
105
  },
103
106
  {
104
107
  "property": "total",
@@ -107,7 +110,7 @@
107
110
  "input": {
108
111
  "basket": [1,1,2,2,3,3,4,4,5,5]
109
112
  },
110
- "expected": 60.00
113
+ "expected": 6000
111
114
  },
112
115
  {
113
116
  "property": "total",
@@ -116,7 +119,7 @@
116
119
  "input": {
117
120
  "basket": [1,1,2,2,3,3,4,4,5,5,1]
118
121
  },
119
- "expected": 68.00
122
+ "expected": 6800
120
123
  },
121
124
  {
122
125
  "property": "total",
@@ -125,7 +128,7 @@
125
128
  "input": {
126
129
  "basket": [1,1,2,2,3,3,4,4,5,5,1,2]
127
130
  },
128
- "expected": 75.20
131
+ "expected": 7520
129
132
  },
130
133
  {
131
134
  "property": "total",
@@ -134,9 +137,9 @@
134
137
  "input": {
135
138
  "basket": [1,1,2,2,3,3,4,5,1,1,2,2,3,3,4,5]
136
139
  },
137
- "expected": 102.4
140
+ "expected": 10240
138
141
  }
139
142
  ]
140
143
  }
141
144
  ]
142
- }
145
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "exercise": "phone-number",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "cases": [
5
5
  {
6
6
  "description": "Cleanup user-entered phone numbers",
@@ -71,16 +71,28 @@
71
71
  "expected": null
72
72
  },
73
73
  {
74
- "description": "invalid if area code does not start with 2-9",
74
+ "description": "invalid if area code starts with 0",
75
+ "property": "clean",
76
+ "phrase": "(023) 456-7890",
77
+ "expected": null
78
+ },
79
+ {
80
+ "description": "invalid if area code starts with 1",
75
81
  "property": "clean",
76
82
  "phrase": "(123) 456-7890",
77
83
  "expected": null
78
84
  },
79
85
  {
80
- "description": "invalid if exchange code does not start with 2-9",
86
+ "description": "invalid if exchange code starts with 0",
81
87
  "property": "clean",
82
88
  "phrase": "(223) 056-7890",
83
89
  "expected": null
90
+ },
91
+ {
92
+ "description": "invalid if exchange code starts with 1",
93
+ "property": "clean",
94
+ "phrase": "(223) 156-7890",
95
+ "expected": null
84
96
  }
85
97
  ]
86
98
  }
@@ -4,6 +4,10 @@ This guide describes the style intended for use with the C track exercise exampl
4
4
 
5
5
  The rules within this guide are in addition to, or to call out, those in the [Linux kernel coding style guide](https://www.kernel.org/doc/html/latest/process/coding-style.html).
6
6
 
7
+ ## C Standard
8
+
9
+ Code should conform to the C99 standard, more formally known as ISO/IEC 9899:1999. POSIX, or otherwise non-standard library functions, types or other references that are external to the implementation should not be used.
10
+
7
11
  ## Names
8
12
 
9
13
  In general, the names of types, variables, structures and files should use snake case with all letters in lower case and underscores `_` are used to separate name components.
@@ -39,6 +43,12 @@ Upper-case snake case for macro names is appreciated, but macros resembling func
39
43
 
40
44
  ### Types
41
45
 
46
+ The standard fixed-width types (in `stdint.h`) are preferred over basic integer types.
47
+
48
+ The type `bool` (from `stdbool.h`) is preferred over `_Bool`.
49
+
50
+ Likewise, `size_t` and `ptrdiff_t` (of `stddef.h`) are preferred for representing memory-related quantities.
51
+
42
52
  Types defined by a program using `typedef` should be named with a `_t` suffix.
43
53
  While aware that POSIX reserves the `_t` suffix, the track does not currently utilise POSIX.
44
54
 
@@ -49,6 +59,10 @@ The names used should match in all instances.
49
59
  That is to say that while the following function prototype is valid C, the style is incorrect because the parameter is unnamed: `void foo(int);`.
50
60
  The correct prototype, providing that all other declarations and the definition also use the parameter name `bar`, would be `void foo(int bar);`.
51
61
 
62
+ Where it is simpler or more appropriate to do so, parameters that require passing arguments by value rather than by pointer are preferred. Note especially that this includes `struct` type parameters.
63
+
64
+ In the case that a student is not expected to change the values of a pointer-type parameter within their implementation, that parameter should be `const` qualified.
65
+
52
66
  ## Indentation and Format
53
67
 
54
68
  The repository uses the `indent` tool, as outlined in the [contributing guide](https://github.com/exercism/c/blob/master/docs/CONTRIBUTING.md).
@@ -5,7 +5,7 @@ interface
5
5
  type
6
6
  IBasket = interface(IInvokable)
7
7
  ['{22B4BAF3-88E6-456D-9DE5-F6BAC743A655}']
8
- function Total:extended;
8
+ function Total:integer;
9
9
  end;
10
10
 
11
11
  function NewBasket(aBasket: TArray<Integer>): IBasket;
@@ -25,7 +25,7 @@ const
25
25
  type
26
26
  TBasket = class(TInterfacedObject, IBasket)
27
27
  private
28
- fSingleBookPrice: extended;
28
+ fSingleBookPrice: integer;
29
29
  fBasket: string;
30
30
  fIntList: TList<integer>;
31
31
  class function Head(inStr: string): string; static;
@@ -35,7 +35,7 @@ type
35
35
  function GroupBasket:TArray<String>;
36
36
  function NumberOfDifferentBooks(inStr : string):integer;
37
37
  public
38
- function Total:extended;
38
+ function Total:integer;
39
39
  constructor Create(aBasket: TArray<Integer>);
40
40
  end;
41
41
 
@@ -65,7 +65,7 @@ end;
65
65
 
66
66
  constructor TBasket.Create(aBasket: TArray<Integer>);
67
67
  begin
68
- fSingleBookPrice := 8;
68
+ fSingleBookPrice := 800;
69
69
  fIntList := TList<integer>.Create;
70
70
  fIntList.AddRange(aBasket);
71
71
  fIntList.Sort;
@@ -111,28 +111,28 @@ begin
111
111
  result := lStrArray;
112
112
  end;
113
113
 
114
- function TBasket.Total:extended;
114
+ function TBasket.Total:integer;
115
115
  var
116
116
  subBaskets : TArray<String>;
117
- subResult : array[0..1] of extended;
117
+ subResult : array[0..1] of integer;
118
118
  lSortedBasket : TArray<integer>;
119
119
 
120
- function computeTotal: extended;
120
+ function computeTotal: integer;
121
121
  var wrkSubBasket: string;
122
122
  totalBooks : integer;
123
- subTotal : extended;
123
+ subTotal : integer;
124
124
  begin
125
125
  result := 0;
126
126
  for wrkSubBasket in subBaskets do
127
127
  begin
128
128
  totalBooks := wrkSubBasket.Length;
129
- subTotal := totalBooks * (fSingleBookPrice * DiscountPercentage(wrkSubBasket));
129
+ subTotal := totalBooks * round(fSingleBookPrice * DiscountPercentage(wrkSubBasket));
130
130
  Result := Result + subTotal;
131
131
  end;
132
132
  end;
133
133
 
134
134
  begin
135
- fillchar(subResult, sizeof(extended), #0);
135
+ fillchar(subResult, sizeof(integer), #0);
136
136
 
137
137
  subBaskets := GroupBasket;
138
138
  subResult[0] := computeTotal;
@@ -5,7 +5,7 @@ uses
5
5
  DUnitX.TestFramework;
6
6
 
7
7
  const
8
- CanonicalVersion = '1.1.0';
8
+ CanonicalVersion = '1.3.0';
9
9
 
10
10
  type
11
11
  [TestFixture]
@@ -67,80 +67,78 @@ type
67
67
  implementation
68
68
  uses System.SysUtils, uBookStore;
69
69
 
70
- const MinDelta = 0.005; //cents
71
-
72
70
  procedure hpTests.A_basket_containing_only_a_single_book;
73
71
  var Basket: TArray<integer>;
74
72
  fBasket: IBasket;
75
- Expected: double;
73
+ Expected: integer;
76
74
  begin
77
75
  SetLength(Basket, 1);
78
76
  Basket[0] := 1;
79
- Expected := 8.0;
77
+ Expected := 800;
80
78
 
81
79
  fBasket := NewBasket(Basket);
82
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
80
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
83
81
  end;
84
82
 
85
83
  procedure hpTests.A_basket_containing_only_two_of_the_same_book;
86
84
  var Basket: TArray<integer>;
87
85
  fBasket: IBasket;
88
- Expected: double;
86
+ Expected: integer;
89
87
  begin
90
88
  SetLength(Basket, 2);
91
89
  Basket[0] := 2;
92
90
  Basket[1] := 2;
93
- Expected := 16.0;
91
+ Expected := 1600;
94
92
 
95
93
  fBasket := NewBasket(Basket);
96
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
94
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
97
95
  end;
98
96
 
99
97
  procedure hpTests.No_charge_to_carry_around_an_empty_basket;
100
98
  var Basket: TArray<integer>;
101
99
  fBasket: IBasket;
102
- Expected: double;
100
+ Expected: integer;
103
101
  begin
104
102
  SetLength(Basket, 0);
105
- Expected := 0.0;
103
+ Expected := 0;
106
104
 
107
105
  fBasket := NewBasket(Basket);
108
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
106
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
109
107
  end;
110
108
 
111
109
  procedure hpTests.A_basket_containing_only_two_different_books;
112
110
  var Basket: TArray<integer>;
113
111
  fBasket: IBasket;
114
- Expected: double;
112
+ Expected: integer;
115
113
  begin
116
114
  SetLength(Basket, 2);
117
115
  Basket[0] := 1;
118
116
  Basket[1] := 2;
119
- Expected := 15.2;
117
+ Expected := 1520;
120
118
 
121
119
  fBasket := NewBasket(Basket);
122
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
120
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
123
121
  end;
124
122
 
125
123
  procedure hpTests.A_basket_with_three_different_books;
126
124
  var Basket: TArray<integer>;
127
125
  fBasket: IBasket;
128
- Expected: double;
126
+ Expected: integer;
129
127
  begin
130
128
  SetLength(Basket, 3);
131
129
  Basket[0] := 1;
132
130
  Basket[1] := 2;
133
131
  Basket[2] := 3;
134
- Expected := 21.6;
132
+ Expected := 2160;
135
133
 
136
134
  fBasket := NewBasket(Basket);
137
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
135
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
138
136
  end;
139
137
 
140
138
  procedure hpTests.Four_groups_of_four_are_cheaper_than_two_groups_each_of_five_and_three;
141
139
  var Basket: TArray<integer>;
142
140
  fBasket: IBasket;
143
- Expected: double;
141
+ Expected: integer;
144
142
  begin
145
143
  SetLength(Basket, 16);
146
144
  Basket[0] := 1;
@@ -159,32 +157,32 @@ begin
159
157
  Basket[13] := 3;
160
158
  Basket[14] := 4;
161
159
  Basket[15] := 5;
162
- Expected := 102.40;
160
+ Expected := 10240;
163
161
 
164
162
  fBasket := NewBasket(Basket);
165
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
163
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
166
164
  end;
167
165
 
168
166
  procedure hpTests.A_basket_with_four_different_books;
169
167
  var Basket: TArray<integer>;
170
168
  fBasket: IBasket;
171
- Expected: double;
169
+ Expected: integer;
172
170
  begin
173
171
  SetLength(Basket, 4);
174
172
  Basket[0] := 1;
175
173
  Basket[1] := 2;
176
174
  Basket[2] := 3;
177
175
  Basket[3] := 4;
178
- Expected := 25.6;
176
+ Expected := 2560;
179
177
 
180
178
  fBasket := NewBasket(Basket);
181
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
179
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
182
180
  end;
183
181
 
184
182
  procedure hpTests.A_basket_with_five_different_books;
185
183
  var Basket: TArray<integer>;
186
184
  fBasket: IBasket;
187
- Expected: double;
185
+ Expected: integer;
188
186
  begin
189
187
  SetLength(Basket, 5);
190
188
  Basket[0] := 1;
@@ -192,16 +190,16 @@ begin
192
190
  Basket[2] := 3;
193
191
  Basket[3] := 4;
194
192
  Basket[4] := 5;
195
- Expected := 30.0;
193
+ Expected := 3000;
196
194
 
197
195
  fBasket := NewBasket(Basket);
198
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
196
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
199
197
  end;
200
198
 
201
199
  procedure hpTests.A_basket_containing_eight_books_consisting_of_a_pair_each_of_the_first_three_books_plus_one_copy_each_of_the_last_two_books;
202
200
  var Basket: TArray<integer>;
203
201
  fBasket: IBasket;
204
- Expected: double;
202
+ Expected: integer;
205
203
  begin
206
204
  SetLength(Basket, 8);
207
205
  Basket[0] := 1;
@@ -212,16 +210,16 @@ begin
212
210
  Basket[5] := 3;
213
211
  Basket[6] := 4;
214
212
  Basket[7] := 5;
215
- Expected := 51.20;
213
+ Expected := 5120;
216
214
 
217
215
  fBasket := NewBasket(Basket);
218
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
216
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
219
217
  end;
220
218
 
221
219
  procedure hpTests.A_basket_containing_nine_books_consisting_of_a_pair_each_of_the_first_four_books_plus_one_of_the_last_book;
222
220
  var Basket: TArray<integer>;
223
221
  fBasket: IBasket;
224
- Expected: double;
222
+ Expected: integer;
225
223
  begin
226
224
  SetLength(Basket, 9);
227
225
  Basket[0] := 1;
@@ -233,16 +231,16 @@ begin
233
231
  Basket[6] := 4;
234
232
  Basket[7] := 4;
235
233
  Basket[8] := 5;
236
- Expected := 55.60;
234
+ Expected := 5560;
237
235
 
238
236
  fBasket := NewBasket(Basket);
239
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
237
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
240
238
  end;
241
239
 
242
240
  procedure hpTests.A_basket_containing_ten_books_consisting_of_two_copies_of_each_book_in_the_series;
243
241
  var Basket: TArray<integer>;
244
242
  fBasket: IBasket;
245
- Expected: double;
243
+ Expected: integer;
246
244
  begin
247
245
  SetLength(Basket, 10);
248
246
  Basket[0] := 1;
@@ -255,16 +253,16 @@ begin
255
253
  Basket[7] := 4;
256
254
  Basket[8] := 5;
257
255
  Basket[9] := 5;
258
- Expected := 60.00;
256
+ Expected := 6000;
259
257
 
260
258
  fBasket := NewBasket(Basket);
261
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
259
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
262
260
  end;
263
261
 
264
262
  procedure hpTests.A_basket_containing_eleven_books_consisting_of_three_copies_of_the_first_book_plus_two_each_of_the_remaing_four_bookes_in_the_series;
265
263
  var Basket: TArray<integer>;
266
264
  fBasket: IBasket;
267
- Expected: double;
265
+ Expected: integer;
268
266
  begin
269
267
  SetLength(Basket, 11);
270
268
  Basket[0] := 1;
@@ -278,16 +276,16 @@ begin
278
276
  Basket[8] := 5;
279
277
  Basket[9] := 5;
280
278
  Basket[10] := 1;
281
- Expected := 68.00;
279
+ Expected := 6800;
282
280
 
283
281
  fBasket := NewBasket(Basket);
284
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
282
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
285
283
  end;
286
284
 
287
285
  procedure hpTests.A_basket_containing_twelve_books_consisting_of_three_copies_of_the_first_two_books_plus_two_each_of_the_remaining_three_books_in_the_series;
288
286
  var Basket: TArray<integer>;
289
287
  fBasket: IBasket;
290
- Expected: double;
288
+ Expected: integer;
291
289
  begin
292
290
  SetLength(Basket, 12);
293
291
  Basket[0] := 1;
@@ -302,10 +300,10 @@ begin
302
300
  Basket[9] := 5;
303
301
  Basket[10] := 1;
304
302
  Basket[11] := 2;
305
- Expected := 75.20;
303
+ Expected := 7520;
306
304
 
307
305
  fBasket := NewBasket(Basket);
308
- assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
306
+ assert.AreEqual(Expected, fBasket.Total, format('Total should be %d cents',[Expected]));
309
307
  end;
310
308
 
311
309
  initialization
@@ -1,36 +1,19 @@
1
1
  module SimpleLinkedList
2
2
 
3
- type LinkedList<'a> =
4
- | Nil
5
- | Element of datum:'a * next:LinkedList<'a>
3
+ //TODO: define LinkedList type
6
4
 
7
- let nil = Nil
5
+ let nil = failwith "You need to implement this function."
8
6
 
9
- let create x n = Element (x, n)
7
+ let create x n = failwith "You need to implement this function."
10
8
 
11
- let isNil x =
12
- match x with
13
- | Nil -> true
14
- | _ -> false
9
+ let isNil x = failwith "You need to implement this function."
15
10
 
16
- let next x =
17
- match x with
18
- | Nil -> Nil
19
- | Element (_, n) -> n
11
+ let next x = failwith "You need to implement this function."
20
12
 
21
- let datum x =
22
- match x with
23
- | Nil -> failwith "The nil list has no datum."
24
- | Element (y, _) -> y
13
+ let datum x = failwith "You need to implement this function."
25
14
 
26
- let toList x =
27
- let rec loop acc item =
28
- match item with
29
- | Nil -> acc |> List.rev
30
- | Element (b, n) -> loop (b :: acc) n
15
+ let toList x = failwith "You need to implement this function."
31
16
 
32
- loop [] x
17
+ let fromList xs = failwith "You need to implement this function."
33
18
 
34
- let fromList xs = List.foldBack create xs Nil
35
-
36
- let reverse x = x |> toList |> List.rev |> fromList
19
+ let reverse x = failwith "You need to implement this function."
@@ -16,7 +16,7 @@ addons:
16
16
  - tree
17
17
 
18
18
  before_install:
19
- - rvm install 2.2.5
19
+ - travis_retry rvm install 2.2.5
20
20
  - rvm use 2.2.5
21
21
 
22
22
  # https://docs.travis-ci.com/user/customizing-the-build#Skipping-the-Installation-Step
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.2.0
@@ -0,0 +1 @@
1
+ 2.0.0
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.4.0
@@ -19,6 +19,12 @@ public class PangramCheckerTest {
19
19
  assertFalse(pangramChecker.isPangram(""));
20
20
  }
21
21
 
22
+ @Ignore("Remove to run test")
23
+ @Test
24
+ public void recognizesPerfectLowerCasePangram() {
25
+ assertTrue(pangramChecker.isPangram("abcdefghijklmnopqrstuvwxyz"));
26
+ }
27
+
22
28
  @Ignore("Remove to run test")
23
29
  @Test
24
30
  public void pangramWithOnlyLowerCaseLettersIsRecognizedAsPangram() {
@@ -33,8 +39,8 @@ public class PangramCheckerTest {
33
39
 
34
40
  @Ignore("Remove to run test")
35
41
  @Test
36
- public void anotherPhraseMissingCharacterXIsNotPangram() {
37
- assertFalse(pangramChecker.isPangram("the quick brown fish jumps over the lazy dog"));
42
+ public void phraseMissingAnotherCharacterIsNotPangram() {
43
+ assertFalse(pangramChecker.isPangram("five boxing wizards jump quickly at it"));
38
44
  }
39
45
 
40
46
  @Ignore("Remove to run test")
@@ -0,0 +1,58 @@
1
+ Since this exercise has difficulty 5 it doesn't come with any starter implementation.
2
+ This is so that you get to practice creating classes and methods which is an important part of programming in Java.
3
+ It does mean that when you first try to run the tests, they won't compile.
4
+ They will give you an error similar to:
5
+ ```
6
+ path-to-exercism-dir\exercism\java\name-of-exercise\src\test\java\ExerciseClassNameTest.java:14: error: cannot find symbol
7
+ ExerciseClassName exerciseClassName = new ExerciseClassName();
8
+ ^
9
+ symbol: class ExerciseClassName
10
+ location: class ExerciseClassNameTest
11
+ ```
12
+ This error occurs because the test refers to a class that hasn't been created yet (`ExerciseClassName`).
13
+ To resolve the error you need to add a file matching the class name in the error to the `src/main/java` directory.
14
+ For example, for the error above you would add a file called `ExerciseClassName.java`.
15
+
16
+ When you try to run the tests again you will get slightly different errors.
17
+ You might get an error similar to:
18
+ ```
19
+ constructor ExerciseClassName in class ExerciseClassName cannot be applied to given types;
20
+ ExerciseClassName exerciseClassName = new ExerciseClassName("some argument");
21
+ ^
22
+ required: no arguments
23
+ found: String
24
+ reason: actual and formal argument lists differ in length
25
+ ```
26
+ This error means that you need to add a [constructor](https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html) to your new class.
27
+ If you don't add a constructor, Java will add a default one for you.
28
+ This default constructor takes no arguments.
29
+ So if the tests expect your class to have a constructor which takes arguments, then you need to create this constructor yourself.
30
+ In the example above you could add:
31
+ ```
32
+ ExerciseClassName(String input) {
33
+
34
+ }
35
+ ```
36
+ That should make the error go away, though you might need to add some more code to your constructor to make the test pass!
37
+
38
+ You might also get an error similar to:
39
+ ```
40
+ error: cannot find symbol
41
+ assertEquals(expectedOutput, exerciseClassName.someMethod());
42
+ ^
43
+ symbol: method someMethod()
44
+ location: variable exerciseClassName of type ExerciseClassName
45
+ ```
46
+ This error means that you need to add a method called `someMethod` to your new class.
47
+ In the example above you would add:
48
+ ```
49
+ String someMethod() {
50
+ return "";
51
+ }
52
+ ```
53
+ Make sure the return type matches what the test is expecting.
54
+ You can find out which return type it should have by looking at the type of object it's being compared to in the tests.
55
+ Or you could set your method to return some random type (e.g. `void`), and run the tests again.
56
+ The new error should tell you which type it's expecting.
57
+
58
+ After having resolved these errors you should be ready to start making the tests pass!
@@ -11,6 +11,68 @@ come: 1
11
11
  free: 1
12
12
  ```
13
13
 
14
+ # Java Tips
15
+
16
+ Since this exercise has difficulty 5 it doesn't come with any starter implementation.
17
+ This is so that you get to practice creating classes and methods which is an important part of programming in Java.
18
+ It does mean that when you first try to run the tests, they won't compile.
19
+ They will give you an error similar to:
20
+ ```
21
+ path-to-exercism-dir\exercism\java\name-of-exercise\src\test\java\ExerciseClassNameTest.java:14: error: cannot find symbol
22
+ ExerciseClassName exerciseClassName = new ExerciseClassName();
23
+ ^
24
+ symbol: class ExerciseClassName
25
+ location: class ExerciseClassNameTest
26
+ ```
27
+ This error occurs because the test refers to a class that hasn't been created yet (`ExerciseClassName`).
28
+ To resolve the error you need to add a file matching the class name in the error to the `src/main/java` directory.
29
+ For example, for the error above you would add a file called `ExerciseClassName.java`.
30
+
31
+ When you try to run the tests again you will get slightly different errors.
32
+ You might get an error similar to:
33
+ ```
34
+ constructor ExerciseClassName in class ExerciseClassName cannot be applied to given types;
35
+ ExerciseClassName exerciseClassName = new ExerciseClassName("some argument");
36
+ ^
37
+ required: no arguments
38
+ found: String
39
+ reason: actual and formal argument lists differ in length
40
+ ```
41
+ This error means that you need to add a [constructor](https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html) to your new class.
42
+ If you don't add a constructor, Java will add a default one for you.
43
+ This default constructor takes no arguments.
44
+ So if the tests expect your class to have a constructor which takes arguments, then you need to create this constructor yourself.
45
+ In the example above you could add:
46
+ ```
47
+ ExerciseClassName(String input) {
48
+
49
+ }
50
+ ```
51
+ That should make the error go away, though you might need to add some more code to your constructor to make the test pass!
52
+
53
+ You might also get an error similar to:
54
+ ```
55
+ error: cannot find symbol
56
+ assertEquals(expectedOutput, exerciseClassName.someMethod());
57
+ ^
58
+ symbol: method someMethod()
59
+ location: variable exerciseClassName of type ExerciseClassName
60
+ ```
61
+ This error means that you need to add a method called `someMethod` to your new class.
62
+ In the example above you would add:
63
+ ```
64
+ String someMethod() {
65
+ return "";
66
+ }
67
+ ```
68
+ Make sure the return type matches what the test is expecting.
69
+ You can find out which return type it should have by looking at the type of object it's being compared to in the tests.
70
+ Or you could set your method to return some random type (e.g. `void`), and run the tests again.
71
+ The new error should tell you which type it's expecting.
72
+
73
+ After having resolved these errors you should be ready to start making the tests pass!
74
+
75
+
14
76
  # Running the tests
15
77
 
16
78
  You can run all the tests for an exercise by entering
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.89
4
+ version: 2.2.1.90
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-11 00:00:00.000000000 Z
11
+ date: 2018-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -7469,6 +7469,7 @@ files:
7469
7469
  - tracks/java/exercises/hexadecimal/src/main/java/.keep
7470
7470
  - tracks/java/exercises/hexadecimal/src/test/java/HexadecimalTest.java
7471
7471
  - tracks/java/exercises/house/.meta/src/reference/java/House.java
7472
+ - tracks/java/exercises/house/.meta/version
7472
7473
  - tracks/java/exercises/house/README.md
7473
7474
  - tracks/java/exercises/house/build.gradle
7474
7475
  - tracks/java/exercises/house/src/main/java/.keep
@@ -7816,6 +7817,7 @@ files:
7816
7817
  - tracks/java/exercises/two-fer/build.gradle
7817
7818
  - tracks/java/exercises/two-fer/src/main/java/Twofer.java
7818
7819
  - tracks/java/exercises/two-fer/src/test/java/TwoferTest.java
7820
+ - tracks/java/exercises/word-count/.meta/hints.md
7819
7821
  - tracks/java/exercises/word-count/.meta/src/reference/java/WordCount.java
7820
7822
  - tracks/java/exercises/word-count/README.md
7821
7823
  - tracks/java/exercises/word-count/build.gradle