f=>{var s="[";for(int i=0;i<n*n-1;)s+=i%-~n<1|i++%~-n<1?i+",":"";return s+n*n+"]";}
इसे ऑनलाइन आज़माएं!
यहां परिवर्तन संख्याओं को खोजने के बीच बदलाव पर आधारित है। 0 पर शुरू होने वाली दो शिफ्ट हैं n-1
और n+1
इसलिए n=5
, यदि , के लिए संख्या n-1
होगी 0,4,8,12,16,20
और n+1
होगी 0,6,12,18,24
। इन्हें मिलाकर 1-इंडेक्सिंग (0-इंडेक्सिंग के बजाय) देता है 1,5,7,9,13,17,19,21,25
। n
बिटवाइस निगेटिव (बिटवाइज सप्लीमेंट ऑपरेशन), जहां ~-n==n-1
और का उपयोग कर से ऑफसेट प्राप्त किया जाता है -~n==n+1
।
पुराना संस्करण
f=>{var s="[";for(int i=0;i<n*n-1;i++)s+=(i/n!=i%n&&n-1-i/n!=i%n?"":i+1+",");return s+$"{n*n}]";}
इसे ऑनलाइन आज़माएं!
यह दृष्टिकोण यह निर्धारित करने के लिए स्तंभ और पंक्ति सूचकांकों का उपयोग करता है कि क्या संख्या विकर्णों पर है। i/n
पंक्ति सूचकांक i%n
देता है , और स्तंभ सूचकांक देता है।
केवल संख्या सरणी वापस करना
यदि केवल संख्या सरणी का निर्माण बाइट लागत की ओर गिना जाता है, तो डेनिस.विरवाइज के सुझाव के आधार पर निम्नलिखित कार्य किए जा सकते हैं (using System.Linq;
अतिरिक्त 18 बाइट्स जोड़ता है) के हैं:
सी # (.NET कोर) , 66 + 18 = 84 बाइट्स
x=>Enumerable.Range(1,x*x).Where(v=>~-v%~-x<1|~-v%-~x<1).ToArray()
इसे ऑनलाइन आज़माएं!