aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-07-24 01:04:30 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-07-24 01:04:30 +0100
commitb3a812db0366471dcfdc1acfd55f1743a558dc56 (patch)
treecf01b6a2b23cbf901db7427d19b735e266f06aca
parente2ba1b26b2471a5298a011ef58d785bb2944802d (diff)
downloadperlweeklychallenge-club-b3a812db0366471dcfdc1acfd55f1743a558dc56.tar.gz
perlweeklychallenge-club-b3a812db0366471dcfdc1acfd55f1743a558dc56.tar.bz2
perlweeklychallenge-club-b3a812db0366471dcfdc1acfd55f1743a558dc56.zip
- Added my first Swift solution.
-rw-r--r--challenge-065/mohammad-anwar/swift/ch-1.swift112
1 files changed, 112 insertions, 0 deletions
diff --git a/challenge-065/mohammad-anwar/swift/ch-1.swift b/challenge-065/mohammad-anwar/swift/ch-1.swift
new file mode 100644
index 0000000000..c353776ff9
--- /dev/null
+++ b/challenge-065/mohammad-anwar/swift/ch-1.swift
@@ -0,0 +1,112 @@
+import Foundation
+
+/*
+Perl Weekly Challenge - 065
+
+Task #1: Digits Sum
+
+https://perlweeklychallenge.org/blog/perl-weekly-challenge-065/
+*/
+
+do {
+ let paramCount:Int = Int(CommandLine.argc)
+
+ if paramCount <= 1 {
+ throw ParamError.missingDigitsAndSum
+ }
+ else if paramCount <= 2 {
+ throw ParamError.missingSum
+ }
+
+ let digits:String = String(CommandLine.arguments[1])
+ let sum:String = String(CommandLine.arguments[2])
+
+ let start:Int = try startIndex(d: digits)
+ let stop:Int = try stopIndex(d: digits)
+
+ print(digitsSum(start, stop, sum))
+}
+catch ParamError.missingDigitsAndSum {
+ print("Missing Digits and Sum")
+}
+catch ParamError.missingDigits {
+ print("Missing Digits")
+}
+catch ParamError.missingSum {
+ print("Missing Sum")
+}
+catch let error {
+ print(error)
+}
+
+//
+//
+// Functions
+
+enum ParamError: Error {
+ case missingDigitsAndSum
+ case missingDigits
+ case missingSum
+}
+
+func digitsSum(_ start:Int, _ stop:Int, _ sum:String) -> String {
+
+ var s:String = ""
+ for i in start...stop {
+ let _sum:String = sumDigits(n: String(i))
+ if sum == _sum {
+ if s == "" {
+ s = String(i)
+ }
+ else {
+ s = s + ", " + String(i)
+ }
+ }
+ }
+
+ return s
+}
+
+func startIndex(d digits:String) throws -> Int {
+
+ guard let count:Int = Int(digits) else {
+ throw ParamError.missingDigits
+ }
+
+ var index:String = "1"
+ for _ in 1..<count {
+ index = index + "0"
+ }
+
+ guard let s:Int = Int(index) else { return Int() }
+ return s
+}
+
+func stopIndex(d digits:String) throws -> Int {
+
+ guard let count:Int = Int(digits) else {
+ throw ParamError.missingDigits
+ }
+
+ var index:String = ""
+ for _ in 1...count {
+ index = index + "9"
+ }
+
+ guard let s:Int = Int(index) else { return Int() }
+ return s
+}
+
+func sumDigits(n number:String) -> String {
+
+ let digits = Array(number)
+ var sum:Int = 0
+
+ for i in digits {
+ if let i:Int = Int(String(i)) {
+ sum = sum + i
+ }
+ }
+
+ return String(sum)
+}