Prime triangle: Difference between revisions

Swift - performance improvement
m (→‎{{header|J}}: trying to give credit has become a blurry issue)
(Swift - performance improvement)
Line 1,033:
}
 
func primeTriangleRow(_ a: inout ArraySlice<[Int], start: Int, length: Int>) -> Bool {
letif startlength == 2 a.startIndex{
let end = a.endIndex
if a.count == 2 {
return isPrime(a[start] + a[start + 1])
}
for i in start +stride(from: 1..<end, to: length - 1, by: 2) {
iflet index = isPrime(a[start] + a[i]) {
if isPrime(a.swapAt(i, [start] + 1a[index]) {
ifa.swapAt(index, primeTriangleRow(&a[start + 1..<end]) {
if primeTriangleRow(&a, start: start + 1, length: length - 1) {
return true
}
a.swapAt(iindex, start + 1)
}
}
Line 1,051 ⟶ 1,050:
}
 
func primeTriangleCount(_ a: inout ArraySlice<[Int], start: Int, length: Int>) -> Int {
let start = a.startIndex
let end = a.endIndex
var count = 0
if a.countlength == 2 {
if isPrime(a[start] + a[start + 1]) {
count += 1
}
} else {
for i in start +stride(from: 1..<end, to: length - 1, by: 2) {
iflet index = isPrime(a[start] + a[i]) {
if isPrime(a.swapAt(i, [start] + 1a[index]) {
counta.swapAt(index, += primeTriangleCount(&a[start + 1..<end])
a.swapAtcount += primeTriangleCount(i&a, start: start + 1, length: length - 1)
a.swapAt(index, start + 1)
}
}
Line 1,081 ⟶ 1,079:
print()
}
 
let startTime = CFAbsoluteTimeGetCurrent()
 
for n in 2...20 {
var a = Array(1...n)
if primeTriangleRow(&a[...], start: 0, length: n) {
printRow(a)
}
Line 1,095:
print(" ", terminator: "")
}
print("\(primeTriangleCount(&a[...], start: 0, length: n))", terminator: "")
}
print()</lang>
 
let endTime = CFAbsoluteTimeGetCurrent()
print("\nElapsed time: \(endTime - startTime) seconds")</lang>
 
{{out}}
Line 1,122 ⟶ 1,125:
 
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162
 
Elapsed time: 1.0268970727920532 seconds
</pre>
 
1,777

edits