aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-09-15 23:35:59 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-09-15 23:35:59 +0100
commite6e0d55c682c04f3522971870e82dd7a19add027 (patch)
tree1a06dcb2637fe90ed41c22ecfbec071d25b4dd8e
parent1ff01550868251c8fb7bc0f3729d8c47bc8a375f (diff)
downloadperlweeklychallenge-club-e6e0d55c682c04f3522971870e82dd7a19add027.tar.gz
perlweeklychallenge-club-e6e0d55c682c04f3522971870e82dd7a19add027.tar.bz2
perlweeklychallenge-club-e6e0d55c682c04f3522971870e82dd7a19add027.zip
- Added Swift solution to the "Leader Element" task.
-rwxr-xr-xchallenge-078/mohammad-anwar/swift/ch-1.swift85
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()!
+}