diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-15 23:35:59 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-15 23:35:59 +0100 |
| commit | e6e0d55c682c04f3522971870e82dd7a19add027 (patch) | |
| tree | 1a06dcb2637fe90ed41c22ecfbec071d25b4dd8e | |
| parent | 1ff01550868251c8fb7bc0f3729d8c47bc8a375f (diff) | |
| download | perlweeklychallenge-club-e6e0d55c682c04f3522971870e82dd7a19add027.tar.gz perlweeklychallenge-club-e6e0d55c682c04f3522971870e82dd7a19add027.tar.bz2 perlweeklychallenge-club-e6e0d55c682c04f3522971870e82dd7a19add027.zip | |
- Added Swift solution to the "Leader Element" task.
| -rwxr-xr-x | challenge-078/mohammad-anwar/swift/ch-1.swift | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/challenge-078/mohammad-anwar/swift/ch-1.swift b/challenge-078/mohammad-anwar/swift/ch-1.swift new file mode 100755 index 0000000000..31e817c050 --- /dev/null +++ b/challenge-078/mohammad-anwar/swift/ch-1.swift @@ -0,0 +1,85 @@ +import Foundation + +/* + +Perl Weekly Challenge - 078 + +Task #1: Leader Element + +https://perlweeklychallenge.org/blog/perl-weekly-challenge-078 + +*/ + +enum ParamError: Error { + case missingList + case invalidList +} + +do { + let paramCount:Int = Int(CommandLine.argc) + + if paramCount <= 1 { + throw ParamError.missingList + } + + let list:String = CommandLine.arguments[1] + if isValidList(list) { + let array = list.components(separatedBy: ", ") + + var index:Int = 0; + var leaderElements = [Int](); + while index < array.count - 1 { + let max:Int = findMax(array, index + 1) + let current:Int = Int(array[index])! + + if current > max { + leaderElements.append(current) + } + index += 1 + } + leaderElements.append(Int(array[index])!) + + print(array) + print(leaderElements) + } + else { + throw ParamError.invalidList + } +} +catch ParamError.missingList { + print("Missing list.") +} +catch ParamError.invalidList { + print("Invalid list.") +} +catch let error { + print(error) +} + +// +// +// Functions + +func isValidList(_ list:String) -> Bool { + + let pattern = "^[\\-?\\d\\,?\\s?]+$" + let regex = try! NSRegularExpression(pattern: pattern) + let range = NSRange(location: 0, length: list.utf16.count) + + if regex.firstMatch(in: list, options: [], range: range) != nil { + return true + } + else { + return false + } +} + +func findMax(_ array: [String], _ start:Int) -> Int { + + var window = [Int]() + for i in start...array.count-1 { + window.append(Int(array[i])!) + } + + return window.max()! +} |
