Toán học, 63 55 byte
f=If[#5<1,#+#4,f[#+#2,#3-1,#2,#5-1,#2-1-#4]]&;g=1~f~##&
Điều này xác định một chức năng gcó thể được gọi là như
g[5, 5, 1, 3]
Tôi đang sử dụng một phương pháp đệ quy. Nó sử dụng tối đa 2 lần lặp (N + M) , tùy thuộc vào mức độ kết quả của vòng xoắn được tìm thấy. Nó xử lý tất cả các đầu vào (tối đa g[10^6,10^6,5^5-1,5^5], yêu cầu nhiều lần lặp nhất) trong vòng vài giây, nhưng đối với các đầu vào lớn hơn, bạn sẽ cần tăng giới hạn lặp mặc định như
$IterationLimit = 10000000;
Về cơ bản, nếu klà số bắt đầu của hình xoắn ốc, tôi sẽ kiểm tra xem jchỉ mục có 0trong trường hợp nào tôi có thể quay lại không k + i. Mặt khác, tôi vứt bỏ hàng trên cùng, xoay vòng xoắn 90 độ (ngược chiều kim đồng hồ), tăng dần cho kphù hợp và thay vào đó nhìn vào hình xoắn ốc còn lại. Chúng ta có thể di chuyển đến vòng xoắn tiếp theo với ánh xạ các tham số sau:
- k n + 1 = k n + m n
- M n + 1 = N n - 1
- N n + 1 = M n
- i n + 1 = j n - 1
- j n + 1 = n m - i n - 1
Điều này giả định rằng M là chiều rộng và N là chiều cao.