Bronze, Silver & Gold Challenges


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

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


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.")

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.remove(at: 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])")

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?


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 {

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)

When this runs you’ll see:

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!


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)

1 Like

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)) {

For instance,There are many elements in an array,How do we know where it is in the first place,Letting the program find out for itself is the best way

var bucketList = ["Climb Hill",
              "Watch the lord of the Rings trilogy in one day",
              "Go on a walkabout",
              "Scuba dive in great Blue Hole",
              "find a triple rainbow",
              "fly hot air balloon to Fiji",

let index = bucketList.index(of :“fly hot air balloon to Fiji”);


Here’s what I came up with…

var toDoList = ["Take out garbage", "Pay Bills", "Cross off finished items"]
var reverseToDoList = [String]()
for i in toDoList {
    reverseToDoList.insert(i, at: 0)


let findIndex = bucketList.firstIndex(of: "Fly hot air balloon to Fiji")
let indexPlusTwo = findIndex! + 2

Here is my solution using nil coalescing operator:

var unwrappedIndex = bucketList.firstIndex(of: "Fly hot air balloon to Fiji") ?? 0
var nextIndex = unwrappedIndex + 2
let stringAtLocation = bucketList[nextIndex]