# 2016-04-24 Swift solution to StoneWall

This is a 100% scoring solution to the Codility StoneWall problem. Note the bunch of print statements which I've left included for now.

```  //: https://codility.com/programmers/task/stone_wall/
import UIKit```
```  public func solution1(inout H : [Int]) -> Int {
var stack: [Int] = []
var nBlocks = 0
var i = 0
var lastHeight = 0

func append(height: Int) {
print("append \(height)")
stack.append(height)
lastHeight = height
nBlocks += 1
}

while i < H.count {
let currHeight = H[i]
print("i=\(i), currHeight=\(currHeight)")
if i == 0 {
append(currHeight)
} else {
if currHeight == lastHeight {
print("currHeight == lastHeight")
} else if currHeight > lastHeight {
append(currHeight)
} else { // currHeight < lastHeight
// Keep popping
stack.popLast()
var found = false
while !stack.isEmpty {
let lastAppendedHeight = stack.last!

if lastAppendedHeight == currHeight {
print("lastAppendedHeight == currHeight == \(currHeight)")
lastHeight = currHeight
found = true
break
} else if lastAppendedHeight < currHeight {
print("break")
break
}
print("popLast")
stack.popLast()
}
if !found {
append(currHeight)
}
}

}

i += 1
}

return nBlocks
}```
```  var H = [8,8,5,7,9,8,7,4,8]
H = [1,2,3,4,5]
H = [1,1,1,1,1,1,1,1,1]
H = [1,2,3,3,3,2,2,2,2,2,1]
H = [5,4,3,2,1]
H = [1,2,1,2,1,2]```
`  solution1(&H)`