Skip to content

Instantly share code, notes, and snippets.

@ankit92ios
Created April 3, 2019 09:57
Show Gist options
  • Save ankit92ios/4e938da68715bb415128540e60a9acf5 to your computer and use it in GitHub Desktop.
Save ankit92ios/4e938da68715bb415128540e60a9acf5 to your computer and use it in GitHub Desktop.
/Day 1: Interquartile Range
import Foundation
//Day 1: Interquartile Range
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]) -> Double {
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])
}
if(sortedNumbers.count % 2 == 0){
midIndex = midIndex - 1
}
var UpperHalf = [Int]()
for i in (midIndex+1)..<sortedNumbers.count {
UpperHalf.append(sortedNumbers[i])
}
// print(sortedNumbers)
// print(UpperHalf)
return medianFunc(numbers: UpperHalf) - medianFunc(numbers: lowerHalf)
}
func interQuartiles(numbers: [Int], freq : [Int]) -> Double {
var arr : [Int] = [Int]()
for i in 0..<numbers.count
{
for _ in 0..<freq[i]{
arr.append(numbers[i])
}
}
return quartiles(numbers: arr)
}
//interQuartiles(numbers: [6, 12, 8, 10, 20, 16], freq: [5, 4, 3, 2, 1 ,5])
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 let arTemp2 = readLine() else { fatalError("Bad input") }
let ar2: [Int] = arTemp2.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 = interQuartiles(numbers: ar, freq: ar2)
fileHandle.write(String(resultvalue).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