Bronze, Silver & Gold Challenges


#21

My Bronze challenge idea. Uncomment the “toDoList.removeAll( )” to see different results:

var toDoList = ["Take out garbage", "Pay bills", "Cross off finished items"]

//toDoList.removeAll()

if toDoList.isEmpty {
    print("My to do list is empty.")
} else {
    if toDoList.count == 1 {
        print("I have one thing to do.")
    } else {
        print("I have \(toDoList.count) things to do.")
    }
}

#22

My Gold approach:

var bucketList = ["Climb Mt. Everest"]
var newItems = [
    "Fly hot air balloon to Fiji",
    "Watch the Lord of the Rings trilogy in one day",
    "Go on a walkabout",
    "Scuba dive in the Great Blue Hole",
    "Find a triple rainbow"
]

for item in newItems {
    bucketList.append(item)
}
bucketList.remove(at: 2)
bucketList
print(bucketList.count)
print(bucketList[0...2])
bucketList[2] += " in Australia"

var found: Int?
found = bucketList.index(of: "Fly hot air balloon to Fiji")

if let fijiIndex = found {
    print("The Fiji entry is at Array index position \(fijiIndex).")
    print("The array element that is two positions after the Fiji entry is: \(bucketList[fijiIndex + 2])")
}

#23

I’m a bit confused about your silver challenge using the for-in loop.

The way I interpreted it (obviously wrong):

  • set an empty array containing string values to the variable “reversedArray”
  • for elements in “toDoList” take the empty “reversedArray” and insert items (from toDoList) starting at 0 index and so on
  • reversedArray (the way I see it…again wrong) prints the exact same string as toDoList

Basically, could you explain how the function reversedArray.insert(item, at: 0) actually reverses the list?


#24

Not a problem! I think the part you’re getting confused on is the insert method. Let’s walk through the following example:

let numbers = [1,2,3]

for number in numbers {
    print(number)
}

So when you run that, it will print out 1,2,3. So the reversing magic is happening with the insert method. Consider the following:

let numbers = [1,2,3]
var reversedNumbers = [Int]()

for number in numbers {
    reversedNumbers.insert(number, at: 0)
    print(reversedNumbers)
    
}

When this runs you’ll see:
[1]
[2,1]
[3,2,1]

So when you use reversedNumbers.insert(number, at: 0) it means: "I’m going to insert this number at location 0, and the element that was 0, and everything else will be shifted to the right.

Let me know if that helps, or if you need further clarification!


#25

Thanks a lot I understand now.

Iterating through the for-in loop,

1st time- insert 1 at index 0 into the empty reversedNumbers array
2nd time- insert 2 at index 0 (shifting 1 to the right)
3rd time- insert 3 at index 0 (shifting 2 and 1 to the right)


#26

Here is my solution to the Gold Challenge:

var bucketList = ["Take out garbage", "Fly hot air balloon to Fiji", "Pay bills", "Cross off finished items"]

if let foundIndex = bucketList.index(of: "Fly hot air balloon to Fiji"),
  let twoPositionLaterIndex = bucketList.index(foundIndex, offsetBy: 2, limitedBy: bucketList.endIndex.advanced(by: -1)) {
  print(bucketList[twoPositionLaterIndex])
}