Lab 1: Welcome to Swift - Program using closure to find sum of two numbers.
Try it Out - Program using closure to find sum of two numbers.
Solution 1:
import Foundation /* * Complete the 'Sum' function below. * * The function is expected to return an INTEGER. * The function accepts following parameters: * 1. INTEGER num1 * 2. INTEGER num2 */ //Task 1: Write a programe using a closure that accepts two integer numbers (num1 and num2), and returns the sum of those numbers. func Sum(num1: Int, num2: Int) -> Int { let sum = num1 + num2 return sum } // Check out the 'Optional' function calling code below if interested!
/*func Sum(num1: Int, num2: Int)*/
let stdout = ProcessInfo.processInfo.environment["OUTPUT_PATH"]! FileManager.default.createFile(atPath: stdout, contents: nil, attributes: nil) let fileHandle = FileHandle(forWritingAtPath: stdout)! guard let num1 = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } guard let num2 = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } let result = Sum(num1: num1, num2: num2) fileHandle.write(String(result).data(using: .utf8)!) fileHandle.write("\n".data(using: .utf8)!)
Lab 2: Welcome to Swift - Program to store names of 10 students in an array and Sort it.
Try it Out - Program to store names in an array and Sort
Solution 2:
import Foundation /* * Complete the 'sort_names' function below. * * The function accepts STRING_ARRAY names as parameter. */ //Task 1: Write a program to store the names of 5 students in an array. Sort the array in ascending order alphabetically. func sort_names(names: [String]) -> Void { var n = names n.sort(by:<) for i in n{ print(i) } } guard let namesCount = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } var names = [String]() for _ in 1...namesCount { guard let namesItem = readLine() else { fatalError("Bad input") } names.append(namesItem) } guard names.count == namesCount else { fatalError("Bad input") } sort_names(names: names)
Lab 3: Welcome to Swift - Program to store details of 5 students
Try it Out - Program to store details of 5 students
Solution 3:
// Enter your code here. Read input from STDIN. Print output to STDOUT // Task 1: Write a programe to store details of 5 students: Roll number, Name, Marks of 3 Subjects. class Student{ var roll : Int var name : String var mark1 : Int var mark2 : Int var mark3 : Int // assign value using initializer init(rollno: Int,name: String, mark1: Int, mark2: Int, mark3: Int){ self.roll = rollno self.name = name self.mark1 = mark1 self.mark2 = mark2 self.mark3 = mark3 } } var s1 = Student(rollno: 1, name: "Alan", mark1: 45, mark2: 50, mark3: 42) var s2 = Student(rollno: 2, name: "Ben", mark1: 48, mark2: 50, mark3: 32) var s3 = Student(rollno: 3, name: "Cassey", mark1: 41, mark2: 35, mark3: 42) var s4 = Student(rollno: 4, name: "Dexter", mark1: 43, mark2: 30, mark3: 42) var s5 = Student(rollno: 5, name: "Elle", mark1: 45, mark2: 47, mark3: 32) // Task 2: Fetch the roll number of student s1 print(s1.roll)
Lab 4: Welcome to Role Manager
Try it Out - Role Manager
Solution 4:
import Foundation /* * Complete the 'roleManager' function below. * * The function is expected to return a STRING. * The function accepts STRING role as parameter. */ //Task 1: Create an enum named Role which contains 3 members admin, owner, and guest. enum Role:String{ case admin case owner case guest case none } // Task 2: Create a function roleManager which takes the Role as the argument, and return the following values: // Role.admin : "Full Access Granted" // Role.owner : "Read Write Access Granted" // Role.guest : "Temporary Access Granted" func roleManager(role:Role) -> String { // guard let roles = role else { fatalError("Bad input") } // if anOptionalInt != nil { // print("Contains a value!") // } else { // print("Doesn’t contain a value.") // } if role == .admin { return "Full Access Granted" } if role == .owner{ return "Read Write Access Granted" } if role == .guest{ return "Temporary Access Granted" } return "" } let stdout = ProcessInfo.processInfo.environment["OUTPUT_PATH"]! FileManager.default.createFile(atPath: stdout, contents: nil, attributes: nil) let fileHandle = FileHandle(forWritingAtPath: stdout)! guard let role = readLine() else { fatalError("Bad input") } let arg=Role(rawValue:role)! let result = roleManager(role: arg) fileHandle.write(result.data(using: .utf8)!) fileHandle.write("\n".data(using: .utf8)!)
Lab 5: Welcome to Grading System
Try-it-Out Grading System
Solution 5: Welcome to Grading System
import Foundation /* * Create the 'Student' class below. */ protocol Person{ var name:String{set get} var age:Int{get set} } // Task 1: Adopt a Person prtotocol to create a class Student. // The stiudent Class should contain additional members: // mark1:Int, mark2:Int, mark3:Int // average()-> Double should return the average marks (round off to 2 decimal points) of a given students // Create a Initilizer to initilize every member. class Student : Person { var age :Int var name :String var mark1 : Int var mark2 : Int var mark3:Int init(name:String,age:Int,mark1:Int,mark2:Int,mark3:Int){ self.name = name self.age = age self.mark1 = mark1 self.mark2 = mark2 self.mark3 = mark3 } // print(mark1+mark2+mark3)/3) func average() ->Double{ let t = Double(mark1+mark2+mark3)/3 return round(t * 100) / 100.0 } } let stdout = ProcessInfo.processInfo.environment["OUTPUT_PATH"]! FileManager.default.createFile(atPath: stdout, contents: nil, attributes: nil) let fileHandle = FileHandle(forWritingAtPath: stdout)! guard let name:String = readLine() else { fatalError("Bad input") } guard let age:Int = Int(readLine()!) else { fatalError("Bad input") } guard let m1:Int = Int(readLine()!) else { fatalError("Bad input") } guard let m2:Int = Int(readLine()!) else { fatalError("Bad input") } guard let m3:Int = Int(readLine()!) else { fatalError("Bad input") } let std = Student(name:name,age:age,mark1:m1,mark2:m2,mark3:m3) let result = std.average() fileHandle.write(String(result).data(using: .utf8)!) fileHandle.write("\n".data(using: .utf8)!)
Lab 7: Swift Class Bank - Creating a Banking Application
Try-It-On : Banking System
Solution 7:
import Foundation // Problem: Create a Banking application with a code containing: /* Customer class with i * ID:Int * name:String * balance:Double attributes */ class Customer{ var id:Int var name:String var balance:Double init(id:Int,name:String,balance:Double){ self.id = id self.name = name // Task 3: On constructor creation, minimum balance of 500 should be assigned to the custoemr. if(balance <= 500.0){ self.balance = 500.0 } else { self.balance = balance } } } class Bank { // Task 1: Create Customer array attribute with the name customers var customers = [Customer ]() // Task 2: Create a constructor which receives count as parameter, and dynamically builds the customer array based on count. init(count:Int){ // Task 4: Customer ID must start from 1, and should increment by 1. for i in 1...count{ customers.append(Customer(id:i, name:"Test",balance:Double(i))) // print(i) } } // Task 5: deposit amount to customer balance func deposit(id:Int, amount:Double) -> Void { // print("->",customers.count) for customer in customers{ if customer.id == id{ print(customer.id, customer.balance ) customer.balance += amount print(customer.id, customer.balance ) } // print(customer.id, customers) } } // Task 6: Withdraw amount from customer balance and maintain minimum balance of 500.0. func withdraw(id:Int, amount:Double) -> Void{ for customer in customers{ if customer.id == id{ if customer.balance - amount >= 500.0 { customer.balance = customer.balance - amount } } } } // Task 7: return customer object respective to the id, if not found then nil. func getCustomer(id:Int) -> Customer?{ for customer in customers{ if customer.id == id{ return customer } } return nil } } let stdout = ProcessInfo.processInfo.environment["OUTPUT_PATH"]! FileManager.default.createFile(atPath: stdout, contents: nil, attributes: nil) let fileHandle = FileHandle(forWritingAtPath: stdout)! guard let custCount = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } guard let testCaseCount = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } var bank = Bank(count:custCount) guard let id = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } for _ in 1...testCaseCount { guard let ops = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } guard let amount = Double((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } switch ops{ case 1 ://deposit bank.deposit(id:id,amount:amount) case -1 : //withdraw bank.withdraw(id:id,amount:amount) default : break } } let cust:Customer! = bank.getCustomer(id:id) fileHandle.write(String(bank.customers.count).data(using: .utf8)!) fileHandle.write("\n".data(using: .utf8)!) if cust != nil { fileHandle.write(String(cust.balance).data(using: .utf8)!) }
Lab 8: Welcome to Math Class Impl
Try-It-Out : Math class mock
Solution 8:
import Foundation // Create a Math class which includes the following class/static methods: // Note: Round off the result to 2 decimal points (except for round method). class Math{ // Task 1: Create function: pow (a:Int,b:Int)->Int returns a raised to b. // Example: pow (a:3,b:4) returns 81 static func pow(a:Int, b:Int) -> Int{ var list_of_same_num = [Int](repeating: a, count: b) print("List: ", list_of_same_num) let index = 0 var power = 1 while list_of_same_num.count != 0 { power = list_of_same_num[index]*power list_of_same_num.remove(at : index) } print("\(a) power of \(b) is: ",power) return power } // Task 2: Create function: round (num:Double,point:Int) -> Double rounds num to point decimal points. // Example: round (num:3.3546,point:2) returns 3.35 static func round(num:Double, point:Int) -> Double { let round_value = Double(String(format: "%.\(point)f", num))! print("\(num) round in \(point)th place is: ",round_value) return round_value } // Task 3: Create function: divide (a:Int,b:Int)->Double returns the division result of a and b. // Example: divide (a:100,b:3) returns 33.33 static func divide(a:Int, b:Int) -> Double{ let quotient = Double(a) / Double(b) let str_quotient = String(quotient) let split_str_by_dot = str_quotient.components(separatedBy: ".") let fractonal_two_place = String(split_str_by_dot[1].prefix(2)) let final_quotient:Double = Double(split_str_by_dot[0] + "." + fractonal_two_place)! print("\(a) divide by \(b) is: ", final_quotient) return final_quotient } // Task 4: Create function: sqrt (num:Int)->Double returns the square root of num. // Example: sqrt (num:4) returns 2.0 static func sqrt(num:Int) -> Double { var half_of_num : Double = Double(num)/2 var stopper : Double = 0 while Double(half_of_num) != Double(stopper) { stopper = half_of_num half_of_num = (Double(num)/stopper + stopper)/2 } let n = 2 let Square_root = Double(String(format: "%.\(n)f", half_of_num))! print("Square Root of \(num) is: ", Square_root) return Square_root } } let stdout = ProcessInfo.processInfo.environment["OUTPUT_PATH"]! FileManager.default.createFile(atPath: stdout, contents: nil, attributes: nil) let fileHandle = FileHandle(forWritingAtPath: stdout)! guard let a = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } guard let b = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } guard let num = Double((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } guard let point = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } guard let num1 = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } let dev=Math.divide(a:a,b:b) let pow=Math.pow(a:a,b:b) let round=Math.round(num:num,point:point) let sqrt=Math.sqrt(num:num1) fileHandle.write(String(dev).data(using: .utf8)!) fileHandle.write("\n".data(using: .utf8)!) fileHandle.write(String(pow).data(using: .utf8)!) fileHandle.write("\n".data(using: .utf8)!) fileHandle.write(String(round).data(using: .utf8)!) fileHandle.write("\n".data(using: .utf8)!) fileHandle.write(String(sqrt).data(using: .utf8)!) fileHandle.write("\n".data(using: .utf8)!)
Lab 6: Welcome to Swift LinkedLIst.
Try-It-Out Swift Linked List.
Solution 6:
[1:10 PM] Uniyal, Manish import Foundation class Node{ var data:Int var next:Node! init(data:Int){ self.data = data self.next = nil } } class LinkedList { // Task 3: head:Node holds the first element reference. private(set) var head: Node? // Task 2: count:Int keeps track of the number of nodes in the link. private(set) var count: Int = 0 // Task 1: The function insert (data:Int) inserts data to the list, and returns nothing. // Inserts a new node with the given data into the linked list func insert(data: Int) { let newNode = Node(data: data) if head == nil { head = newNode } else { var current = head while current?.next != nil { current = current?.next } current?.next = newNode } count += 1 } } let stdout = ProcessInfo.processInfo.environment["OUTPUT_PATH"]! FileManager.default.createFile(atPath: stdout, contents: nil, attributes: nil) let fileHandle = FileHandle(forWritingAtPath: stdout)! guard let arrCount = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } var list = LinkedList() if arrCount>0{ for _ in 1...arrCount { guard let arrItem = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") } list.insert(data:arrItem) } } let count = list.count fileHandle.write(String(count).data(using: .utf8)!) var temp:Node! = list.head while temp != nil { fileHandle.write("\n".data(using: .utf8)!) fileHandle.write(String(temp.data).data(using: .utf8)!) temp = temp.next }