क्या तुम मेरे बुनकर बनोगे?


14

मैं हाल ही में ' द वीवर ' के माध्यम से खेल रहा हूं और मुझे लगता है कि यह लिए एक दिलचस्प चुनौती प्रस्तुत करता है ।

परिसर:

वीवर्स एक ऐसा गेम है जिसमें आपको 2 दिशाओं से 90 डिग्री अलग से आने वाले कई रिबन दिए जाते हैं और आपका लक्ष्य एक वांछित आउटपुट प्राप्त करने के लिए उन्हें कुछ चौराहों पर स्वैप करना है।

   इस तरह: यह एक स्वैप है: यह नहीं है:

ऐशे हीविनिमयअदला-बदली नहीं

इनपुट:

3 सरणियाँ:

  • शीर्ष रिबन (बाएं से दाएं)
  • बाएँ रिबन (ऊपर से नीचे)
  • चौराहों के निर्देशांक स्वैप करने के लिए

आउटपुट:

2 सरणियाँ:

  • निचला रिबन (बाएं से दाएं)
  • सही रिबन (ऊपर से नीचे)

उदाहरण:

मैं पहले उदाहरण के रूप में उपरोक्त छवि का उपयोग करूंगा:

इनपुट: [r, y, b], [r, y, b], [(0, 1), (2, 1), (2, 2)]

क्या होता है:

   r   y   b
   r   y   b
r r r r•y y y y
   r   r   b
y y y y y y y y
   r   r   b
b b b b•r r•b b
   r   b   r
   r   b   r

जहाँ एक अदला-बदली का प्रतिनिधित्व करता है।

आउटपुट: [r, b, r], [y, y, b]


इनपुट: [a, b, c], [d, e, f], [(0, 0), (2, 1)]

क्या होता है:

   a   b   c
   a   b   c
d d•a a a a a a
   d   b   c
e e e e e e e e
   d   b   c
f f f f•b b b b
   d   f   c
   d   f   c

आउटपुट: [d, f, c], [a, e, b]


इनपुट: [a, b], [a, b, c], [(0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 1)]

क्या होता है:

   a   b
   a   b
a a a a•b b
   a   a
b b•a a•a a
   b   a
c c•b b•a a
   c   b
   c   b

आउटपुट: [c, b], [b, a, a]

टिप्पणियाँ:

  • उदाहरण दिए गए निर्देशांक दिखाते हैं (row, column)जैसे आप उन्हें ले सकते हैं (column, row)
  • शीर्ष पंक्ति और बाएं स्तंभ में एक ही रंग के रिबन हो सकते हैं
  • बोर्ड आयताकार हो सकता है
  • यदि आप 1-अनुक्रमण चुनते हैं तो सभी निर्देशांक गैर-ऋणात्मक ( >=0) या (सख्ती से सकारात्मक >=1) होंगे
  • किसी भी स्वैप को अनदेखा करें जो बोर्ड के बाहर हैं
  • आप अक्षरों ( [a-zA-Z]), पूर्णांक ( [0-9]) या दोनों के साथ काम करना चुन सकते हैं
  • आपके आउटपुट में रिबन इनपुट में बिल्कुल रिबन से मेल खाना चाहिए ( a -> a)
  • आप मान सकते हैं कि स्वैप की सूची किसी भी तरह से आप चाहते हैं, जब तक यह सुसंगत है (यदि आप करते हैं, तो कृपया निर्दिष्ट करें कि इसे कैसे सॉर्ट किया जाना चाहिए)
  • आप 0 या 1-अनुक्रमित के रूप में स्वैप निर्देशांक ले सकते हैं
  • डिफ़ॉल्ट कमियां निषिद्ध हैं

और ज्यादा उदाहरण:

Input:
[b], [r], []
Output:
[b], [r]

Input:
[b], [r], [(0, 0)]
Output:
[r], [b]

Input:
[r, p, y], [r, y, p], [(0, 0), (1, 2), (2, 1), (3, 2)]
Output:
[r, p, y], [r, y, p]

Input:
[b, y, o, r],
[r, o, b, y],
[(0, 0), (2, 0), (3, 2)]
Output:
[b, y, y, r],
[b, o, r, o]

अंतिम उदाहरण इस मामले से संबंधित है (यदि यह कल्पना करना आसान बनाता है):

उदाहरण

यह इसलिए प्रत्येक भाषा की जीत के लिए बाइट्स में सबसे छोटा उत्तर है।


1
" बोर्ड के बाहर लगे किसी भी स्वैप को अनदेखा करें " - क्या इसका मतलब है कि हम यह नहीं मान सकते हैं कि सभी स्वैप निर्देशांक बोर्ड पर हैं, और हमें उन्हें वैधता के लिए फ़िल्टर करने की आवश्यकता है (अमान्य लोगों को अनदेखा करें), या इसका मतलब यह है कि हम अनदेखा कर सकते हैं निर्देशांक का मामला बोर्ड के बाहर होने के कारण इनपुट हमेशा मान्य होगा?
बर्गी

@ बर्गी का अर्थ है कि इनपुट में बोर्ड के बाहर स्वैप शामिल हो सकते हैं और आपको उन्हें फ़िल्टर या अनदेखा करना होगा। (तीसरे उदाहरण में ऐसी अदला-बदली शामिल है)
असोन तुहिद

ओह। मुझे लगता है कि चुनौती अधिक दिलचस्प होती अगर स्वैप में केवल वैध निर्देशांक होते, लेकिन हम यह नहीं मान सकते थे कि वे एक क्रम में क्रमबद्ध थे जो हमारे समाधान को फिट करता है।
बरगी

1
@ बर्गी आप शायद सही हैं, ठीक है, अब बदलने में बहुत देर हो चुकी है। और नहीं, सभी निर्देशांक सकारात्मक होंगे, मैं प्रश्न को अपडेट करूंगा।
आशोन तुहिद

1
@AsoneTuhid यदि कोर्ड्स (पंक्ति, कर्नल) हैं, तो यह पहले बायें रिबन को पहले / दूसरे रिबन को शीर्ष पर और दूसरे को शीर्ष पर रखता है। क्या इसकी अनुमति है?
ngn

जवाबों:


8

पायथन 3 , 74 बाइट्स

def g(a,b,l):
 for x,y in l:
  if x<len(a)and y<len(b):a[x],b[y]=b[y],a[x]

इसे ऑनलाइन आज़माएं!

lलेखकीय क्रम में क्रमबद्ध करने की आवश्यकता है। aऔर bपात्रों की सूची का प्रतिनिधित्व कर रहे हैं (बाईं रिबन, शीर्ष रिबन)।

सूची को संशोधित करके लौटाता है aऔर b


3

जेली , 37 35 30 बाइट्स

ṙ"z0U1¦Zḟ€0ṙ"N}
<Ạ¥ÐfL€}⁹ṭṚç/Y

इसे ऑनलाइन आज़माएं!

डायैडिक प्रोग्राम, लेफ्ट लॉजिक के रूप में स्वैप इंडेक्स की 0-इंडेक्सिंग सूची (रिवर्स लेक्सोग्राफिक ऑर्डर में क्रमबद्ध) और (लेफ्ट रिबन, टॉप रिबन) सही तर्क के रूप में लेते हैं। रिटर्न (सही रिबन, नीचे रिबन)।


जेली एक मौन भाषा है। साथ काम करने के लिए (लगभग) कोई चर नहीं है, इसलिए कुछ भी करने से एक ही बार में दो से अधिक चर शामिल होते हैं।

पहली कड़ी लेता है [l,t], उसके बाएं तर्क के रूप में [x,y]वापसी का अधिकार तर्क के रूप में (0 अनुक्रमण), और [l,t]साथ l[x]और r[y]आदान-प्रदान किया।

आर "z0U1|Zḟ € 0r" N}
ṙ "जिपविथ घुमाएँ। वर्तमान मूल्य:` [l t x, t `y]`
                   (इसलिए l [x] और r [x] क्रमशः l [०] और r [०] हो जाता है)
  z0 ज़िप, भरें 0. इसी (नए) सूचकांकों में तत्व हैं
                   भराव के रूप में 0 के साथ जोड़ा गया।
    U1 U अनुक्रमणिका `1` (प्रथम अनुक्रमणिका) में जोड़ी को उल्टा करें।
       Z € 0 ज़िप फिर से और फ़िल्टर करें `0`, प्रभावी रूप से z0 पूर्ववत करें।
           ṙ "N} नकारात्मक शिफ्ट राशि से जिपविथ घुमाएं,`। "के विपरीत।

तो मूल रूप से " U1¦अंडर ṙ"z0"।


दूसरी कड़ी बस OoB सूचकांकों ( <Ạ¥Ðf L€) को फ़िल्टर करें, दूसरे तर्क ( ⁹ṭ), रिवर्स ( ) को जोड़ें, और कम करें ç(हास्केल के समान foldl)



2

एपीएल (डायलॉग क्लासिक) , 31 30 बाइट्स

{⊃{⌽@(0 1,¨⍺)⊢⍵}/(⍵∩,⍳≢¨⍺),⊂⍺}

इसे ऑनलाइन आज़माएं!

बाएँ तर्क चरित्र वैक्टर की एक जोड़ी है - बाएँ रिबन और शीर्ष रिबन। सही तर्क समन्वित जोड़े का एक वेक्टर है - स्वैप स्थान। सही रिबन और नीचे रिबन की एक जोड़ी देता है। (ध्यान दें कि उदाहरणों के विपरीत, मैं निर्देशांक में पंक्ति-कॉल अक्ष क्रम के अनुरूप होने के लिए रिबन के लिए बाएं और ऊपर-नीचे क्रम का उपयोग करता हूं।)

स्वैप तो हल कर दिया जाना चाहिए कि के लिए एक और के ऊपरी-बाएं एक स्वैप आता है इससे पहले के बाद यह। यदि दो स्वैप एक-दूसरे के निचले-बाएँ / ऊपरी-दाएँ हैं, तो उनका क्रम मायने नहीं रखता।

संपादित करें: इनपुट में स्वैप के रिवर्स ऑर्डर की आवश्यकता के द्वारा एक बाइट ( ) को बचाया


1

जावास्क्रिप्ट, 87 76 62 बाइट्स

(c,r,s)=>{for([i,j]of s)if(r[i]&&c[j])[r[i],c[j]]=[c[j],r[i]]}

इसे ऑनलाइन आज़माएं!

अजगर 3 जवाब के रूप में एक ही तुच्छ एल्गोरिथ्म। तालिकाओं के रूप में सरणियों का उपयोग करता है। सच मानों द्वारा रिबन रंगों को निर्दिष्ट करने की आवश्यकता है। निर्देशांक आंशिक रूप से आदेश दिया जा करने के लिए आवश्यक है, ताकि x1,y1पहले आता है x2,y2या तो करता है, तो x1 < x2 && y1 = y2या x1 = x2 && y1 < y2। इनपुट सरणियों को संशोधित करके लौटाता है।


मुझे पूरा यकीन है कि आप ;return[r,c]इसे संशोधन द्वारा वापस
Asone Tuhid

if(r[i]&&c[j])कुछ और बाइट्स बचाएगा।
नील

मुझे पता है कि मेरी स्थिति बहुत मजबूत है, लेकिन आपकी स्थिति आत्म-विरोधाभासी है। विचार करें x1=1,x2=2,y1=2,y2=1। क्योंकि x1<x2, (x1,y1)पहले आता है (x2,y2); लेकिन क्योंकि y2<y1, (x2,y2)पहले आता है (x1,y1)। मुझे लगता है " x1 < x2और y1 < y2" पर्याप्त है।
user202729

@AsoneTuhid Hm, मुझे लगता है कि यह धोखा है। इनपुट ऑब्जेक्ट को संशोधित करना संदर्भ पैरामीटर द्वारा आउटपुट के समान नहीं है।
बेर्गी

1
प्रश्न: "क्या इसका मतलब यह है कि इसे अनुमति देने वाली भाषाओं में, वापसी के लिए सात वर्णों को केवल एक असाइनमेंट के साथ बदला जा सकता है?" A: "हाँ, बशर्ते परिवर्तित मूल्य उस संदर्भ में सुलभ होगा जिसे फ़ंक्शन कहा जाता है।" मुझे बहुत स्पष्ट लगता है।
आसून तुहिद

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