Skip to content

Commit aeaa72a

Browse files
committed
Updated syntax to Swift 3
1 parent b6c05be commit aeaa72a

File tree

2 files changed

+33
-18
lines changed

2 files changed

+33
-18
lines changed

Karatsuba Multiplication/KaratsubaMultiplication.playground/Contents.swift

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,23 @@
22

33
import Foundation
44

5-
infix operator ^^ { associativity left precedence 160 }
5+
precedencegroup ExponentiativePrecedence {
6+
higherThan: MultiplicationPrecedence
7+
lowerThan: BitwiseShiftPrecedence
8+
associativity: left
9+
}
10+
11+
infix operator ^^: ExponentiativePrecedence
612
func ^^ (radix: Int, power: Int) -> Int {
713
return Int(pow(Double(radix), Double(power)))
814
}
915

1016
// Long Multiplication - O(n^2)
11-
func multiply(num1: Int, _ num2: Int, base: Int = 10) -> Int {
12-
let num1Array = String(num1).characters.reverse().map{ Int(String($0))! }
13-
let num2Array = String(num2).characters.reverse().map{ Int(String($0))! }
17+
func multiply(_ num1: Int, by num2: Int, base: Int = 10) -> Int {
18+
let num1Array = String(num1).characters.reversed().map{ Int(String($0))! }
19+
let num2Array = String(num2).characters.reversed().map{ Int(String($0))! }
1420

15-
var product = Array(count: num1Array.count + num2Array.count, repeatedValue: 0)
21+
var product = Array(repeating: 0, count: num1Array.count + num2Array.count)
1622

1723
for i in num1Array.indices {
1824
var carry = 0
@@ -24,16 +30,16 @@ func multiply(num1: Int, _ num2: Int, base: Int = 10) -> Int {
2430
product[i + num2Array.count] += carry
2531
}
2632

27-
return Int(product.reverse().map{ String($0) }.reduce("", combine: +))!
33+
return Int(product.reversed().map{ String($0) }.reduce("", +))!
2834
}
2935

3036
// Karatsuba Multiplication - O(nlogn)
31-
func karatsuba(num1: Int, _ num2: Int) -> Int {
37+
func karatsuba(_ num1: Int, by num2: Int) -> Int {
3238
let num1Array = String(num1).characters
3339
let num2Array = String(num2).characters
3440

3541
guard num1Array.count > 1 && num2Array.count > 1 else {
36-
return multiply(num1, num2)
42+
return multiply(num1, by: num2)
3743
}
3844

3945
let n = max(num1Array.count, num2Array.count)
@@ -44,14 +50,12 @@ func karatsuba(num1: Int, _ num2: Int) -> Int {
4450
let c = num2 / 10^^nBy2
4551
let d = num2 % 10^^nBy2
4652

47-
let ac = karatsuba(a, c)
48-
let bd = karatsuba(b, d)
49-
let adPluscd = karatsuba(a+b, c+d) - ac - bd
53+
let ac = karatsuba(a, by: c)
54+
let bd = karatsuba(b, by: d)
55+
let adPluscd = karatsuba(a+b, by: c+d) - ac - bd
5056

5157
let product = ac * 10^^(2 * nBy2) + adPluscd * 10^^nBy2 + bd
5258

5359
return product
5460
}
5561

56-
print(multiply(236742342, 1231234224))
57-
print(karatsuba(236742342, 1231234224))

Karatsuba Multiplication/KaratsubaMultiplication.swift

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,18 @@
88

99
import Foundation
1010

11-
func karatsuba(num1: Int, _ num2: Int) -> Int {
11+
precedencegroup ExponentiativePrecedence {
12+
higherThan: MultiplicationPrecedence
13+
lowerThan: BitwiseShiftPrecedence
14+
associativity: left
15+
}
16+
17+
infix operator ^^: ExponentiativePrecedence
18+
func ^^ (radix: Int, power: Int) -> Int {
19+
return Int(pow(Double(radix), Double(power)))
20+
}
21+
22+
func karatsuba(_ num1: Int, by num2: Int) -> Int {
1223
let num1Array = String(num1).characters
1324
let num2Array = String(num2).characters
1425

@@ -24,11 +35,11 @@ func karatsuba(num1: Int, _ num2: Int) -> Int {
2435
let c = num2 / 10^^nBy2
2536
let d = num2 % 10^^nBy2
2637

27-
let ac = karatsuba(a, c)
28-
let bd = karatsuba(b, d)
29-
let adPluscd = karatsuba(a+b, c+d) - ac - bd
38+
let ac = karatsuba(a, by: c)
39+
let bd = karatsuba(b, by: d)
40+
let adPluscd = karatsuba(a+b, by: c+d) - ac - bd
3041

3142
let product = ac * 10^^(2 * nBy2) + adPluscd * 10^^nBy2 + bd
3243

3344
return product
34-
}
45+
}

0 commit comments

Comments
 (0)