Skip to content

Commit 17bf20d

Browse files
authored
Merge pull request #452 from TheIronBorn/master
switch from local removeFirst copy to iteration for pairing
2 parents 125dfbc + 48d6e78 commit 17bf20d

File tree

5 files changed

+33
-66
lines changed

5 files changed

+33
-66
lines changed

Select Minimum Maximum/Maximum.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@
33
*/
44

55
func maximum<T: Comparable>(_ array: [T]) -> T? {
6-
var array = array
7-
guard !array.isEmpty else {
8-
return nil
9-
}
10-
11-
var maximum = array.removeFirst()
12-
for element in array {
6+
guard var maximum = array.first else { return nil }
7+
8+
for element in array.dropFirst() {
139
maximum = element > maximum ? element : maximum
1410
}
1511
return maximum

Select Minimum Maximum/Minimum.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@
33
*/
44

55
func minimum<T: Comparable>(_ array: [T]) -> T? {
6-
var array = array
7-
guard !array.isEmpty else {
8-
return nil
9-
}
10-
11-
var minimum = array.removeFirst()
12-
for element in array {
6+
guard var minimum = array.first else { return nil }
7+
8+
for element in array.dropFirst() {
139
minimum = element < minimum ? element : minimum
1410
}
1511
return minimum

Select Minimum Maximum/MinimumMaximumPairs.swift

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,13 @@
33
*/
44

55
func minimumMaximum<T: Comparable>(_ array: [T]) -> (minimum: T, maximum: T)? {
6-
var array = array
7-
guard !array.isEmpty else {
8-
return nil
9-
}
10-
11-
var minimum = array.first!
12-
var maximum = array.first!
13-
14-
let hasOddNumberOfItems = array.count % 2 != 0
15-
if hasOddNumberOfItems {
16-
array.removeFirst()
17-
}
6+
guard var minimum = array.first else { return nil }
7+
var maximum = minimum
188

19-
while !array.isEmpty {
20-
let pair = (array.removeFirst(), array.removeFirst())
9+
// if 'array' has an odd number of items, let 'minimum' or 'maximum' deal with the leftover
10+
let start = array.count % 2 // 1 if odd, skipping the first element
11+
for i in stride(from: start, to: array.count, by: 2) {
12+
let pair = (array[i], array[i+1])
2113

2214
if pair.0 > pair.1 {
2315
if pair.0 > maximum {

Select Minimum Maximum/README.markdown

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,22 @@ Here is a simple implementation in Swift:
2424

2525
```swift
2626
func minimum<T: Comparable>(_ array: [T]) -> T? {
27-
var array = array
28-
guard !array.isEmpty else {
27+
guard var minimum = array.first else {
2928
return nil
3029
}
3130

32-
var minimum = array.removeFirst()
33-
for element in array {
31+
for element in array.dropFirst() {
3432
minimum = element < minimum ? element : minimum
3533
}
3634
return minimum
3735
}
3836

3937
func maximum<T: Comparable>(_ array: [T]) -> T? {
40-
var array = array
41-
guard !array.isEmpty else {
38+
guard var maximum = array.first else {
4239
return nil
4340
}
4441

45-
var maximum = array.removeFirst()
46-
for element in array {
42+
for element in array.dropFirst() {
4743
maximum = element > maximum ? element : maximum
4844
}
4945
return maximum
@@ -68,7 +64,7 @@ array.minElement() // This will return 3
6864
array.maxElement() // This will return 9
6965
```
7066

71-
```
67+
```swift
7268
let array = [ 8, 3, 9, 4, 6 ]
7369
//swift3
7470
array.min() // This will return 3
@@ -99,21 +95,16 @@ Here is a simple implementation in Swift:
9995

10096
```swift
10197
func minimumMaximum<T: Comparable>(_ array: [T]) -> (minimum: T, maximum: T)? {
102-
var array = array
103-
guard !array.isEmpty else {
98+
guard var minimum = array.first else {
10499
return nil
105100
}
101+
var maximum = minimum
106102

107-
var minimum = array.first!
108-
var maximum = array.first!
109-
110-
let hasOddNumberOfItems = array.count % 2 != 0
111-
if hasOddNumberOfItems {
112-
array.removeFirst()
113-
}
103+
// if 'array' has an odd number of items, let 'minimum' or 'maximum' deal with the leftover
104+
let start = array.count % 2 // 1 if odd, skipping the first element
105+
for i in stride(from: start, to: array.count, by: 2) {
106+
let pair = (array[i], array[i+1])
114107

115-
while !array.isEmpty {
116-
let pair = (array.removeFirst(), array.removeFirst())
117108
if pair.0 > pair.1 {
118109
if pair.0 > maximum {
119110
maximum = pair.0

Select Minimum Maximum/SelectMinimumMaximum.playground/Contents.swift

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,40 @@
11
// Compare each item to find minimum
22
func minimum<T: Comparable>(_ array: [T]) -> T? {
3-
var array = array
4-
guard !array.isEmpty else {
3+
guard var minimum = array.first else {
54
return nil
65
}
7-
8-
var minimum = array.removeFirst()
9-
for element in array {
6+
7+
for element in array.dropFirst() {
108
minimum = element < minimum ? element : minimum
119
}
1210
return minimum
1311
}
1412

1513
// Compare each item to find maximum
1614
func maximum<T: Comparable>(_ array: [T]) -> T? {
17-
var array = array
18-
guard !array.isEmpty else {
15+
guard var maximum = array.first else {
1916
return nil
2017
}
21-
22-
var maximum = array.removeFirst()
23-
for element in array {
18+
19+
for element in array.dropFirst() {
2420
maximum = element > maximum ? element : maximum
2521
}
2622
return maximum
2723
}
2824

2925
// Compare in pairs to find minimum and maximum
3026
func minimumMaximum<T: Comparable>(_ array: [T]) -> (minimum: T, maximum: T)? {
31-
var array = array
3227
guard !array.isEmpty else {
3328
return nil
3429
}
3530

3631
var minimum = array.first!
3732
var maximum = array.first!
3833

39-
let hasOddNumberOfItems = array.count % 2 != 0
40-
if hasOddNumberOfItems {
41-
array.removeFirst()
42-
}
43-
44-
while !array.isEmpty {
45-
let pair = (array.removeFirst(), array.removeFirst())
34+
// if 'array' has an odd number of items, let 'minimum' or 'maximum' deal with the leftover
35+
let start = array.count % 2 // 1 if odd, skipping the first element
36+
for i in stride(from: start, to: array.count, by: 2) {
37+
let pair = (array[i], array[i+1])
4638

4739
if pair.0 > pair.1 {
4840
if pair.0 > maximum {

0 commit comments

Comments
 (0)