Skip to content

Commit 86d6cd1

Browse files
committed
[Swift 4.2] Update Karatsuba multiplication
Changed the way the characters in a String were accessed since `characters` was deprecated on Swift 4.0. Removed the code snippet at the beggining of the file.
1 parent f08d5fc commit 86d6cd1

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

Karatsuba Multiplication/KaratsubaMultiplication.playground/Contents.swift

+7-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
//: Playground - noun: a place where people can play
22

33
import Foundation
4-
// last checked with Xcode 9.0b4
5-
#if swift(>=4.0)
6-
print("Hello, Swift 4")
7-
#endif
4+
85
precedencegroup ExponentiativePrecedence {
96
higherThan: MultiplicationPrecedence
107
lowerThan: BitwiseShiftPrecedence
@@ -18,8 +15,8 @@ func ^^ (radix: Int, power: Int) -> Int {
1815

1916
// Long Multiplication - O(n^2)
2017
func multiply(_ num1: Int, by num2: Int, base: Int = 10) -> Int {
21-
let num1Array = String(num1).characters.reversed().map { Int(String($0))! }
22-
let num2Array = String(num2).characters.reversed().map { Int(String($0))! }
18+
let num1Array = String(num1).reversed().map { Int(String($0))! }
19+
let num2Array = String(num2).reversed().map { Int(String($0))! }
2320

2421
var product = Array(repeating: 0, count: num1Array.count + num2Array.count)
2522

@@ -38,14 +35,14 @@ func multiply(_ num1: Int, by num2: Int, base: Int = 10) -> Int {
3835

3936
// Karatsuba Multiplication - O(n^log2(3))
4037
func karatsuba(_ num1: Int, by num2: Int) -> Int {
41-
let num1Array = String(num1).characters
42-
let num2Array = String(num2).characters
38+
let num1String = String(num1)
39+
let num2String = String(num2)
4340

44-
guard num1Array.count > 1 && num2Array.count > 1 else {
41+
guard num1String.count > 1 && num2String.count > 1 else {
4542
return multiply(num1, by: num2)
4643
}
4744

48-
let n = max(num1Array.count, num2Array.count)
45+
let n = max(num1String.count, num2String.count)
4946
let nBy2 = n / 2
5047

5148
let a = num1 / 10^^nBy2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>IDEDidComputeMac32BitWarning</key>
6+
<true/>
7+
</dict>
8+
</plist>

Karatsuba Multiplication/KaratsubaMultiplication.swift

+6-6
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ func ^^ (radix: Int, power: Int) -> Int {
2020
}
2121

2222
func karatsuba(_ num1: Int, by num2: Int) -> Int {
23-
let num1Array = String(num1).characters
24-
let num2Array = String(num2).characters
23+
let num1String = String(num1)
24+
let num2String = String(num2)
2525

26-
guard num1Array.count > 1 && num2Array.count > 1 else {
27-
return num1 * num2
26+
guard num1String.count > 1 && num2String.count > 1 else {
27+
return multiply(num1, by: num2)
2828
}
29-
30-
let n = max(num1Array.count, num2Array.count)
29+
30+
let n = max(num1String.count, num2String.count)
3131
let nBy2 = n / 2
3232

3333
let a = num1 / 10^^nBy2

0 commit comments

Comments
 (0)