From c9920652bff9e837acda15e5fda63d68530e89b8 Mon Sep 17 00:00:00 2001 From: Lambda_School_Loaner_220 Date: Sun, 3 Nov 2019 21:27:15 -0800 Subject: [PATCH 1/2] Finished questions 1 - 9. Need to finish 10 --- NOCList.playground/Contents.swift | 97 +++++++++++++----- .../UserInterfaceState.xcuserstate | Bin 0 -> 9137 bytes 2 files changed, 72 insertions(+), 25 deletions(-) create mode 100644 NOCList.playground/playground.xcworkspace/xcuserdata/lambda_school_loaner_220.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/NOCList.playground/Contents.swift b/NOCList.playground/Contents.swift index 71c2654..c88d5f5 100644 --- a/NOCList.playground/Contents.swift +++ b/NOCList.playground/Contents.swift @@ -29,48 +29,95 @@ 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 agent001 = (coverName: "Ethan Hunt", realName: "Tom Cruise", accessLevel: 8, compromised: false) +let agent002 = (coverName: "Jim Phelps", realName: "Jon Voight", accessLevel: 9, compromised: true) +let agent003 = (coverName: "Claire Phelps", realName: "Emmanuelle Beart", accessLevel: 5, compromised: false) +let agent004 = (coverName: "Eugene Kittridge", realName: "Henry Czerny", accessLevel: 10, compromised: true) +let agent005 = (coverName: "Franz Krieger", realName: "Jean Reno", accessLevel: 4, compromised: false) +let agent006 = (coverName: "Luther Stickell", realName: "Ving Rhames", accessLevel: 4, compromised: false) +let agent007 = (coverName: "Sarah Davies", realName: "Kristin Scott Thomas", accessLevel: 5, compromised: true) +let agent008 = (coverName: "Max RotGrab", realName: "Vanessa Redgrave", accessLevel: 4, compromised: false) +let agent009 = (coverName: "Hannah Williams", realName: "Ingeborga Dapkūnaitė", accessLevel: 5, compromised: true) +let agent010 = (coverName: "Jack Harmon", realName: "Emilio Estevez", accessLevel: 6, compromised: true) +let agent011 = (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 agentArray = [agent001, agent002, agent003, agent004, agent005, agent006, agent007, agent008, agent009, agent010, agent011] //: ## 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 compdAgents = 0 + for agents in agentArray + { + if agents.compromised + { + compdAgents += 1 + } + } + return compdAgents +} //: ## 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() -> [String] +{ + var cleanAgentList: [String] = [] + for agents in agentArray + { + if !agents.compromised + { + print(agents.coverName) + cleanAgentList.append(agents.coverName) + } + } + print(cleanAgentList) + return cleanAgentList +} + +findCleanAgents() //: ## 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 \(agentArray.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() +{ + for agent in agentArray + { + if agent.accessLevel >= 8 && agent.compromised == true { + print("\(agent.realName), level: \(agent.accessLevel) **WARNING** **COMPROMISED**") + } + else if agent.accessLevel >= 8 + { + print("\(agent.realName), level: \(agent.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 lowToHighLevelAgents() +{ + for agents in agentArray + { + switch agents { + case agents.accessLevel <=: + print("\(agents.coverName) is a low level agent") + case agents.accessLevel <=: + print("\(agents.coverName) is a low level agent") + case agents.accessLevel <=: + print("\(agents.coverName) is a low level agent") + default: + <#code#> + } + } +} //: ## Step 10 diff --git a/NOCList.playground/playground.xcworkspace/xcuserdata/lambda_school_loaner_220.xcuserdatad/UserInterfaceState.xcuserstate b/NOCList.playground/playground.xcworkspace/xcuserdata/lambda_school_loaner_220.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..066d6b4754d04abf29d83c8e92aa1c38adf47caa GIT binary patch literal 9137 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 literal 0 HcmV?d00001 From 5d35c14d1b28ae27f4ebd1027aad8d61df1cd8cc Mon Sep 17 00:00:00 2001 From: james-mcdougall Date: Mon, 2 Dec 2019 16:38:23 -0800 Subject: [PATCH 2/2] Finished project --- NOCList.playground/Contents.swift | 83 ++++++++++-------- .../UserInterfaceState.xcuserstate | Bin 0 -> 9329 bytes 2 files changed, 47 insertions(+), 36 deletions(-) create mode 100644 NOCList.playground/playground.xcworkspace/xcuserdata/lambda_school_loaner_226.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/NOCList.playground/Contents.swift b/NOCList.playground/Contents.swift index c88d5f5..24d95f7 100644 --- a/NOCList.playground/Contents.swift +++ b/NOCList.playground/Contents.swift @@ -42,58 +42,59 @@ let agent010 = (coverName: "Jack Harmon", realName: "Emilio Estevez", accessLeve let agent011 = (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 agentArray = [agent001, agent002, agent003, agent004, agent005, agent006, agent007, agent008, agent009, agent010, agent011] +var agentArray = [agent001, agent002, agent003, agent004, agent005, agent006, agent007, agent008, agent009, agent010, agent011] //: ## 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 +func numberOfCompormisedAgents() -> Int { var compdAgents = 0 - for agents in agentArray + for agent in agentArray { - if agents.compromised + if agent.compromised { - compdAgents += 1 + compdAgents += 1 } } + return compdAgents } //: ## 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") +numberOfCompormisedAgents() //: ## 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() -> [String] { - var cleanAgentList: [String] = [] - for agents in agentArray + var cleanAgents: [String] = [] + for agent in agentArray { - if !agents.compromised + if agent.compromised == false { - print(agents.coverName) - cleanAgentList.append(agents.coverName) + cleanAgents.append(agent.coverName) +// print(cleanAgents.count) } } - print(cleanAgentList) - return cleanAgentList + print(cleanAgents) + return cleanAgents } -findCleanAgents() + //: ## 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 \(agentArray.count) total agents") +var cleanAgentCount = findCleanAgents() +print("\(cleanAgentCount.count) clean agents out of \(agentArray.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() { + var badAgents = 0 for agent in agentArray { - if agent.accessLevel >= 8 && agent.compromised == true { - print("\(agent.realName), level: \(agent.accessLevel) **WARNING** **COMPROMISED**") - } - else if agent.accessLevel >= 8 + if agent.accessLevel >= 8 && agent.compromised { - print("\(agent.realName), level: \(agent.accessLevel)") + badAgents += 1 + print("\(agent.realName), level: \(agent.accessLevel) **WARNING** **COMPROMISED**") } } } @@ -102,30 +103,40 @@ func findHighRisk() 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 lowToHighLevelAgents() + +func allLevelsOfAgents() { - for agents in agentArray + var lowLevelAgents = 0 + var midLevelAgents = 0 + var highLevelAgents = 0 + + for agent in agentArray { - switch agents { - case agents.accessLevel <=: - print("\(agents.coverName) is a low level agent") - case agents.accessLevel <=: - print("\(agents.coverName) is a low level agent") - case agents.accessLevel <=: - print("\(agents.coverName) is a low level agent") + switch agent.accessLevel { + case 1...4: + lowLevelAgents += 1 + case 5...7: + midLevelAgents += 1 + case 8...10: + highLevelAgents += 1 default: - <#code#> + print("There are no agents to show") } } + print("\(lowLevelAgents) low level agents, \(midLevelAgents) mid level agents, \(highLevelAgents) high level agents") } - //: ## Step 10 //: Call the above function and check its output in the console. - - - +allLevelsOfAgents() //: ## 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 sortedAgentList() +{ + let sortedAgents = agentArray.sorted(by: {$0.accessLevel < $1.accessLevel}) + for agent in sortedAgents + { + print("\(agent.coverName), level: \(agent.accessLevel)") + } +} +sortedAgentList() diff --git a/NOCList.playground/playground.xcworkspace/xcuserdata/lambda_school_loaner_226.xcuserdatad/UserInterfaceState.xcuserstate b/NOCList.playground/playground.xcworkspace/xcuserdata/lambda_school_loaner_226.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..16bbfcfe83621f9d650dd2fef7fc3c115ecdae95 GIT binary patch literal 9329 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 jF25`0y47Ec!(eRk$g@3cis3;iP)+g literal 0 HcmV?d00001