การท้าทายที่มาถึง 6: การติดตั้งแท่นขนส่งอีกครั้ง!


9

<< ก่อนหน้า ถัดไป >>

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

ตอนนี้เมื่อนำเสนอในลำดับที่เรียงลำดับให้กำหนดค่าช่วงน้อยที่สุดที่เป็นไปได้ทั้งหมดซึ่งจะส่งผลให้ปัจจุบันอยู่ในลำดับที่ถูกต้อง นั่นคือค้นหาการกำหนดค่าขั้นต่ำทั้งหมดเช่นการเรียงลำดับของขวัญตามอัลกอริทึมใน Challenge # 5 จะไม่เปลี่ยนลำดับ

ท้าทาย

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

ความท้าทายคือการหาการกำหนดค่าช่วงน้อยที่สุดที่เป็นไปได้ที่จะนำไปใช้กับขนาดปัจจุบัน ลองมาตัวอย่าง:[3, 1, 2, 5, 4, 7, 6]

มีกรณีเล็ก ๆ น้อย ๆ ซึ่งจะใช้ช่วงของการกำหนดค่าปัจจุบันทั้งหมด ในกรณีนี้[[1, 7]]จะเป็นทางออก

สำหรับตัวอย่างที่มีองค์ประกอบเฉพาะกรณีเล็ก ๆ น้อย ๆ จะเป็น[[3], [1], [2], [5], [4], [7], [6]](เพราะไม่จำเป็นต้องสั่งช่วง)

สำหรับตัวอย่างนี้เรายังเห็นว่า[[1, 3], [4, 7]]และ[[1, 3], [4, 5], [6, 7]]จะทำงานเช่นเดียวกับและ[[1, 3], [5], [4], [6, 7]][[1, 3], [4, 5], [7], [6]]

คำตอบสุดท้ายสำหรับจะเป็น[3, 1, 2, 5, 4, 7, 6][[[3], [1], [2], [5], [4], [7], [6]], [[3], [1], [2], [5], [4], [6, 7]], [[3], [1], [2], [4, 5], [7], [6]], [[3], [1], [2], [4, 5], [6, 7]], [[3], [1], [2], [4, 7]], [[3], [1, 2], [5], [4], [7], [6]], [[3], [1, 2], [5], [4], [6, 7]], [[3], [1, 2], [4, 5], [7], [6]], [[3], [1, 2], [4, 5], [6, 7]], [[3], [1, 2], [4, 7]], [[1, 3], [5], [4], [7], [6]], [[1, 3], [5], [4], [6, 7]], [[1, 3], [4, 5], [7], [6]], [[1, 3], [4, 5], [6, 7]], [[1, 3], [4, 7]], [[1, 5], [7], [6]], [[1, 5], [6, 7]], [[1, 7]]]

การจัดรูปแบบข้อมูลจำเพาะ

ข้อมูลจะถูกป้อนเป็นรายการจำนวนเต็มบวกภายในช่วงหมายเลขที่เหมาะสมที่สนับสนุนในภาษาของคุณในรูปแบบที่เหมาะสม อินพุตอาจมีองค์ประกอบที่ซ้ำกัน ควรให้เอาต์พุตเป็นรายการ 3D ของจำนวนเต็มบวกในรูปแบบที่เหมาะสม

แต่ละช่วงในการส่งออกของคุณ (ซึ่งเป็นชั้นที่สอง) สามารถแสดงไม่ว่าจะเป็น[min, max], [num]ถ้าหากมันเป็นช่วงเดียวคุ้มค่าหรือเป็นทั้งช่วงตัวเอง แต่รูปแบบการออกของคุณจะต้องสอดคล้องกัน โปรดระบุหากคุณต้องการใช้รูปแบบผลลัพธ์ที่สมเหตุสมผลแตกต่างกันเล็กน้อย

ค่าซ้ำต้องอยู่ในช่วงเดียวในเอาต์พุต นั่นคือไม่มีช่วงสองช่วงในเอาต์พุตที่อาจทับซ้อนกัน

โซลูชันของคุณอาจส่งคืนช่วงในลำดับใดก็ได้และสิ่งนี้ไม่จำเป็นต้องกำหนดไว้ล่วงหน้า

กฎระเบียบ

  • ช่องโหว่มาตรฐานใช้
  • นี่คือ ดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
  • จะไม่ยอมรับคำตอบ

กรณีทดสอบสำหรับรายการที่มีองค์ประกอบที่ซ้ำกัน:

2 3 2 4 -> [[[2, 3], [4]], [[2, 4]]]

การดำเนินการอ้างอิง

ส่วนหัวคือลิงค์

หมายเหตุ: ผมดึงแรงบันดาลใจสำหรับชุดความท้าทายนี้จากการจุติของรหัส ฉันไม่มีส่วนเกี่ยวข้องกับเว็บไซต์นี้

คุณสามารถดูรายการของความท้าทายทั้งหมดในซีรีส์โดยดูที่ส่วน 'เชื่อมโยง' ของความท้าทายแรกที่นี่

มีความสุขในการเล่นกอล์ฟ!

คำตอบ:



3

Brachylogขนาด17 16 ไบต์

{~c⟨⌋⟦₂⌉⟩ᵐ.c≠∧}ᶠ

ทำงานในรายการที่ซ้ำกันเช่นกัน ช่วงจะถูกแสดงโดยรายการขององค์ประกอบที่มี ลองออนไลน์!

คำอธิบาย

แนวคิดคือการแบ่งรายการเป็นบล็อกและแปลงบล็อกเป็นช่วงจากนั้นตรวจสอบว่าไม่มีการซ้อนทับกัน

{~c⟨⌋⟦₂⌉⟩ᵐ.c≠∧}ᶠ  Input is a list.
{             }ᶠ  Compute all possible outputs for this predicate:
 ~c                Break the list into contiguous blocks.
   ⟨    ⟩ᵐ         For each block,
    ⌋  ⌉           take its minimum and maximum,
     ⟦₂            and create the range between them.
          .        This is the output.
           c       Also, if you concatenate the output,
            ≠      its elements are distinct.
             ∧     Prevent the interpreter from thinking this is also the output.

1

JavaScript (ES6), 166 164 ไบต์

แก้ไข: เวอร์ชันที่อัปเดตซึ่งสนับสนุนการทำซ้ำ

พิมพ์ผลลัพธ์โดยตรงไปยังคอนโซลในรูปแบบ[min, max]

f=(a,r=[],l=0)=>a[l++]?f([...a],r,l,f(a,[...r,[Math.min(...x=a.splice(0,l)),Math.max(...x)]])):a[0]|r.some(([x,y],i)=>r.some(([z])=>i--&&z>=x&z<=y))||console.log(r)

กรณีทดสอบ


0

Python 2 , 179 ไบต์

lambda l:[l for l in[[range(min(x),max(x)+1)for x in P]for P in p(l)]if len(sum(l,[]))==len(set(sum(l,[])))]
p=lambda l:[[l[:i]]+a for i in range(1,len(l))for a in p(l[i:])]+[[l]]

ลองออนไลน์!

แสดงรายการของช่วงเต็ม

แรงบันดาลใจอย่างมากจากการใช้งานอ้างอิง

สร้างพาร์ติชันทั้งหมดจากนั้นช่วงของ min / max สำหรับแต่ละพาร์ติชัน รายการของช่วงถูกต้องหากไม่มีค่าปรากฏมากกว่าหนึ่งครั้งในรายการ


sum(l,[]) ทำให้รายการเป็นรายการแบนและอนุญาตให้ฉันตรวจสอบรายการซ้ำ:

l=[[1, 2], [2, 3]]
sum(l,[]) = [1,2,2,3]
len([1,2,2,3] == len(set([1,2,2,3]))  -> False (duplicates)

0

Pyth , 17 ไบต์

f{IsTmm}hSkeSkd./

ลองที่นี่!

ตอนนี้ที่มากดีกว่า ส่งออกช่วงทั้งหมด ดูประวัติการแก้ไขสำหรับรุ่นก่อนหน้า (ที่ 31 ไบต์ที่ส่าย)

มันทำงานอย่างไร

f {IsTmm} hSkeSkd./ ~> โปรแกรมเต็มรูปแบบ

               ./ ~> รายการพาร์ติชัน
     m ~> แผนที่โดยใช้ตัวแปร d
      md ~> แผนที่มากกว่า d โดยใช้ตัวแปร k
        hSk ~> ค่าต่ำสุดของ k
           eSk ~> สูงสุด k
       } ~> ช่วงจำนวนเต็มรวม
f ~> กรองสิ่งเหล่านั้น ...
   sT ~> ซึ่งเมื่อแบน
 {I ~> เป็นค่าคงที่มากกว่าการขจัดข้อมูลซ้ำซ้อน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.