trackler 2.0.6.2 → 2.0.6.3

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: b4e158fdc06604fcbf8f1d27f05a396e4261aaf1
4
- data.tar.gz: 9f340d289a11e75954cff74b6443048991f45def
3
+ metadata.gz: cb456c079419313a6ce0e9bd9442ced587c8f3a9
4
+ data.tar.gz: b5cab80a086b12263490be5017b91406891ae13a
5
5
  SHA512:
6
- metadata.gz: 5f72f08277f2e36d640b7e99a9a527e11b48ff5160457a57590e7c48beed426b75b4191faf5286bf97880a39bf5fea9c49ad6716202c804617551b30c4d6190d
7
- data.tar.gz: 908336cbfd218c1e95f05f6a2c16c1f9e158a05b43bac7df5d1e1af15a196ec9341597fad8a61cbf0760f240082b350fedd0d04b06a90660fafe99ba1fd864a9
6
+ metadata.gz: c6b863818cbcc41b49d6f5c828c71d97d592a7eb41d7f12f0a19914ddb39a0b36b1cec01a859c03717ff512ea57d69f2141e329e05eca95cb023851f725a924f
7
+ data.tar.gz: aff5310dd0bf1b56b3a68d415b26d95215fe26cd63d4b7f5f0e0abf24140a9e6d241fbed08d6d1d87b1bb3fd41aec865c6412da7614cad0e83a456acd8f3845d
@@ -46,7 +46,7 @@
46
46
  "expected": { "first": 1, "don't": 2, "laugh": 1, "then": 1, "cry": 1 }
47
47
  },
48
48
  {
49
- "description": "with_quotations",
49
+ "description": "with quotations",
50
50
  "input": "Joe can't tell between 'large' and large.",
51
51
  "expected": { "joe": 1, "can't": 1, "tell": 1, "between": 1, "large": 2, "and": 1 }
52
52
  }
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.6.2"
2
+ VERSION = "2.0.6.3"
3
3
  end
@@ -53,7 +53,7 @@ var testCases = []struct {
53
53
  Frequency{"cry": 1, "don't": 2, "first": 1, "laugh": 1, "then": 1},
54
54
  },
55
55
  {
56
- "with_quotations",
56
+ "with quotations",
57
57
  "Joe can't tell between 'large' and large.",
58
58
  Frequency{"and": 1, "between": 1, "can't": 1, "joe": 1, "large": 2, "tell": 1},
59
59
  },
@@ -1,3 +1,4 @@
1
+ import org.junit.Ignore;
1
2
  import org.junit.Rule;
2
3
  import org.junit.Test;
3
4
  import org.junit.rules.ExpectedException;
@@ -31,6 +32,7 @@ public final class BaseConverterTest {
31
32
  actualDigits);
32
33
  }
33
34
 
35
+ @Ignore
34
36
  @Test
35
37
  public void testBinaryToSingleDecimal() {
36
38
  final BaseConverter baseConverter = new BaseConverter(2, new int[]{1, 0, 1});
@@ -47,6 +49,7 @@ public final class BaseConverterTest {
47
49
  actualDigits);
48
50
  }
49
51
 
52
+ @Ignore
50
53
  @Test
51
54
  public void testSingleDecimalToBinary() {
52
55
  final BaseConverter baseConverter = new BaseConverter(10, new int[]{5});
@@ -63,6 +66,7 @@ public final class BaseConverterTest {
63
66
  actualDigits);
64
67
  }
65
68
 
69
+ @Ignore
66
70
  @Test
67
71
  public void testBinaryToMultipleDecimal() {
68
72
  final BaseConverter baseConverter = new BaseConverter(2, new int[]{1, 0, 1, 0, 1, 0});
@@ -79,6 +83,7 @@ public final class BaseConverterTest {
79
83
  actualDigits);
80
84
  }
81
85
 
86
+ @Ignore
82
87
  @Test
83
88
  public void testDecimalToBinary() {
84
89
  final BaseConverter baseConverter = new BaseConverter(10, new int[]{4, 2});
@@ -95,6 +100,7 @@ public final class BaseConverterTest {
95
100
  actualDigits);
96
101
  }
97
102
 
103
+ @Ignore
98
104
  @Test
99
105
  public void testTrinaryToHexadecimal() {
100
106
  final BaseConverter baseConverter = new BaseConverter(3, new int[]{1, 1, 2, 0});
@@ -111,6 +117,7 @@ public final class BaseConverterTest {
111
117
  actualDigits);
112
118
  }
113
119
 
120
+ @Ignore
114
121
  @Test
115
122
  public void testHexadecimalToTrinary() {
116
123
  final BaseConverter baseConverter = new BaseConverter(16, new int[]{2, 10});
@@ -127,6 +134,7 @@ public final class BaseConverterTest {
127
134
  actualDigits);
128
135
  }
129
136
 
137
+ @Ignore
130
138
  @Test
131
139
  public void test15BitInteger() {
132
140
  final BaseConverter baseConverter = new BaseConverter(97, new int[]{3, 46, 60});
@@ -143,6 +151,7 @@ public final class BaseConverterTest {
143
151
  actualDigits);
144
152
  }
145
153
 
154
+ @Ignore
146
155
  @Test
147
156
  public void testEmptyDigits() {
148
157
  expectedException.expect(IllegalArgumentException.class);
@@ -151,6 +160,7 @@ public final class BaseConverterTest {
151
160
  new BaseConverter(2, new int[]{});
152
161
  }
153
162
 
163
+ @Ignore
154
164
  @Test
155
165
  public void testSingleZero() {
156
166
  final BaseConverter baseConverter = new BaseConverter(10, new int[]{0});
@@ -167,6 +177,7 @@ public final class BaseConverterTest {
167
177
  actualDigits);
168
178
  }
169
179
 
180
+ @Ignore
170
181
  @Test
171
182
  public void testMultipleZeros() {
172
183
  expectedException.expect(IllegalArgumentException.class);
@@ -175,6 +186,7 @@ public final class BaseConverterTest {
175
186
  new BaseConverter(10, new int[]{0, 0, 0});
176
187
  }
177
188
 
189
+ @Ignore
178
190
  @Test
179
191
  public void testLeadingZeros() {
180
192
  expectedException.expect(IllegalArgumentException.class);
@@ -183,6 +195,7 @@ public final class BaseConverterTest {
183
195
  new BaseConverter(7, new int[]{0, 6, 0});
184
196
  }
185
197
 
198
+ @Ignore
186
199
  @Test
187
200
  public void testNegativeDigit() {
188
201
  expectedException.expect(IllegalArgumentException.class);
@@ -191,6 +204,7 @@ public final class BaseConverterTest {
191
204
  new BaseConverter(2, new int[]{1, -1, 1, 0, 1, 0});
192
205
  }
193
206
 
207
+ @Ignore
194
208
  @Test
195
209
  public void testInvalidPositiveDigit() {
196
210
  expectedException.expect(IllegalArgumentException.class);
@@ -199,6 +213,7 @@ public final class BaseConverterTest {
199
213
  new BaseConverter(2, new int[]{1, 2, 1, 0, 1, 0});
200
214
  }
201
215
 
216
+ @Ignore
202
217
  @Test
203
218
  public void testFirstBaseIsOne() {
204
219
  expectedException.expect(IllegalArgumentException.class);
@@ -207,6 +222,7 @@ public final class BaseConverterTest {
207
222
  new BaseConverter(1, new int[]{});
208
223
  }
209
224
 
225
+ @Ignore
210
226
  @Test
211
227
  public void testSecondBaseIsOne() {
212
228
  final BaseConverter baseConverter = new BaseConverter(2, new int[]{1, 0, 1, 0, 1, 0});
@@ -217,6 +233,7 @@ public final class BaseConverterTest {
217
233
  baseConverter.convertToBase(1);
218
234
  }
219
235
 
236
+ @Ignore
220
237
  @Test
221
238
  public void testFirstBaseIsZero() {
222
239
  expectedException.expect(IllegalArgumentException.class);
@@ -225,6 +242,7 @@ public final class BaseConverterTest {
225
242
  new BaseConverter(0, new int[]{});
226
243
  }
227
244
 
245
+ @Ignore
228
246
  @Test
229
247
  public void testSecondBaseIsZero() {
230
248
  final BaseConverter baseConverter = new BaseConverter(2, new int[]{1, 0, 1, 0, 1, 0});
@@ -235,6 +253,7 @@ public final class BaseConverterTest {
235
253
  baseConverter.convertToBase(0);
236
254
  }
237
255
 
256
+ @Ignore
238
257
  @Test
239
258
  public void testFirstBaseIsNegative() {
240
259
  expectedException.expect(IllegalArgumentException.class);
@@ -243,6 +262,7 @@ public final class BaseConverterTest {
243
262
  new BaseConverter(-2, new int[]{});
244
263
  }
245
264
 
265
+ @Ignore
246
266
  @Test
247
267
  public void testSecondBaseIsNegative() {
248
268
  final BaseConverter baseConverter = new BaseConverter(2, new int[]{1});
@@ -15,7 +15,6 @@ public final class QueenAttackCalculatorTest {
15
15
  @Rule
16
16
  public ExpectedException expectedException = ExpectedException.none();
17
17
 
18
- @Ignore
19
18
  @Test
20
19
  public void testCoordinateWithNegativeRankNotAllowed() {
21
20
  expectedException.expect(IllegalArgumentException.class);
@@ -6,7 +6,7 @@ an exact match.
6
6
  The following steps assume that you are in the same directory as the exercise.
7
7
 
8
8
  You must have rust installed.
9
- Follow the [Installing Rust chapter in the Rust book](http://doc.rust-lang.org/stable/book/installing-rust.html).
9
+ Follow the [Getting Started chapter in the Rust book](https://doc.rust-lang.org/stable/book/getting-started.html).
10
10
  The [Rust language section](http://exercism.io/languages/rust)
11
11
  section from exercism is also useful.
12
12
 
@@ -113,6 +113,9 @@
113
113
  "slug": "gigasecond",
114
114
  "difficulty": 1,
115
115
  "topics": [
116
+ "Dates",
117
+ "Time",
118
+ "Function Overloading"
116
119
  ]
117
120
  },
118
121
  {
@@ -1,3 +1,2 @@
1
1
  ## Hints
2
- Note that `GregorianCalendar` is a mutable object.
3
- You should not change this mutable object to avoid any side effects!
2
+ Note that `addGigaseconds` accepts two different types of input.
@@ -1,3 +1,3 @@
1
- scalaVersion := "2.11.7"
1
+ scalaVersion := "2.12.1"
2
2
 
3
- libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.5" % "test"
3
+ libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
@@ -1,9 +1,17 @@
1
- import java.util.{Calendar, GregorianCalendar}
1
+ import java.time.LocalDate
2
+ import java.time.LocalDateTime
3
+ import java.time.LocalTime
2
4
 
3
- case class Gigasecond(initial: Calendar) {
4
- val date = {
5
- val copy = initial.clone.asInstanceOf[Calendar]
6
- copy.add(Calendar.SECOND, 1000000000)
7
- copy
5
+ object Gigasecond {
6
+ private type Seconds = Long
7
+
8
+ def addGigaseconds(startDate: LocalDate): LocalDateTime = {
9
+ val startDateTime = LocalDateTime.of(startDate, LocalTime.of(0, 0))
10
+ addGigaseconds(startDateTime)
8
11
  }
12
+
13
+ def addGigaseconds(startDateTime: LocalDateTime): LocalDateTime =
14
+ startDateTime.plusSeconds(OneGigasecond)
15
+
16
+ private val OneGigasecond: Seconds = math.pow(10, 9) toLong
9
17
  }
@@ -1,55 +1,57 @@
1
- import org.scalatest._
2
- import java.util.{TimeZone, GregorianCalendar}
1
+ import java.time.LocalDate
2
+ import java.time.LocalDateTime
3
+ import java.time.format.DateTimeFormatter
4
+
5
+ import org.scalatest.FunSuite
6
+ import org.scalatest.Matchers
3
7
 
4
8
  class GigasecondTests extends FunSuite with Matchers {
5
- test ("1") {
6
- // Note: Months are 0-indexed. 3 = April
7
- val cal = new GregorianCalendar(2011, 3, 25)
8
- cal.setTimeZone(TimeZone.getTimeZone("GMT"))
9
- val gs = Gigasecond(cal)
10
-
11
- val expected = new GregorianCalendar(2043, 0, 1, 1, 46, 40)
12
- expected.setTimeZone(TimeZone.getTimeZone("GMT"))
13
- gs.date should be (expected)
14
- }
15
9
 
16
- test ("2") {
17
- pending
18
- val cal = new GregorianCalendar(1977, 5, 13)
19
- cal.setTimeZone(TimeZone.getTimeZone("GMT"))
20
- val gs = Gigasecond(cal)
10
+ private def dateTime(str: String): LocalDateTime =
11
+ LocalDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse(str))
12
+
13
+ private def date(str: String): LocalDate =
14
+ LocalDate.from(DateTimeFormatter.ISO_DATE.parse(str))
15
+
21
16
 
22
- val expected = new GregorianCalendar(2009, 1, 19, 1, 46, 40)
23
- expected.setTimeZone(TimeZone.getTimeZone("GMT"))
24
- gs.date should be (expected)
17
+ test("modern time") {
18
+ val input = date("2011-04-25")
19
+ val expected = dateTime("2043-01-01T01:46:40")
20
+ Gigasecond.addGigaseconds(input) should be (expected)
25
21
  }
26
22
 
27
- test ("3") {
23
+ test("after epoch time") {
28
24
  pending
29
- val cal = new GregorianCalendar(1959, 6, 19)
30
- cal.setTimeZone(TimeZone.getTimeZone("GMT"))
31
- val gs = Gigasecond(cal)
25
+ val input = date("1977-06-13")
26
+ val expected = dateTime("2009-02-19T01:46:40")
27
+ Gigasecond.addGigaseconds(input) should be (expected)
28
+ }
32
29
 
33
- val expected = new GregorianCalendar(1991, 2, 27, 1, 46, 40)
34
- expected.setTimeZone(TimeZone.getTimeZone("GMT"))
35
- gs.date should be (expected)
30
+ test("before epoch time") {
31
+ pending
32
+ val input = date("1959-07-19")
33
+ val expected = dateTime("1991-03-27T01:46:40")
34
+ Gigasecond.addGigaseconds(input) should be (expected)
36
35
  }
37
36
 
38
- test ("4") {
37
+ test("full time specified") {
39
38
  pending
40
- val cal = new GregorianCalendar(2015, 0, 24, 23, 59, 59)
41
- cal.setTimeZone(TimeZone.getTimeZone("GMT"))
42
- val gs = Gigasecond(cal)
39
+ val input = dateTime("2015-01-24T22:00:00")
40
+ val expected = dateTime("2046-10-02T23:46:40")
41
+ Gigasecond.addGigaseconds(input) should be (expected)
42
+ }
43
43
 
44
- val expected = new GregorianCalendar(2046, 9, 3, 1, 46, 39)
45
- expected.setTimeZone(TimeZone.getTimeZone("GMT"))
46
- gs.date should be (expected)
44
+ test("full time with day roll-over") {
45
+ pending
46
+ val input = dateTime("2015-01-24T23:59:59")
47
+ val expected = dateTime("2046-10-03T01:46:39")
48
+ Gigasecond.addGigaseconds(input) should be (expected)
47
49
  }
48
50
 
49
- test ("yourself") {
51
+ test("your birthday") {
50
52
  pending
51
- // val yourBirthday = new GregorianCalendar(year, month-1, day)
52
- // val gs = Gigasecond(yourBirthday)
53
- // gs.date should be (new GregorianCalendar(2009, 0, 31, 0, 46, 40))
53
+ val yourBirthday = date(???)
54
+ val expected = dateTime(???)
55
+ Gigasecond.addGigaseconds(yourBirthday) should be (expected)
54
56
  }
55
57
  }
@@ -222,6 +222,16 @@
222
222
  "Lists"
223
223
  ]
224
224
  },
225
+ {
226
+ "difficulty": 3,
227
+ "slug": "flatten-array",
228
+ "topics": [
229
+ "Searching",
230
+ "Looping",
231
+ "Lists"
232
+ ]
233
+ },
234
+
225
235
  {
226
236
  "difficulty": 3,
227
237
  "slug": "sublist",
@@ -0,0 +1,34 @@
1
+ import Foundation
2
+
3
+ func flattenArray<T>(_ list: [Any?]) -> [T] {
4
+
5
+ var flattenedArray = [T]()
6
+
7
+ func extractArrayElements(array: [Any?]) {
8
+
9
+ for element in array.flatMap({$0}) {
10
+
11
+ let anyObjectArray = element as? [Any?]
12
+
13
+ if let unwrappedArray = anyObjectArray {
14
+
15
+ extractArrayElements(array: unwrappedArray)
16
+
17
+ }
18
+
19
+ let value = element as? T
20
+
21
+ if let i = value {
22
+
23
+ flattenedArray.append(i)
24
+ }
25
+
26
+ }
27
+
28
+ }
29
+
30
+ extractArrayElements(array: list)
31
+
32
+ return flattenedArray
33
+
34
+ }
@@ -0,0 +1,52 @@
1
+ import XCTest
2
+
3
+ class FlattenArrayTest: XCTestCase {
4
+
5
+ func testFlattenIntegerArray() {
6
+
7
+ let result: [Int] = flattenArray([1, [2, 3, 4, 5, 6, 7], 8])
8
+ XCTAssertEqual([1, 2, 3, 4, 5, 6, 7, 8], result)
9
+ }
10
+
11
+ func testFlattenForFiveLevelDeepNestedList() {
12
+
13
+ let result: [Int] = flattenArray([0, 2, [[2, 3], 8, 100, 4, [[[50]]]], -2])
14
+ XCTAssertEqual([0, 2, 2, 3, 8, 100, 4, 50, -2], result)
15
+ }
16
+
17
+ func testFlattenForSixLevelDeepNestedList() {
18
+
19
+ let result: [Int] = flattenArray([1, [2, [[3]], [4, [[5]]], 6, 7], 8])
20
+ XCTAssertEqual([1, 2, 3, 4, 5, 6, 7, 8], result)
21
+ }
22
+
23
+ func testFlattenForSixLevelDeepNestedListWithNullValues() {
24
+
25
+ let nilValue: Any? = nil
26
+ let result: [Int] = flattenArray([0, 2, [[2, 3], 8, [[100]], nilValue, [[nilValue]]], -2])
27
+ XCTAssertEqual([0, 2, 2, 3, 8, 100, -2], result)
28
+ }
29
+
30
+ func testFlattenForAllNullDeepNestedList() {
31
+
32
+ let nilValue: Any? = nil
33
+ let result: [Int] = flattenArray([nilValue, [[[nilValue]]], nilValue, nilValue, [[nilValue, nilValue], nilValue], nilValue])
34
+ XCTAssertEqual([], result)
35
+ }
36
+
37
+ func testFlattenForStringValuesInSixLevelDeepNestedList() {
38
+
39
+ let nilValue: Any? = nil
40
+ let result: [String] = flattenArray(["Zero", "two", [["Two", "three"], "Eight", [["ONE HUNDRED"]], nilValue, [[nilValue]]], "minus two"])
41
+ XCTAssertEqual(["Zero", "two", "Two", "three", "Eight", "ONE HUNDRED", "minus two"], result)
42
+
43
+ }
44
+
45
+ func testFlattenForDoubleValuesInFiveLevelDeepNestedList() {
46
+
47
+ let nilValue: Any? = nil
48
+ let result: [Double] = flattenArray([0.74896463547850123, 2.18, [[nilValue, 3.6], nilValue, 100.0, nilValue, [[[50.2]]]], -2.5])
49
+ XCTAssertEqual([0.74896463547850123, 2.1800000000000002, 3.6000000000000001, 100.0, 50.200000000000003, -2.5], result)
50
+
51
+ }
52
+ }
@@ -112,11 +112,14 @@
112
112
  1E9A63EE1C506EFD00E28AE1 /* WordyExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63861C506EFC00E28AE1 /* WordyExample.swift */; };
113
113
  1E9A63EF1C506EFD00E28AE1 /* WordyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63871C506EFC00E28AE1 /* WordyTest.swift */; };
114
114
  1EAF95E11C90C587009DDCB6 /* DominoesTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EAF95E01C90C587009DDCB6 /* DominoesTest.swift */; };
115
- A004DFC31DF8068A00800271 /* BeerSongExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = A004DFC11DF8068A00800271 /* BeerSongExample.swift */; };
115
+ A0405CB61E07FFE500B6C662 /* FlattenArrayExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0405CB51E07FFE500B6C662 /* FlattenArrayExample.swift */; };
116
+ A0405CB81E07FFF500B6C662 /* FlattenArrayTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0405CB71E07FFF500B6C662 /* FlattenArrayTest.swift */; };
117
+ A004DFC31DF8068A00800271 /* BeerSongExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = A004DFC11DF8068A00800271 /* BeerSongExample.swift */; };
116
118
  A004DFC41DF8068A00800271 /* BeerSongTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A004DFC21DF8068A00800271 /* BeerSongTest.swift */; };
117
119
  A0DBCBF81E0000B800E0DFBF /* helloWorldTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0DBCBF71E0000B800E0DFBF /* helloWorldTest.swift */; };
118
120
  A0DBCBFB1E00017E00E0DFBF /* SublistExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0DBCBF91E00017E00E0DFBF /* SublistExample.swift */; };
119
121
  A0DBCBFC1E00017E00E0DFBF /* SubListTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0DBCBFA1E00017E00E0DFBF /* SubListTest.swift */; };
122
+
120
123
  E908CD461C6AD05F005D081E /* FoodChainExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = E908CD451C6AD05F005D081E /* FoodChainExample.swift */; };
121
124
  E908CD481C6AD076005D081E /* FoodChainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E908CD471C6AD076005D081E /* FoodChainTest.swift */; };
122
125
  E908CD541C6D7AD1005D081E /* PascalsTriangleExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = E908CD531C6D7AD1005D081E /* PascalsTriangleExample.swift */; };
@@ -265,11 +268,15 @@
265
268
  1EAF95E01C90C587009DDCB6 /* DominoesTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = DominoesTest.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
266
269
  9D3155D21BA12FB1009A3991 /* xSwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = xSwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
267
270
  9D3155D51BA12FB1009A3991 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
268
- A004DFC11DF8068A00800271 /* BeerSongExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BeerSongExample.swift; path = "beer-song/BeerSongExample.swift"; sourceTree = "<group>"; };
271
+
272
+ A0405CB51E07FFE500B6C662 /* FlattenArrayExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FlattenArrayExample.swift; path = "flatten-array/FlattenArrayExample.swift"; sourceTree = "<group>"; };
273
+ A0405CB71E07FFF500B6C662 /* FlattenArrayTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FlattenArrayTest.swift; path = "flatten-array/FlattenArrayTest.swift"; sourceTree = "<group>"; };
274
+ A004DFC11DF8068A00800271 /* BeerSongExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BeerSongExample.swift; path = "beer-song/BeerSongExample.swift"; sourceTree = "<group>"; };
269
275
  A004DFC21DF8068A00800271 /* BeerSongTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BeerSongTest.swift; path = "beer-song/BeerSongTest.swift"; sourceTree = "<group>"; };
270
276
  A0DBCBF71E0000B800E0DFBF /* helloWorldTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = helloWorldTest.swift; sourceTree = "<group>"; };
271
277
  A0DBCBF91E00017E00E0DFBF /* SublistExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SublistExample.swift; path = "sublist/SublistExample.swift"; sourceTree = "<group>"; };
272
278
  A0DBCBFA1E00017E00E0DFBF /* SubListTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SubListTest.swift; path = "sublist/SubListTest.swift"; sourceTree = "<group>"; };
279
+
273
280
  E908CD451C6AD05F005D081E /* FoodChainExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FoodChainExample.swift; path = "food-chain/FoodChainExample.swift"; sourceTree = "<group>"; };
274
281
  E908CD471C6AD076005D081E /* FoodChainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = FoodChainTest.swift; path = "food-chain/FoodChainTest.swift"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
275
282
  E908CD531C6D7AD1005D081E /* PascalsTriangleExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PascalsTriangleExample.swift; path = "pascals-triangle/PascalsTriangleExample.swift"; sourceTree = "<group>"; };
@@ -352,6 +359,7 @@
352
359
  1E9A63071C506EFC00E28AE1 /* difference-of-squares */,
353
360
  1EAF95DF1C90C587009DDCB6 /* dominoes */,
354
361
  1E9A630A1C506EFC00E28AE1 /* etl */,
362
+ A0405CB41E07FF0C00B6C662 /* flatten-array */,
355
363
  E908CD431C6AD03C005D081E /* food-chain */,
356
364
  1E9A630D1C506EFC00E28AE1 /* gigasecond */,
357
365
  1E9A63101C506EFC00E28AE1 /* grade-school */,
@@ -914,6 +922,17 @@
914
922
  name = "Supporting Files";
915
923
  sourceTree = "<group>";
916
924
  };
925
+
926
+ A0405CB41E07FF0C00B6C662 /* flatten-array */ = {
927
+ isa = PBXGroup;
928
+ children = (
929
+ A0405CB51E07FFE500B6C662 /* FlattenArrayExample.swift */,
930
+ A0405CB71E07FFF500B6C662 /* FlattenArrayTest.swift */,
931
+ );
932
+ name = "flatten-array";
933
+ sourceTree = "<group>";
934
+
935
+ };
917
936
  A016F7A31DF0418D005640FF /* beer-song */ = {
918
937
  isa = PBXGroup;
919
938
  children = (
@@ -930,6 +949,7 @@
930
949
  A0DBCBFA1E00017E00E0DFBF /* SubListTest.swift */,
931
950
  );
932
951
  name = "sublist";
952
+
933
953
  sourceTree = "<group>";
934
954
  };
935
955
  E908CD431C6AD03C005D081E /* food-chain */ = {
@@ -1257,6 +1277,7 @@
1257
1277
  1E9A63A91C506EFD00E28AE1 /* helloWorldExample.swift in Sources */,
1258
1278
  E9AFA1871C624FD5006AD72D /* MinesweeperTest.swift in Sources */,
1259
1279
  1E9A63A51C506EFD00E28AE1 /* GrainsTest.swift in Sources */,
1280
+ A0405CB81E07FFF500B6C662 /* FlattenArrayTest.swift in Sources */,
1260
1281
  1E167A121C8AA5D7001EAD90 /* PokerTest.swift in Sources */,
1261
1282
  1E9A63E11C506EFD00E28AE1 /* StrainTest.swift in Sources */,
1262
1283
  1E9A63B71C506EFD00E28AE1 /* NthPrimeTest.swift in Sources */,
@@ -1270,7 +1291,10 @@
1270
1291
  E9AFA1531C5945C9006AD72D /* HexadecimalTest.swift in Sources */,
1271
1292
  1E9A63AF1C506EFD00E28AE1 /* LeapTest.swift in Sources */,
1272
1293
  1E9A63901C506EFD00E28AE1 /* AtbashExample.swift in Sources */,
1294
+
1295
+ A0405CB61E07FFE500B6C662 /* FlattenArrayExample.swift in Sources */,
1273
1296
  A0DBCBFB1E00017E00E0DFBF /* SublistExample.swift in Sources */,
1297
+
1274
1298
  1E9A63C61C506EFD00E28AE1 /* QueenAttackExample.swift in Sources */,
1275
1299
  E90DE39E1D3E818000F3B881 /* AllYourBaseTest.swift in Sources */,
1276
1300
  E908CD481C6AD076005D081E /* FoodChainTest.swift in Sources */,
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.0.6.2
4
+ version: 2.0.6.3
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-01-04 00:00:00.000000000 Z
11
+ date: 2017-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -6987,6 +6987,8 @@ files:
6987
6987
  - tracks/swift/exercises/dominoes/DominoesTest.swift
6988
6988
  - tracks/swift/exercises/etl/EtlExample.swift
6989
6989
  - tracks/swift/exercises/etl/EtlTest.swift
6990
+ - tracks/swift/exercises/flatten-array/FlattenArrayExample.swift
6991
+ - tracks/swift/exercises/flatten-array/FlattenArrayTest.swift
6990
6992
  - tracks/swift/exercises/food-chain/FoodChainExample.swift
6991
6993
  - tracks/swift/exercises/food-chain/FoodChainTest.swift
6992
6994
  - tracks/swift/exercises/gigasecond/GigasecondExample.swift