Udało się. Najnowsza wersja Swift 5.3 jednak dość się różni od Swift 4.2.2 w tym serwisie.
Należało w trzeciej wersji funkcji nwd( _: _: ) zrzutować wbudowaną funkcję
sequence(first: , next: ) operatorem Array<(Int,Int)> na tablicę dwuelementowych krotek,
których elementami są liczby całkowite. Metoda .suffix(1) wyrzuca wszystkie elementy z tablicy poza ostatnim. Metoda .first wyjmuje krotkę z tablicy, wykrzyknik bezwarunkowo rozpakowuje krotkę
a operator .0 ostatecznie wyjmuje pierwszy element ostałej krotki, który jest rozwiązaniem zadania.
Swift = C + Haskell.
/// https://pl.spoj.com/problems/PP0501A/
import Foundation
/// FUNCTION VERSION <1> by tuples
/*
func nwd(_ m: Int, _ n: Int) -> Int {
var (a, b) = (m, n)
while b != 0 {
(a, b) = (b, a % b)
}
return a
}
*/
/// FUNCTION VERSION <2> as recurrency
/*
func nwd(_ a: Int, _ b: Int) -> Int { return b == 0 ? a : nwd(b, a % b) }
*/
/// FUNCTION VERSION <3> as closure ERROR
let nwd :(Int, Int) -> Int = {
Array<(Int,Int)>(
sequence(
first: ($0, $1), next: {
$0.1 != 0 ? ($0.1, $0.0 % $0.1) : nil
}
)
.suffix(1)).first!.0
}
var r = [Int]()
let k = Int(readLine()!)!
for _ in 1...k {
let t = readLine()!.split(separator: " ").map { Int($0)! }
r.append(nwd(t[0], t[1]))
}
(0..<k).forEach { print(r[$0]) }