Skip to content

Instantly share code, notes, and snippets.

@mickspecial
Created February 20, 2019 10:15
Show Gist options
  • Save mickspecial/8ff4eb7cab81e6d90057ef6a934112e8 to your computer and use it in GitHub Desktop.
Save mickspecial/8ff4eb7cab81e6d90057ef6a934112e8 to your computer and use it in GitHub Desktop.
enum AttendanceType: Int {
case paid, free, reset
}
extension Collection where Element == AttendanceType {
var itemSort: [Int] {
var output = [Int]()
var current = 0
self.reversed().forEach { item in
switch item {
case .free:
output.append(0)
case .paid:
current += 1
output.append(current)
case .reset:
current = 0
output.append(current)
}
}
return output.reversed()
}
}
let basic8: [AttendanceType] = [.free, .free, .reset]
let basic8a = basic8.itemSort
assert(basic8a == [0,0,0])
let basic1: [AttendanceType] = [.paid, .paid, .paid]
let basic1a = basic1.itemSort
assert(basic1a == [3,2,1])
let basic2: [AttendanceType] = [.paid, .free, .paid, .paid, .paid]
let basic2a = basic2.itemSort
assert(basic2a == [4, 0, 3, 2, 1])
let basic3: [AttendanceType] = [.reset, .paid, .free, .paid, .reset, .paid, .paid]
let basic3a = basic3.itemSort
assert(basic3a == [0, 2, 0, 1, 0, 2, 1])
let basic4: [AttendanceType] = [.free, .paid, .free, .reset, .paid, .paid, .paid, .paid]
let basic4a = basic4.itemSort
assert(basic4a == [0, 1, 0, 0, 4, 3, 2, 1])
let basic5: [AttendanceType] = [.free, .paid, .free, .reset, .paid, .paid, .paid, .paid]
let basic5a = basic5.itemSort
assert(basic5a == [0, 1, 0, 0, 4, 3, 2, 1])
let basic6: [AttendanceType] = [.paid, .paid, .reset, .paid, .free, .paid, .reset, .paid, .paid, .paid]
let basic6a = basic6.itemSort
assert(basic6a == [2, 1, 0, 2, 0, 1, 0, 3, 2, 1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment