MATL , 15 बाइट्स
X>ttq*QwoEqGd*+
इसे ऑनलाइन आज़माएं!
मैट्रिक्स के रूप में इकट्ठा करें और प्रिंट करें
कैसे?
संपादित करें: @ Doorknob के उत्तर के रूप में एक ही तकनीक, बस अलग तरीके से पहुंचे।
सर्पिल के विकर्ण तत्वों के बीच का अंतर अंकगणितीय अनुक्रम । इस के शब्दों का योग (सामान्य AP सूत्र द्वारा)। यह योग 1 से बढ़ा हुआ, विकर्ण तत्व को स्थिति ।0,2,4,6,8,…nn(n−1)(n,n)
यह देखते हुए , हम इन दोनों की अधिकतम खोज करते हैं, जो इस बिंदु से संबंधित सर्पिल की "परत" है। फिर, हम उस परत के विकर्ण मान को रूप में पाते हैं । समान परतों के लिए, विषम परतों लिए मान तब ।(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
वैकल्पिक 21 बाइट समाधान:
Pdt|Gs+ttqq*4/QJb^b*+
इसे ऑनलाइन आज़माएं!
मैट्रिक्स के रूप में इकट्ठा करें और प्रिंट
करें ऊपर से, हम जानते हैं कि हम जो फ़ंक्शन चाहते हैं वह है
f=m∗(m−1)+1+(−1)m∗(x−y)
जहाँ ।m=max(x,y)
कुछ बुनियादी गणना से पता चलेगा कि अधिकतम दो संख्याओं के लिए एक अभिव्यक्ति है
m=max(x,y)=x+y+abs(x−y)2
एक को दूसरे में प्लग करते हुए, हम पाते हैं कि लिए एक वैकल्पिक रूप है:f
f=(x−y)⋅ik+14((k−2)⋅k)+1
जहाँ ।k=abs(x−y)+x+y
यह फंक्शन सॉल्यूशन इम्प्लीमेंट है।