थिएटरों का नक्शा!


10

सभी असाइनमेंट सबमिट किए जाने के बाद, एक डिक्शनरी बनाई जाती है जो स्टूडेंट नंबर को उनकी फाइल के हैश पर मैप करती है।

यह शब्दकोश, या हैशमैप, या मैपिंग (आपकी भाषा जो भी इसे कहती है) इस प्रकार दिखाई देगी:

{100: "aabb", 104: "43a", 52: "00ab", 430: "aabb", 332: "43a"}

कुंजी छात्र संख्या है, और मूल्य हैश है।

हमारा काम चीटर्स को बाहर निकालना है! थिएटर वही हैं जिनमें समान हैश है।

इनपुट को देखते हुए {100: "aabb", 104: "43a", 52: "00ab", 430: "aabb", 332: "43a"}, फ़ंक्शन को निम्न पाठ वापस करना चाहिए (या प्रिंट):

100 has identical files to 430

104 has identical files to 332

ध्यान दें कि हेज़ अद्वितीय हैं जिन फ़ाइलों का उल्लेख नहीं किया गया है।

इसके अलावा, यहां आदेश महत्वपूर्ण है :

{100: "aabb", 202: "aabb", 303: "ab", 404: "aabb"} निम्न पाठ वापस करना चाहिए (प्रिंट करें):

100 has identical files to 202,404

यह है गलत निम्न में से कोई मुद्रित करने के लिए:

202 has identical files to 100,404

100 has identical files to 404, 202

आपको इसे इस रूप में छापना चाहिए कि यह कैसे शब्दकोश में दिखाई देता है। कुछ भाषाओं में, एक शब्दकोश के माध्यम से जाना यादृच्छिक है, इसलिए इस विशेष मामले में, आपको इनपुट की विधि को बदलने की अनुमति है, ताकि आप इसके माध्यम से एक क्रमबद्ध तरीके से जा सकें।

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

{} # prints nothing

{100: "ab", 303: "cd"} # prints nothing again

{100: "ab", 303: "cd", 404: "ab"}

100 has identical files to 404

{303: "abc", 304: "dd", 305: "abc", 405: "dd", 606: "abc"}

303 has identical files to 305,606

304 has identical files to 405

सबसे छोटा कोड जीतता है!


"आपको इसे इस रूप में छापना चाहिए कि यह शब्दकोष में कैसे दिखाई देता है" - मुझे पूरी तरह से यकीन नहीं है कि इसका क्या मतलब है। अन्यथा मुझे चुनौती पसंद है।
ग्यूसेप

3
क्या मैं मुख्य साइट पर पोस्ट करने से पहले सैंडबॉक्स का उपयोग करने का सुझाव दे सकता हूं ? हमेशा मुख्य पर स्पष्टीकरण के लिए एक लाख टिप्पणियों को प्राप्त करने के बजाय पोस्ट करने से पहले एक प्रश्न के लिए संशोधन करने में मददगार :-)
Giuseppe

1
इस मामले में जहां कई समूहों के समूह पाए जाते हैं, क्या समूहों के बीच एक आवश्यक आदेश है? उदाहरण के लिए, पिछले टेस्ट केस में "303 है ..." से पहले "304 है ..." प्रिंट किया जा सकता है?
कामिल दकरी

2
क्या हमें 303 has identical files to [305, 606]इसके बजाय आउटपुट की अनुमति है 303 has identical files to 305,606?
केविन क्रूज़सेन

1
जिन भाषाओं में शब्दकोश, मानचित्र या हैशमाप प्रकार मौजूद नहीं है, वहां टुपल्स (या समतुल्य) की सूची की अनुमति है?

जवाबों:


2

जावास्क्रिप्ट (बैबेल नोड) , 113 बाइट्स

[key, value]प्रारूप में सरणियों के एक सरणी के रूप में इनपुट लेता है । जाओ गैजेट डबल फ्लैटपोट!

o=>o.flatMap(([x,h],i)=>(a=o.flatMap(([y,H],j)=>j>i&H==h?(o[j]=[,j],[y]):[]))+a?x+' has identical files to '+a:a)

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


जावास्क्रिप्ट (बैबल नोड) , 114 बाइट्स

देशी जेएस ऑब्जेक्ट के रूप में इनपुट लेता है।

o=>Object.keys(o).flatMap((x,i,a)=>(a=a.filter(y=>i--<0&o[y]==o[x]&&(o[y]=y)))+a?x+' has identical files to '+a:a)

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


1
बहुत अच्छे! एक बड़ी फ़ाइल को छोड़ दें लेकिन फिर मुझे इस समस्या की उम्मीद नहीं थी कि अन्य लोगों की तरह यह आसान होगा। अच्छा कार्य! मैं इसे और अधिक flatMap
K भाजित X

@KSplitX flatMapअभी तक व्यापक रूप से समर्थित नहीं है। मुझे यकीन है कि छोटे तरीके हैं, लेकिन यह देर हो रही है और मैं अब और नहीं सोच सकता। : पी
अरनुलड

2

पायथन 2 , 127 126 बाइट्स

def f(x):
 for l in{`[K for K,V in x if v==V]`[1:-1]for k,v in x}:
	if','in l:print l.replace(',',' has identical files to',1)

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

(<studentNumber>,<hash>)इनपुट के रूप में आदेशित जोड़े की एक सूची लेता है ।


एक छोटे से गोल्फ से चूक गए:if','in
वेदांत कंडोई

@ वेदांत कंडोई: Thx!
चास ब्राउन

1

रेटिना 0.8.2 , 71 बाइट्स

+m`((:.+)$(¶|.)+?)^(.+)\2$
,$4$1
:.*

G`,
%1`,
 has identical files to 

इसे ऑनलाइन आज़माएं! अलग-अलग लाइनों पर इनपुट लेता है लेकिन लिंक में टेस्ट सूट शामिल है जो आपके लिए उदाहरणों को विभाजित करता है। स्पष्टीकरण:

+

इस मैच को तब तक दोहराएं जब तक कि कोई और रिप्लेसमेंट न किया जा सके।

m`((:.+)$(¶|.)+?)^(.+)\2$
,$4$1

मैचिंग हैश के जोड़े के लिए देखो और दूसरे मैच की कुंजी को अल्पविराम विभाजक के साथ पहले मैच में जोड़ दें।

:.*

सभी हैश को हटा दें।

G`,

केवल अल्पविरामों वाली रेखाएँ रखें।

%1`,
 has identical files to 

वांछित पाठ (अनुगामी स्थान सहित) के साथ प्रत्येक पंक्ति पर पहले अल्पविराम को बदलें।


1

आर , 145 132 129 126 124 बाइट्स

function(m,`!`=names)for(e in !(t=table(m))[t>1])cat(el(n<-!m[m==e]),'has identical files to',paste(n[-1],collapse=','),'
')

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

यह नामांकित वेक्टर को इनपुट के रूप में लेता है (नाम कुंजी हैं)

  • -2 बाइट्स ग्यूसेप के लिए धन्यवाद

यदि ", "कई डुप्लिकेट के मामले में विभाजक (अल्पविराम के बाद एक स्थान के साथ) की अनुमति है, तो हम इस कोड का उपयोग कर सकते हैं और 10 बाइट बचा सकते हैं:

आर , 114 बाइट्स

function(m,`!`=names)for(e in !(t=table(m))[t>1])cat(el(n<-!m[m==e]),'has identical files to',toString(n[-1]),'
')

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


124 बाइट्स हालांकि मेरी आंत मुझे एक अलग दृष्टिकोण बताती है कि 115 रेंज में कुछ मिल सकता है ...
ग्यूसेप

0

05AB1E , 34 बाइट्स

Σθ}.γθ}vyg1›iy€нć“ÿ€°Ê¼‡œ€„ “?',ý,

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

Σθ}                   # Sort the (implicit) input by the string
.γθ}                  # Then group it by the string
v                     # Loop `y` over each grouped inner list
 yg1i                #  If the group contains more than 1 key-value pairs:
      y€н             #   Only leave the keys
      ć               #   Pop and push the head and rest of the list separately
                      #   (with the head being at the top of the stack now)
       “ÿ€°Ê¼‡œ€„    #   Compressed string "ÿ has identical files to "
                      #   where the "ÿ" is automatically replaced with the top of the stack
                   ?  #   Print it (without trailing newline)
       ',ý           '#   Join the remaining numbers by a comma
          ,           #   And output it as well (with trailing newline)

मेरा 05AB1E उत्तर देखें (अनुभाग का उपयोग कैसे करें शब्दकोश का उपयोग करें? ) यह समझने के लिए कि क्यों “ÿ€°Ê¼‡œ€„ “है "ÿ has identical files to "




0

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 130 बाइट्स

a=>a.GroupBy(x=>x.Value,x=>x.Key).Where(x=>x.Count()>1).Select(x=>x.First()+" has identical files to "+String.Join(",",x.Skip(1)))

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

इस प्रश्न के बारे में अजीब बात यह है कि उदाहरण JSON प्रारूप में कुंजी / मूल्य जोड़े के रूप में दिए गए हैं, जो आमतौर पर इसका अर्थ है कि वे अनियंत्रित हैं ... हालांकि इस मामले में, आदेश महत्वपूर्ण है। जैसे, मैं इनपुट के लिए टुपल्स की सूची और आउटपुट के रूप में स्ट्रिंग्स की सूची का उपयोग कर रहा हूं।

// a is a list of tuples
// (student #, hash)
a=>a
  // group by hash
  // grouped items are the student #'s
  .GroupBy(x=>x.Value,x=>x.Key)
  // remove single student groups
  .Where(x=>x.Count()>1)
  // format the output strings
  .Select(x=>x.First()+
    " has identical files to "+
    String.Join(",",x.Skip(1)))


0

जाप , 34 बाइट्स

üÌl>1 ®mgîÎ+` •s ÅÁÈól fÅC ‘ `+ZÅ

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

अभी यह लाइनों के क्रम में थोड़ा असंगत है, लेकिन एक पंक्ति के भीतर यह सही ढंग से आउटपुट करता है। यदि आउटपुट की लाइनों को एक विशिष्ट क्रम में होना चाहिए, तो यह कुछ और बाइट्स लेगा। इनपुट सिर्फ एक सरणी है[id, hash] जोड़े

स्पष्टीकरण:

üÌ                                    :Group by hash
  l>1                                 :Remove the ones that are unique
      ®mgà                            :Get just the Ids
          ®                           :Generate a string for each hash:
           Î                          : The first Id with that hash
            +` •s ÅÁÈól fÅC ‘ `       : Plus " has identical files to " compressed
                               +ZÅ    : Plus the remaining Ids
                                      : Implicitly comma delimited

0

पर्ल 6 , 115 110 103 बाइट्स

-2 बाइट्स जो किंग को धन्यवाद

{unique map {.[0]~" has identical files to "~join ',',.skip},grep *>1,.map:{.grep(*{*}eq$^p{*})>>.key}}

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

हैश अनियंत्रित होने के बाद से जोड़े की सूची लेता है। दो-तत्व सूचियों की एक सूची कुछ बाइट्स को बचाएगी लेकिन यूनिडायमैटिक लगती है। लाइनों की एक सूची देता है।

95 88 बाइट्स अगर परिणाम में लाइनों का क्रम मायने नहीं रखता है:

*.classify(*{*}){*}>>.key.grep(*>1).map:{.[0]~" has identical files to "~join ',',.skip}

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


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