राजदूत और अनुवादक


12

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

कोडिंग

इनपुट: दो भाषाओं में 2-अक्षर लोअरकेस स्ट्रिंग्स (प्रत्येक राजदूत की भाषा) और भाषाओं की सूची (उपलब्ध अनुवादक के लिए एक सूची)

आप वैकल्पिक रूप से 2-अक्षर कोड के बजाय पूर्णांक में ले सकते हैं।

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

अनुवादकों की एक वैध श्रृंखला वह है जहाँ पहला अनुवादक एक राजदूत की भाषा बोलता है, दूसरा और बाद के अनुवादक पिछले अनुवादक के साथ कम से कम एक भाषा साझा करते हैं, और अंतिम अनुवादक दूसरे राजदूत की भाषा बोलता है।

उदाहरण

शून्य-आधारित अनुक्रमण का उपयोग करना:

es, en, [
    [es, en]
] ==> [0]

en, en, [] ==> []

en, jp, [
    [en, zh, ko, de],
    [jp, ko]
] ==> [0, 1]

es, ru, [
    [gu, en, py],
    [po, py, ru],
    [po, es]
] ==> [2, 1]

fr, gu, [
    [it, fr, de, es, po, jp],
    [en, ru, zh, ko],
    [jp, th, en],
    [th, gu]
] ==> [0, 2, 3]

fr, ru, [
    [fr, en],
    [en, ko, jp],
    [en, ru]
] ==> [0, 2]

de, jp, [
    [en, fr],
    [ko, jp, zh],
    [fr, po],
    [es, ko, zh],
    [de, en, th],
    [en, es],
    [de, fr]
] ==> [4, 5, 3, 1]

नियम और मान्यताएँ

  • मानक IO नियम (किसी भी सुविधाजनक I / O प्रारूप का उपयोग करें) और प्रतिबंधित कमियां लागू होती हैं।
  • आप मान सकते हैं कि भाषा बोलना और समझना पूरी तरह से सममित है और भाषाओं के बीच सभी संभावित अनुवाद समान रूप से कुशल हैं।
  • "करीब पर्याप्त" भाषाओं की कोई अवधारणा नहीं है। उदाहरण के लिए, स्पेनिश के लिए एक छोर पर पुर्तगाली का उपयोग करना पर्याप्त नहीं है।
  • यदि कई लघु अनुवादक श्रृंखलाएं हैं, तो उनमें से कोई भी एक करेगा।
  • यदि राजदूत एक ही भाषा बोलने के लिए होते हैं, तो अनुवादक सूची खाली होनी चाहिए
  • राजदूतों में से कौन सा पहला है कोई फर्क नहीं पड़ता; अनुवादक सूची आगे या पीछे हो सकती है।
  • राजदूत इस चुनौती के लिए केवल एक भाषा बोलते हैं
  • अनुवादक कम से कम दो भाषाएँ बोलते हैं
  • 2-अक्षर भाषा कोड को वास्तविक भाषाओं के साथ मेल खाने की आवश्यकता नहीं है
  • आप मान सकते हैं कि अनुवादकों का एक मान्य क्रम है
  • यदि अनुक्रम को मान से आउटपुट करते हैं, तो उपलब्ध भाषाओं का पूरा सेट शामिल करें, न कि केवल प्रासंगिक वाले।

हैप्पी गोल्फिंग!


2
दो-वर्ण स्ट्रिंग्स के लिए I / O प्रतिबंध क्यों, पूर्णांक भी नहीं करेंगे?
जोनाथन एलन

क्या अनुवादकों की सूची की सूची सीएसवी के रूप में हो सकती है:en,fr,sp;en,gr;gr,fr
क्विन

@ क्वीन मानक IO नियम हां कहते हैं।
बीफस्टर

क्या शुरुआत और अंत में राजदूतों को आउटपुट में शामिल किया जा सकता है?
निक केनेडी

@NickKennedy मैं उस एक पर नहीं कहने वाला हूं।
बीफस्टर

जवाबों:


3

पायथन 2 , 138 126 120 117 113 बाइट्स

F=lambda a,b,T,*U:a!=b and min([[t]+F(l,b,T,t,*U)for t in T if(t in U)<(a in t)for l in t-{a}]+[2*T],key=len)or[]

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

3 बाइट्स ArBo को thx

अनुवादकों की न्यूनतम लंबाई सूची लौटाता है set, जैसे कि भाषाओं का, 'मूल्य से', Tजिससे aबात करने की अनुमति मिलती है b


if t not in U and a in tif(a in t)>U.count(t)4 बाइट्स को बचाने के लिए बदला जा सकता है ।
mypetlion

@ मेरीपिटेशन - मेरे पास एक समान विचार था और एक और निचोड़ था 2.
चास ब्राउन

117*args संकेतन का उपयोग करके
ArBo

@ अराबो: अच्छा; 3 बाइट्स के लिए thx।
चास ब्राउन

3

जेली , 19 17 बाइट्स

ŒPŒ!€Ẏj@€fƝẠ$ƇḢḊṖ

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

अनुवादकों की सूची को बाएं तर्क के रूप में और राजदूतों की सूची (प्रत्येक सूची में प्रत्येक डबल-लिपटे) को सही तर्क के रूप में लेते हुए एक डियाडिक लिंक। अनुवादकों की सूची लौटाता है, जिनमें से प्रत्येक उन भाषाओं की सूची है जो वे बोलते हैं।

2 बाइट बचाने के लिए @KevinCruijssen को धन्यवाद!

व्याख्या

ŒPŒ!€Ẏj@€fƝẠ$ƇḢḊṖ | A dyadic link taking a list of translators as left argument and a list of ambassadors (double-wrapped in lists) as right argument

ŒP                | Power set of translators
  Œ!€             | Permutations of each
     Ẏ            | Tighten, i.e. create a single list of all permutations of any length
      j@€         | Join the ambassadors with each set of translators
            $Ƈ    | Filter those where:
           Ạ      |   all
         fƝ       |   the neighbouring pairs have at least one in common
              Ḣ   | Take the first
               Ḋ  | Drop the first ambassador from the start
                Ṗ | Drop the second ambassador from the end

आप लंबाई द्वारा सॉर्ट को हटाकर 2 बाइट्स बचा सकते हैं , क्योंकि पावरसेट + अनुमेय पहले से ही सूची में लंबाई के अनुसार क्रमबद्ध हैं।
केविन क्रूज़सेन

@ केविनक्रूजसेन धन्यवाद, अच्छी बात!
निक केनेडी

2

05AB1E , 18 17 बाइट्स

怜€`ʒ²š³ªüå€àP}н

@NickKennedy जेली जवाब से प्रेरित है , इसलिए उसे उभारना सुनिश्चित करें!

अपने सूचकांकों के बजाय सूचियों को स्वयं आउटपुट करता है।

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

स्पष्टीकरण:

æ                # Get the powerset of the (implicit) input-list of translators
                 #  i.e. [["ef","gh","bc"],["bc","ab"],["ef","cd","de"]]
                 #   → [[],[["ef","gh","bc"]],[["bc","ab"]],[["ef","gh","bc"],["bc","ab"]],[["ef","cd","de"]],[["ef","gh","bc"],["ef","cd","de"]],[["bc","ab"],["ef","cd","de"]],[["ef","gh","bc"],["bc","ab"],["ef","cd","de"]]]
 €œ              # Get the permutations of each
                 #  → [[[]],[[["ef","gh","bc"]]],[[["bc","ab"]]],[[["ef","gh","bc"],["bc","ab"]],[["bc","ab"],["ef","gh","bc"]]],[[["ef","cd","de"]]],[[["ef","gh","bc"],["ef","cd","de"]],[["ef","cd","de"],["ef","gh","bc"]]],[[["bc","ab"],["ef","cd","de"]],[["ef","cd","de"],["bc","ab"]]],[[["ef","gh","bc"],["bc","ab"],["ef","cd","de"]],[["ef","gh","bc"],["ef","cd","de"],["bc","ab"]],[["bc","ab"],["ef","gh","bc"],["ef","cd","de"]],[["bc","ab"],["ef","cd","de"],["ef","gh","bc"]],[["ef","cd","de"],["ef","gh","bc"],["bc","ab"]],[["ef","cd","de"],["bc","ab"],["ef","gh","bc"]]]]
   €`            # Flatten each one level down (4D list becomes 3D list)
                 #  → [[],[["ef","gh","bc"]],[["bc","ab"]],[["bc","ab"],["ef","gh","bc"]],[["ef","gh","bc"],["bc","ab"]],[["ef","cd","de"]],[["ef","cd","de"],["ef","gh","bc"]],[["ef","gh","bc"],["ef","cd","de"]],[["ef","cd","de"],["bc","ab"]],[["bc","ab"],["ef","cd","de"]],[["ef","cd","de"],["bc","ab"],["ef","gh","bc"]],[["ef","cd","de"],["ef","gh","bc"],["bc","ab"]],[["bc","ab"],["ef","cd","de"],["ef","gh","bc"]],[["bc","ab"],["ef","gh","bc"],["ef","cd","de"]],[["ef","gh","bc"],["ef","cd","de"],["bc","ab"]],[["ef","gh","bc"],["bc","ab"],["ef","cd","de"]]]
     ʒ           # Filter this 3D list by:
      ²š         #  Prepend the second input ambassador
                 #   i.e. [["bc","ab"],["ef","gh","bc"]] and "ab"
                 #    → ["ab",["bc","ab"],["ef","gh","bc"]]
        ³ª       #  Append the third input ambassador
                 #   i.e. ["ab",["bc","ab"],["ef","gh","bc"]] and "ef"
                 #    → ["ab",["bc","ab"],["ef","gh","bc"],"ef"]
          ü      #  For each adjacent pair of translator-lists:
           å     #   Check for each item in the second list, if it's in the first list
                 #    i.e. ["bc","ab"] and ["ef","gh","bc"] → [0,0,1]
            ۈ   #   Then check if any are truthy by leaving the maximum
                 #    → 1
              P  #  And then take the product to check if it's truthy for all pairs
                 #   i.e. ["ab",["bc","ab"],["ef","gh","bc"],"ef"] → [1,1,1] → 1
               # After the filter: only leave the first list of translator-lists
                 #  i.e. [[["bc","ab"],["ef","gh","bc"]],[["bc","ab"],["ef","gh","bc"],["ef","cd","de"]]]
                 #   → [["bc","ab"],["ef","gh","bc"]]
                 # (which is output implicitly as result)

1

जावास्क्रिप्ट (ईएस 6),  123  121 बाइट्स

2-अक्षर कोड के बजाय पूर्णांक की अपेक्षा करता है।

(a,b,l)=>((B=g=(m,s,i)=>m>>b&1?B<i||(o=s,B=i):l.map(a=>a.map(M=c=>M|=1<<c)|M&m&&m^(M|=m)&&g(M,[...s,a],-~i)))(1<<a,[]),o)

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

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