आरोही मैट्रिक्स


17

"आरोही मैट्रिक्स" पूरी संख्याओं (0 शामिल) का एक अनंत मैट्रिक्स है जिसमें कोई भी तत्व सबसे छोटा उपलब्ध तत्व है जो पहले संबंधित पंक्ति और स्तंभ पर उपयोग नहीं किया गया है:

  | 1 2 3 4 5 6 ...
--+----------------
1 | 0 1 2 3 4 5 ...
2 | 1 0 3 2 5 4 ...
3 | 2 3 0 1 6 7 ...
4 | 3 2 1 0 7 6 ...
5 | 4 5 6 7 0 1 ...
6 | 5 4 7 6 1 0 ...
. | ...............

आपका कार्य एक प्रोग्राम लिखना है जो इनपुट द्वारा निर्दिष्ट पंक्ति और स्तंभ में पाए गए तत्व को आउटपुट करेगा। (मानक इनपुट और आउटपुट)

परीक्षण के मामलों:

5 3 -> 6
2 5 -> 5

कोड गोल्फ नियम लागू होता है - सबसे छोटा कोड जीतता है।

PS भले ही इसमें एक एल्गोरिथम प्रकृति हो, कोड बहुत, बहुत संक्षिप्त हो सकता है ।

संपादित करें: मैं इतनी जल्दी xor समाधान देखने की उम्मीद नहीं कर रहा था। मैं वास्तव में एक एल्गोरिथम दृष्टिकोण के साथ 10 पोस्ट देखने की उम्मीद कर रहा था और एक्सईएन समाधान। अब, यह ध्यान में रखते हुए कि यह देखने के लिए बहुत मज़ेदार नहीं है कि अलग-अलग भाषाओं में एक्सर कैसे लिखें, मैं आपको सलाह देता हूं कि आप एक एल्गोरिथम दृष्टिकोण भी आज़माएं।

तो, हाँ, मुझे लगता है कि अब कोई भी 5 चरित्र के निशान को नहीं हरा सकता है - इसलिए मैं इल्मरी करोनन को सबसे चतुर और सबसे कम समाधान के लिए बधाई देता हूं। लेकिन आगे एक नई चुनौती है: सबसे छोटा एल्गोरिदम समाधान लिखें


5
Xor एल्गोरिथम है।
पीटर टेलर

जवाबों:


10

GolfScript, 5 वर्ण

~(\(^

दरअसल, पैटर्न को पहचानने के बाद यह कार्य बहुत सरल है। केवल अजीब बिट 1-आधारित अनुक्रमण है - यदि इनपुट सूचकांक शून्य-आधारित थे, तो यह 2-वर्ण समाधान का परिणाम होगा:

~^

गोल्फस्क्रिप्ट के साथ अपरिचित पाठकों को यह समझाने के लिए, ~कमांड इनपुट को निकालता है , जिससे स्टैक पर दो नंबर निकल जाते हैं। ^तब XOR एक साथ स्टैक पर दो सबसे ऊपर की संख्या को आउटपुट के लिए छोड़ देता है। 1-आधारित इनपुट से निपटने के लिए, दो और आदेशों की आवश्यकता होती है: (स्टैक पर एक के बाद एक शीर्ष नंबर को घटाता है, जबकि \स्टैक पर शीर्ष दो वस्तुओं को स्वैप करता है।


1
आप कृपया समझा सकते हैं ^? मैंने गोल्फस्क्रिप्ट बिल्ट-इन पेज और सिमेट्रिक अंतर का उल्लेख किया है ; सरणियों के दो सेट के साथ इस ऑपरेशन का उपयोग करना समझ में आता है, लेकिन मुझे समझ में नहीं आता है कि यह सिर्फ दो अलग-अलग संख्याओं के लिए कैसे काम करता है।
रोब

1
@ माइक: जब संख्याओं पर लागू किया जाता है, तो ^ऑपरेटर अपना बिटवाइज़ XOR लौटा देता है ।
इल्मरी करोनें

यह बहुत अच्छा रिश्ता है :)
beary605

1
आप मेरी प्रतिक्रिया के अपने आकलन में सही थे, जिसे मैंने चुनौती के गलत प्रसार के आधार पर हटा दिया है।
डेविडऑक्ट

2

गणितज्ञ १० ४४

संपादित करें

मेरी पहली प्रतिक्रिया चुनौती की प्रकृति के बारे में गलतफहमी पर आधारित थी, जैसा कि इल्मरी ने नोट किया था। यहाँ एक और कोशिश है।

प्रयोग

f[n___, 1, n___] := n - 1;
j_~f~k_ := BitXor[j - 1, k - 1]

@ इल्मारिकारोन मुझे लगता है कि मुझे इस बार यह सही लगा। लेकिन यह आपके समाधान के आकार के करीब भी नहीं आता है।
डेविड

2

के, ३१

{0b/:{(x|y)&~x~y}. 0b\:'-1+x,y}

इल्मरी करोनन के एक्सओआर लॉजिक को चुरा लिया, जो मैंने खुद कभी नहीं देखा था।


2

PHP, 38

इल्मरी करोनन के XOR का एक साधारण कार्यान्वयन

<?php echo --$_GET['a']^--$_GET['b']?>

उपयोग:

... / xor.php? एक = 4 एंड बी = 7

6 छपेगा


2

हास्केल 174

मुझे लगा कि मैं एक ऐसा समाधान करूँगा जो XOR पर निर्भर नहीं था। यह ठीक से गोल्फ के लिए आलसी।

a 0 0=0
a b c
 |m==n=a(b-m)(c-n)
 |m>n=m+a(b-m)c
 |m<n=n+a b(c-n)
 where{g f=until(>f)(*2)1`div`2;m=g b;n=g c;}
main=do
 [x,y]<-fmap(map read.words)getLine
 print$a(x-1)(y-1)

संपादित करें: मुझे एक दिन बाद पता चला कि यह सिर्फ XOR की गणना कर रहा है। इस प्रकार यदि यह एक एल्गोरिथम समाधान के रूप में गिना जाता है, तो इल्मरी करोनन को चाहिए।


2
यह ठीक से गोल्फ के लिए आलसी। - कृपया इसके लिए एक गंभीर दावेदार होने के लिए अपना सबमिशन गोल्फ करें।
जोनाथन फ्रीच

2

अजगर 2, 36

मैं समझती हूं कि मैं सिर्फ पायथन सीखना शुरू कर रही हूं कि यह सही समय होगा कि मैं इसका उपयोग करके अपना पहला उत्तर प्रस्तुत करूं (और किसी ने भी पायथन का उपयोग करके उत्तर नहीं दिया है) और शायद मुझे कुछ प्रतिक्रिया मिल सके।

बहुत ही शानदार शॉर्टकट के लिए @IlmariKaronen आपको धन्यवाद।

नीचे दिए गए कोड के लिए @Gareth धन्यवाद।

import sys
print(input()-1^input()-1)

पायथन 3, 56

मूल कार्यक्रम जो मैंने लिखा था।

import sys
x=int(input())
y=int(input())
x-=1
y-=1
print(x^y)

2 और 5 के साथ IDEONE

3 और 3 के साथ IDEONE


मैं पायथन 3 के बजाय आपके पायथन 2 का उपयोग कर रहा हूं - यदि आप इस टिप्पणी को अनदेखा नहीं करते हैं। inputपहले से ही इनपुट का मूल्यांकन करता है इसलिए int()आवश्यक नहीं होना चाहिए। इसके अलावा आप सीधे से एक int मिल रहा है input()आप सीधे दूर कर सकता -1है। आप पूरी तरह से मध्यस्थ चर से छुटकारा पा सकते हैं और इसके लिए सही जा सकते हैं print(input()-1^input()-1)। आयात करना आवश्यक है या नहीं - इस साइट पर अन्य पायथन उपयोगकर्ता इसे उन कार्यक्रमों के लिए शामिल नहीं करते हैं जो उपयोग करते हैं input(), लेकिन मैं अजगर प्रोग्रामर नहीं हूं इसलिए मैं यह नहीं कह सकता कि यह आवश्यक है या नहीं।
गारेथ

@ गैरेथ वास्तव में मैं पायथन 3 का उपयोग कर रहा था, लेकिन मुझे आपका सुझाव पसंद है print(input()-1^input()-1)। सहायता के लिए धनयवाद!
रोब

क्या मैं पूछ सकता हूं कि आप आयात क्यों करते हैं sys?
जोनाथन फ्रेच




हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.