diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-24 01:04:30 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-24 01:04:30 +0100 |
| commit | b3a812db0366471dcfdc1acfd55f1743a558dc56 (patch) | |
| tree | cf01b6a2b23cbf901db7427d19b735e266f06aca | |
| parent | e2ba1b26b2471a5298a011ef58d785bb2944802d (diff) | |
| download | perlweeklychallenge-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.swift | 112 |
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) +} |
