diff --git a/NOCList.playground/Contents.swift b/NOCList.playground/Contents.swift index 71c2654..82aa7d3 100644 --- a/NOCList.playground/Contents.swift +++ b/NOCList.playground/Contents.swift @@ -29,56 +29,103 @@ This message will self destruct in 5 seconds. */ //: ## Step 1 //: Create constants for each of the above agents and store all their information in a tuple. - - +let agent_1 = (coverName: "Ethan Hunt", realName: "Tom Cruise", accessLevel: 8, compromised: false) + let agent_2 = (coverName: "Jim Phelps", realName: "Jon Voight", accessLevel: 9, compromised: true) + let agent_3 = (coverName: "Claire Phelps", realName: "Emmanuelle Beart", accessLevel: 5, compromised: false) + let agent_4 = (coverName: "Eugene Kittridge", realName: "Henry Czerny", accessLevel: 10, compromised: true) + let agent_5 = (coverName: "Franz Krieger", realName: "Jean Reno", accessLevel: 4, compromised: false) + let agent_6 = (coverName: "Luther Stickell", realName: "Ving Rhames", accessLevel: 4, compromised: false) + let agent_7 = (coverName: "Sarah Davies", realName: "Kristin Scott Thomas", accessLevel: 5, compromised: true) +let agent_8 = (coverName: "Max RotGrab", realName: "Vanessa Redgrave", accessLevel: 4, compromised: false) + let agent_9 = (coverName: "Hannah Williams", realName: "Ingeborga Dapkūnaitė", accessLevel: 5, compromised: true) + let agent_10 = (coverName: "Jack Harmon", realName: "Emilio Estevez", accessLevel: 6, compromised: true) + let agent_11 = (coverName: "Frank Barnes", realName: "Dale Dye", accessLevel: 9, compromised: false) //: ## Step 2 //: Place the above constants inside an array. Declare this array as a constant as well. - +let superAgents = [agent_1, agent_2,agent_3,agent_4,agent_5,agent_6,agent_7,agent_8,agent_9,agent_10,agent_11] //: ## Step 3 //: Create a function that calculates the total number of compromised agents. Inside the function, iterate over the array of agents to determine which ones are compromised. Return the total count. - +func compromisedAgents() -> Int{ + var count = 0; + + superAgents.forEach{ + if $0.compromised{ + count += 1 + } + } + return count; +} //: ## Step 4 //: Call the above function to find the total number of compromised agents and then print a sentence that says "# agents have been compromised!" using string interpolation. - - +print("\(compromisedAgents()) agents have been compromised!" ); //: ## Step 5 //: Create a function called "findCleanAgents" that both prints the cover names of all uncompromised agents, as well as returns an array of agents that are uncompromised. - - +func findCleanAgents()-> [(coverName: String, realName: String, accessLevel: Int, compromised: Bool)]{ + let uncompromisedAgents = superAgents.filter{$0.compromised == false}; + uncompromisedAgents.forEach{ print($0.coverName)}; + return(uncompromisedAgents); +} //: ## Step 6 //: Call the above function to find the total number of clean agents and print a message that says "# clean agents out of # total agents." Use the total number of agents in the array from step 2 as the second number in the string. - +print("\(findCleanAgents().count) clean agents out of \(superAgents.count) total agents.") //: ## Step 7 //: Create a function called "findHighRisk" that prints out the real names and access levels of agents with level 8 or higher. If one of these agents is also currently compromised, add `**WARNING** **COMPROMISED**` to the end of the string that includes their name and access level. //: - Example: `Jon Voight, level: 9 **WARNING** **COMPROMISED**` - - +func findHighRisk(){ + superAgents.filter{$0.accessLevel > 7}.forEach{ + if ($0.compromised){ + print("\($0.realName), level: \($0.accessLevel) **WARNING** **COMPROMISED**"); + } + else{ + print("\($0.realName), level: \($0.accessLevel)"); + } + } +} //: ## Step 8 //: Call the above function and check the output in the console to ensure it is functioning properly. - - +findHighRisk(); //: ## Step 9 //: Create a function that finds totals for low, mid, and high level agents. Low level agents are 4 or lower, mid are 5-7, and high level agents are 8 or above. Iterate over each agent and use a `switch` statement to determine their level group. At the end of the function, print a statement like the following: "# low level agents, # mid level agents, and # high level agents" - - +func findTotalLowMidHighLevelAgents(){ + var agentsByRisk:[[(coverName: String, realName: String, accessLevel: Int, compromised: Bool)]] = [[],[],[]]; + + superAgents.forEach{ + switch $0.accessLevel{ + case 1...4: + agentsByRisk[0].append($0); + case 5...7: + agentsByRisk[1].append($0); + case 8...10: + agentsByRisk[2].append($0); + default: + break; + }; + }; + print("\(agentsByRisk[0].count) low level agents, \(agentsByRisk[1].count) mid level agents, and \(agentsByRisk[2].count) high level agents"); +} //: ## Step 10 //: Call the above function and check its output in the console. - - +findTotalLowMidHighLevelAgents(); //: ## Step 11 (Optional) //: Create and call a function that prints the cover names and access levels of all agents, but the list should be sorted by access level, in ascending order. - +func printSortedAgentListByAccessLevel(){ + let sortedAgentList = superAgents.sorted(by: {$0.accessLevel < $1.accessLevel}) + sortedAgentList.forEach{ + print("\($0.coverName), level: \($0.accessLevel)"); + }; +} +printSortedAgentListByAccessLevel(); diff --git a/NOCList.playground/contents.xcplayground b/NOCList.playground/contents.xcplayground index 89da2d4..3596865 100644 --- a/NOCList.playground/contents.xcplayground +++ b/NOCList.playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/NOCList.playground/playground.xcworkspace/xcuserdata/Brave.xcuserdatad/UserInterfaceState.xcuserstate b/NOCList.playground/playground.xcworkspace/xcuserdata/Brave.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..07d8bdb Binary files /dev/null and b/NOCList.playground/playground.xcworkspace/xcuserdata/Brave.xcuserdatad/UserInterfaceState.xcuserstate differ