MATL , 15 byte
X>ttq*QwoEqGd*+
Hãy thử trực tuyến!
Thu thập và in dưới dạng ma trận
Làm sao?
Chỉnh sửa: Kỹ thuật tương tự như câu trả lời của @ Doorknob, chỉ đến khác nhau.
Sự khác biệt giữa các phần tử đường chéo của hình xoắn ốc là dãy số học . Tổng điều khoản này là (theo công thức AP thông thường). Tổng này, tăng thêm 1, cho phần tử đường chéo ở vị trí .n n ( n - 1 ) ( n , n )0 , 2 , 4 , 6 , 8 , Hoàinn ( n - 1 )( n , n )
Cho , chúng ta tìm thấy cực đại của hai số này, đó là "lớp" của hình xoắn ốc mà điểm này thuộc về. Sau đó, chúng tôi tìm giá trị đường chéo của lớp đó là . Đối với các lớp chẵn, giá trị tại sau đó là , đối với các lớp lẻ .v = n ( n - 1 ) + 1 ( x , y ) v + x - y v - x + y( x , y)v = n ( n - 1 ) + 1( x , y)v + x - yv - x + y
X> % Get the maximum of the input coordinates, say n
ttq* % Duplicate that and multiply by n-1
Q % Add 1 to that. This is the diagonal value v at layer n
wo % Bring the original n on top and check if it's odd (1 or 0)
Eq % Change 1 or 0 to 1 or -1
Gd % Push input (x, y) again, get y - x
* % Multiply by 1 or -1
% For odd layers, no change. For even layers, y-x becomes x-y
+ % Add that to the diagonal value v
% Implicit output
Giải pháp thay thế 21 byte:
Pdt|Gs+ttqq*4/QJb^b*+
Hãy thử trực tuyến!
Thu thập và in dưới dạng ma trận
Từ trên, chúng ta biết rằng hàm chúng ta muốn là
f= m ∗ ( m - 1 ) + 1 + ( - 1 )m∗ ( x - y)
trong đó .m = m a x ( x , y)
Một số tính toán cơ bản sẽ chỉ ra rằng một biểu thức cho tối đa hai số là
m = m a x ( x , y) = x + y+ a b s ( x - y)2
Cắm cái này vào cái khác, chúng ta thấy rằng một dạng thay thế cho là:f
f= ( x - y) ⋅ ik+ 14( ( k - 2 ) ⋅ k ) + 1
trong đó .k = a b s ( x - y) + x + y
Đây là chức năng mà giải pháp thực hiện.