Skip to content

Instantly share code, notes, and snippets.

@ankit92ios
Created April 3, 2019 09:43
Show Gist options
  • Save ankit92ios/e91e9d112863da770e19e076e872a8d7 to your computer and use it in GitHub Desktop.
Save ankit92ios/e91e9d112863da770e19e076e872a8d7 to your computer and use it in GitHub Desktop.
import Foundation
//Day 1: Quartiles
func medianFunc(numbers: [Int]) -> Double {
let sortedNumbers = numbers.sorted(by: { num1, num2 in
return num1 < num2 })
let midIndex = numbers.count / 2
var median = Double(sortedNumbers[midIndex])
if(numbers.count % 2 == 0){
median = Double(sortedNumbers[midIndex] + sortedNumbers[midIndex - 1]) / Double(2)
}
return median
}
func quartiles(numbers: [Int]) -> [Int] {
let sortedNumbers = numbers.sorted(by: { num1, num2 in
return num1 < num2 })
var midIndex = sortedNumbers.count / 2
var lowerHalf = [Int]()
for i in 0..<midIndex {
lowerHalf.append(sortedNumbers[i])
}
var median = Double(sortedNumbers[midIndex])
if(sortedNumbers.count % 2 == 0){
median = Double(sortedNumbers[midIndex] + sortedNumbers[midIndex - 1]) / Double(2)
midIndex = midIndex - 1
}
var UpperHalf = [Int]()
for i in (midIndex+1)..<sortedNumbers.count {
UpperHalf.append(sortedNumbers[i])
}
// print(sortedNumbers)
// print(UpperHalf)
var result : [Int] = [Int]()
result.append(Int(medianFunc(numbers: lowerHalf)))
result.append(Int(median))
result.append(Int(medianFunc(numbers: UpperHalf)))
return result
}
//quartiles(numbers: [3 ,7, 8, 5, 12, 14, 21, 13, 18])
//quartiles(numbers: [7, 15, 36, 39, 40, 41])
//quartiles(numbers: [3, 7, 8, 5, 12, 14, 21, 15, 18, 14])
//Expected
//7
//13
//15
let stdout = ProcessInfo.processInfo.environment["OUTPUT_PATH"]!
FileManager.default.createFile(atPath: stdout, contents: nil, attributes: nil)
let fileHandle = FileHandle(forWritingAtPath: stdout)!
guard let n = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!)
else { fatalError("Bad input") }
guard let arTemp = readLine() else { fatalError("Bad input") }
let ar: [Int] = arTemp.split(separator: " ").map {
if let arItem = Int($0.trimmingCharacters(in: .whitespacesAndNewlines)) {
return arItem
} else { fatalError("Bad input") }
}
guard ar.count == n else { fatalError("Bad input") }
let resultvalue = quartiles(numbers: ar)
fileHandle.write(String(resultvalue[0]).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)
if(resultvalue[1] != 0){
fileHandle.write(String(resultvalue[1]).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)
}
fileHandle.write(String(resultvalue[2]).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment