ทูตและนักแปล


12

เอกอัครราชทูตสองคนในการประชุมสหประชาชาติต้องการพูดคุยกัน แต่น่าเสียดายที่แต่ละคนพูดภาษาเดียวเท่านั้นและพวกเขาไม่ใช่ภาษาเดียวกัน โชคดีที่พวกเขาสามารถเข้าถึงนักแปลหลายคนซึ่งแต่ละคนเข้าใจและพูดได้หลายภาษา งานของคุณคือกำหนดโซ่นักแปลที่สั้นที่สุด (เนื่องจากคุณต้องการให้มีการสูญเสียการแปลน้อยที่สุดเท่าที่จะเป็นไปได้) ซึ่งทำให้ทูตทั้งสองสามารถพูดคุยกัน

การเข้ารหัส

อินพุต:สองภาษาเป็นสตริงตัวพิมพ์เล็ก 2 ตัวอักษร (แต่ละภาษาของเอกอัครราชทูต) และรายชื่อของภาษา (หนึ่งรายการต่อนักแปลที่มีอยู่)

คุณอาจเลือกที่จะใช้จำนวนเต็มแทนรหัสตัวอักษร 2 ตัว

เอาท์พุท:ลำดับของนักแปลไม่ว่าจะโดยดัชนีหรือค่าที่เป็นหนึ่งในกลุ่มที่สั้นที่สุดของนักแปลที่อนุญาตให้ทั้งสองทูตสื่อสาร หากไม่มีกลุ่มนักแปลที่ถูกต้องพฤติกรรมจะไม่ได้กำหนด (คุณอาจล้มเหลวส่งออกค่าใด ๆ หรือระบุข้อผิดพลาด)

ห่วงโซ่การแปลที่ถูกต้องคือสิ่งที่นักแปลคนแรกพูดภาษาเอกอัครราชทูตคนที่หนึ่งและนักแปลที่สองและต่อมาแชร์อย่างน้อยหนึ่งภาษากับนักแปลคนก่อนหน้าและนักแปลคนสุดท้ายพูดภาษาแอมบาสเดอร์คนอื่น

ตัวอย่าง

ใช้การทำดัชนีแบบ zero-based:

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 ของสายอักขระสองตัวจะไม่เป็นจำนวนเต็มเช่นกัน?
Jonathan Allan

รายชื่อนักแปลสามารถอยู่ในรูปแบบ csv เช่น:en,fr,sp;en,gr;gr,fr
Quinn

@ กฎ iOS มาตรฐานควินน์บอกว่าใช่
Beefster

ทูตสามารถรวมอยู่ในผลลัพธ์ที่จุดเริ่มต้นและจุดสิ้นสุดได้หรือไม่?
Nick Kennedy

@NickKennedy ฉันจะไม่พูดกับสิ่งนั้น
Beefster

คำตอบ:


3

Python 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

ผลตอบแทนที่เป็นรายการที่มีความยาวน้อยที่สุดของนักแปลที่เป็นsetของภาษาเช่น 'ด้วยค่า' จากTที่อนุญาตให้มีการพูดคุยกับab


if t not in U and a in tสามารถเปลี่ยนif(a in t)>U.count(t)เป็นบันทึก 4 ไบต์
mypetlion

@mypetition - ฉันมีความคิดที่คล้ายกันและบีบออกอีก 2
Chas Brown

117โดยใช้*argsสัญกรณ์
ArBo

@ArBo: ดี; ขอบคุณสำหรับ 3 ไบต์
Chas Brown

3

เยลลี่ , 19 17 ไบต์

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

ลองออนไลน์!

ลิงก์ dyadic ที่ใช้รายการนักแปลเป็นอาร์กิวเมนต์ด้านซ้ายและรายการของเอกอัครราชทูต ส่งคืนรายการนักแปลซึ่งแต่ละรายการจะมีรายการภาษาที่พวกเขาพูด

ขอบคุณ @KevinCruijssen สำหรับการบันทึก 2 ไบต์!

คำอธิบาย

Œ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 ไบต์ได้โดยลบการเรียงลำดับตามความยาวเนื่องจากการเปลี่ยนแปลงของ powerset + จะส่งผลให้รายการเรียงลำดับตามความยาว
Kevin Cruijssen

@KevinCruijssen ขอบคุณจุดดี!
Nick Kennedy

2

05AB1E , 18 17 ไบต์

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

แรงบันดาลใจจากคำตอบ Jelly ของ@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)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.