package main
import (
"fmt"
"sort"
"strconv"
"strings"
)
type byResultingIntValue []string
func (s byResultingIntValue) Len() int {
return len(s)
}
func (s byResultingIntValue) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func (s byResultingIntValue) Less(i, j int) bool {
cmpInt1, _ := strconv.Atoi(s[i] + s[j])
cmpInt2, _ := strconv.Atoi(s[j] + s[i])
return cmpInt1 > cmpInt2
}
func getMaxInteger(nums []string) string {
sort.Sort(byResultingIntValue(nums))
return strings.Join(nums, "")
}
func getMinInteger(nums []string) string {
sort.Sort(sort.Reverse(byResultingIntValue(nums)))
return strings.Join(nums, "")
}
func main() {
nums := strings.Split("79 82 34 83 69", " ")
fmt.Printf("Max: %v\n", getMaxInteger(nums))
fmt.Printf("Min: %v\n", getMinInteger(nums))
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAoJImZtdCIKCSJzb3J0IgoJInN0cmNvbnYiCgkic3RyaW5ncyIKKQoKdHlwZSBieVJlc3VsdGluZ0ludFZhbHVlIFtdc3RyaW5nCgpmdW5jIChzIGJ5UmVzdWx0aW5nSW50VmFsdWUpIExlbigpIGludCB7CglyZXR1cm4gbGVuKHMpCn0KCmZ1bmMgKHMgYnlSZXN1bHRpbmdJbnRWYWx1ZSkgU3dhcChpLCBqIGludCkgewoJc1tpXSwgc1tqXSA9IHNbal0sIHNbaV0KfQoKZnVuYyAocyBieVJlc3VsdGluZ0ludFZhbHVlKSBMZXNzKGksIGogaW50KSBib29sIHsKCWNtcEludDEsIF8gOj0gc3RyY29udi5BdG9pKHNbaV0gKyBzW2pdKQoJY21wSW50MiwgXyA6PSBzdHJjb252LkF0b2koc1tqXSArIHNbaV0pCglyZXR1cm4gY21wSW50MSA+IGNtcEludDIKfQoKZnVuYyBnZXRNYXhJbnRlZ2VyKG51bXMgW11zdHJpbmcpIHN0cmluZyB7Cglzb3J0LlNvcnQoYnlSZXN1bHRpbmdJbnRWYWx1ZShudW1zKSkKCXJldHVybiBzdHJpbmdzLkpvaW4obnVtcywgIiIpCn0KCmZ1bmMgZ2V0TWluSW50ZWdlcihudW1zIFtdc3RyaW5nKSBzdHJpbmcgewoJc29ydC5Tb3J0KHNvcnQuUmV2ZXJzZShieVJlc3VsdGluZ0ludFZhbHVlKG51bXMpKSkKCXJldHVybiBzdHJpbmdzLkpvaW4obnVtcywgIiIpCn0KCmZ1bmMgbWFpbigpIHsKCW51bXMgOj0gc3RyaW5ncy5TcGxpdCgiNzkgODIgMzQgODMgNjkiLCAiICIpCglmbXQuUHJpbnRmKCJNYXg6ICV2XG4iLCBnZXRNYXhJbnRlZ2VyKG51bXMpKQoJZm10LlByaW50ZigiTWluOiAldlxuIiwgZ2V0TWluSW50ZWdlcihudW1zKSkKfQ==