aboutsummaryrefslogtreecommitdiff
path: root/challenge-135
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-10-23 17:21:02 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-10-23 17:21:02 +0100
commite6c61d7c1761ced89b08a50864e101a9a93ff920 (patch)
treeee7606ce2b934d584e547ae0a855079320f911cc /challenge-135
parentf703c720100d16f8eda1c1092b1688bf3d8224ac (diff)
downloadperlweeklychallenge-club-e6c61d7c1761ced89b08a50864e101a9a93ff920.tar.gz
perlweeklychallenge-club-e6c61d7c1761ced89b08a50864e101a9a93ff920.tar.bz2
perlweeklychallenge-club-e6c61d7c1761ced89b08a50864e101a9a93ff920.zip
- Added Swift solution to "Middle 3-digits" task of week 135.
Diffstat (limited to 'challenge-135')
-rw-r--r--challenge-135/mohammad-anwar/swift/ch-1.swift93
1 files changed, 93 insertions, 0 deletions
diff --git a/challenge-135/mohammad-anwar/swift/ch-1.swift b/challenge-135/mohammad-anwar/swift/ch-1.swift
new file mode 100644
index 0000000000..68dfff4b88
--- /dev/null
+++ b/challenge-135/mohammad-anwar/swift/ch-1.swift
@@ -0,0 +1,93 @@
+import Foundation
+
+/*
+
+Week 135:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-135
+
+Task #1: Middle 3-digits
+
+ You are given an integer.
+
+ Write a script find out the middle 3-digits of the given integer, if possible otherwise throw sensible error.
+
+*/
+
+enum ParamError: Error {
+ case missingNum
+ case invalidNum
+ case tooShort
+ case evenNumberOfDigits
+}
+
+do {
+ let paramCount:Int = Int(CommandLine.argc)
+
+ if paramCount <= 1 {
+ throw ParamError.missingNum
+ }
+
+ let num:String = CommandLine.arguments[1]
+
+ if isValid(num) {
+
+ let n:Int = abs(Int(num)!)
+ let s:String = String(n)
+ let l:Int = s.count
+
+ if l == 1 {
+ throw ParamError.tooShort
+ }
+
+ if l % 2 == 0 {
+ throw ParamError.evenNumberOfDigits
+ }
+
+ let i:Int = (l / 2) - 1
+ let str:String = String(n)
+
+ let start = str.index(str.startIndex, offsetBy: i)
+ let end = str.index(str.endIndex, offsetBy: 3 - (str.count-i))
+ let range = start..<end
+
+ print(str[range])
+
+ }
+ else {
+ throw ParamError.invalidNum
+ }
+}
+catch ParamError.missingNum {
+ print("Missing number.")
+}
+catch ParamError.invalidNum {
+ print("Invalid number.")
+}
+catch ParamError.tooShort {
+ print("Too short.")
+}
+catch ParamError.evenNumberOfDigits {
+ print("Even number of digits.")
+}
+catch let error {
+ print(error)
+}
+
+//
+//
+// Function
+
+func isValid(_ num:String) -> Bool {
+
+ let pattern = "^\\-?\\d+$"
+ let regex = try! NSRegularExpression(pattern: pattern)
+ let range = NSRange(location: 0, length: num.utf16.count)
+
+ if regex.firstMatch(in: num, options: [], range: range) != nil {
+ return true
+ }
+ else {
+ return false
+ }
+}