# Solution for Ch 22 Bronze, Silver, and Gold Challenge in Xcode 9.3

``````// Bronze Challenge
struct Stack<Element>: Sequence {
...
func filter(f: (Element) -> Bool) -> Stack<Element> {
var filteredItems = [Element]()
for item in items where f(item) {
filteredItems.append(item)
}
return Stack<Element>(items: filteredItems)
}
}

print(myStack)
let evenStack = myStack.filter(f: { \$0 % 2 == 0})
print(evenStack)
``````

Output

``````Stack<Int>(items: [10, 20, 30, 1, 2, 3, 3, 2, 1])
Stack<Int>(items: [10, 20, 30, 2, 2])
``````
``````// Silver Challenge
func findAll<T: Equatable>(_ array: [T], _ element: T) -> [Int] {
var positions = [Int]()
for (index, item) in array.enumerated() where item == element {
positions.append(index)
}
return positions
}

print(findAll([5,3,7,3,9], 3))
print(findAll(["you","are","as","good","as","you","think"], "as"))
``````

Output

``````[1, 3]
[2, 4]
``````
``````// Gold Challenge (indexes)
func findAllIndexesInCollection<T: Equatable, U: Collection>(_ collection: U, _ element: T) -> [Int] where U.Element == T {
var indexes = [Int]()
for (index, item) in collection.enumerated() where item == element {
indexes.append(index)
}
return indexes
}

print(findAllIndexesInCollection([5,3,7,3,9], 3))
print(findAllIndexesInCollection(["you","are","as","good","as","you","think"], "as"))
print(findAllIndexesInCollection(Set(["you","are","as","good","as","you","think"]), "as"))  // Sets are unordered collections
``````

Output

``````[1, 3]
[2, 4]
[1]
``````
``````// Gold Challenge (items)
func findAllItemsInCollection<T: Equatable, U: Collection>(_ collection: U, _ element: T) -> [U.Element] where U.Element == T {
var items = [U.Element]()
for item in collection where item == element {
items.append(item)
}
return items
}

print(findAllItemsInCollection([5,3,7,3,9], 3))
print(findAllItemsInCollection(["you","are","as","good","as","you","think"], "as"))
print(findAllItemsInCollection(Set(["you","are","as","good","as","you","think"]), "as"))
``````

Output

``````[3, 3]
["as", "as"]
["as"]
``````