extension Array where Element: Comparable {
func sortedIndex() -> [Int] {
//enumerated().map {($1, $0)}.sorted(by: <).map {$1}
return enumerated().map {($1, $0)}.sorted(by: <).map {$1}
}
}
func f<T: Comparable>(_ a: [T]) -> [Int] {
//a.sortedIndex().sortedIndex()
return a.sortedIndex().sortedIndex()
}
func g<T: Comparable>(_ a: [T]) {
print(f(a));
}
g([1,100,10,10000,1000])
g([3,1,4,1,5,9,2])
g([0,1,0,1,0,1,0,1])
g(["A","C","B","E","D"])
ZXh0ZW5zaW9uIEFycmF5IHdoZXJlIEVsZW1lbnQ6IENvbXBhcmFibGUgewogICAgZnVuYyBzb3J0ZWRJbmRleCgpIC0+IFtJbnRdIHsKICAgICAgICAvL2VudW1lcmF0ZWQoKS5tYXAgeygkMSwgJDApfS5zb3J0ZWQoYnk6IDwpLm1hcCB7JDF9CiAgICAgICAgcmV0dXJuIGVudW1lcmF0ZWQoKS5tYXAgeygkMSwgJDApfS5zb3J0ZWQoYnk6IDwpLm1hcCB7JDF9CiAgICB9Cn0KZnVuYyBmPFQ6IENvbXBhcmFibGU+KF8gYTogW1RdKSAtPiBbSW50XSB7CiAgICAvL2Euc29ydGVkSW5kZXgoKS5zb3J0ZWRJbmRleCgpCiAgICByZXR1cm4gYS5zb3J0ZWRJbmRleCgpLnNvcnRlZEluZGV4KCkKfQpmdW5jIGc8VDogQ29tcGFyYWJsZT4oXyBhOiBbVF0pIHsKICAgIHByaW50KGYoYSkpOwp9CmcoWzEsMTAwLDEwLDEwMDAwLDEwMDBdKQpnKFszLDEsNCwxLDUsOSwyXSkKZyhbMCwxLDAsMSwwLDEsMCwxXSkKZyhbIkEiLCJDIiwiQiIsIkUiLCJEIl0pCg==
[0, 2, 1, 4, 3]
[3, 0, 4, 1, 5, 6, 2]
[0, 4, 1, 5, 2, 6, 3, 7]
[0, 2, 1, 4, 3]