Created
February 20, 2019 10:15
-
-
Save mickspecial/8ff4eb7cab81e6d90057ef6a934112e8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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