ดัชนีสตริงย่อยสั้นที่สุด


9

ฉันเป็นคนขี้เกียจ แต่ก็เป็นคนที่มีประสิทธิภาพซึ่งหลายคนคงเป็นเช่นกัน ดังนั้นเมื่อใดก็ตามที่ฉันทำสิ่งที่ฉันต้องการจะทำด้วยความพยายามน้อยที่สุด นี่คือเหตุผลที่ฉันขอให้คุณแก้ปัญหานี้ให้ฉัน

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

อินพุตตัวอย่าง:

(blank)
an apple
spiderman 3
7pm pick up laundry
tequila
fake mustache
dishes on wednesday
banana
biscuits
(blank)

ตัวอย่างผลลัพธ์:

ap,3,7,q,f,w,ba,bi

ฉันจะทำซ้ำตัวเองที่นี่เพื่อให้แน่ใจว่าเราอยู่ในหน้าเดียวกัน:

  • อินพุตเป็นไฟล์ข้อความที่ไม่ฟอร์แมตที่มีรายการซึ่งคั่นด้วยตัวแบ่งบรรทัด ฉันมีที่นี่ในรูปแบบ. txt เรียกว่า "STUFF.TXT"
  • บรรทัดแรกและบรรทัดสุดท้ายของเอกสารว่างเปล่า บรรทัดอื่นทุกบรรทัดมีรายการความยาว> 0
  • ไฟล์มีอักขระตัวอักษรผสมตัวเลขเท่านั้น (ตัวพิมพ์เล็กทั้งหมด) เว้นวรรคและตัวแบ่งบรรทัด
  • ผลลัพธ์ที่ต้องการคือรายการของตัวระบุตามลำดับเช่นเดียวกับรายการเดิมของฉัน
  • ฉันไม่ต้องการคำค้นหามากกว่าหนึ่งคำสำหรับทุกรายการ หากมีคำตอบหลายข้อให้เลือกหนึ่งข้อฉันไม่สนใจเลย ในตัวอย่างด้านบนฉันเลือก 'ap' สำหรับan appleแต่คุณสามารถเลือก 'n', 'a', 'pp', 'pl' หรือ 'le' ไม่ได้ 'ว่า' bananaเพราะที่ใน
  • ฉันรับรองกับคุณได้ว่าไฟล์ไม่เคยว่างเปล่าและไม่มีข้อมูลซ้ำ
  • หากจำเป็นคุณสามารถจับคู่บนตัวยุติบรรทัด แต่นั่นเป็นวิธีสุดท้ายที่จะใช้เฉพาะเมื่อไม่มีวิธีอื่นในการแยกความแตกต่างระหว่างรายการ (เช่น 'แอปเปิ้ล' และ 'แอปเปิ้ล')

ไม่อนุญาตช่องโหว่มาตรฐาน นอกจากนี้นี่คือรหัสกอล์ฟที่สั้นที่สุดเพื่อให้ชนะ

อีกหนึ่งตัวอย่าง:

(blank)
ban
any
king
bean
yen
rake
raki
bar
(blank)

และเอาท์พุท:

ban,ny,g,be,ye,ke,aki,ar

1
@CarpetPython มันจะต้องสั้นที่สุด ช่องว่างสามารถอยู่ในอินพุตและเอาต์พุตเพิ่มเข้าไปในคำถาม
freekvd

เราสามารถใช้การขึ้นบรรทัดใหม่ที่จุดเริ่มต้นของข้อความค้นหาได้หรือไม่หากสตริงหนึ่งต่อท้ายด้วยอีก
Martin Ender

@ MartinBüttnerใช่ นั่นเป็นสาเหตุที่เอกสารเริ่มต้นและลงท้ายด้วยบรรทัดว่างดังนั้นคุณจึงมีบรรทัดใหม่ที่จุดเริ่มต้นและจุดสิ้นสุดของแต่ละรายการ
freekvd

4
ฉันค่อนข้างมั่นใจว่าปัญหานี้เป็นปัญหาที่สมบูรณ์ ฉันคิดว่าฉันสามารถสร้างการลดปัญหาปกที่แน่นอนให้กับสิ่งนี้
FUZxxl

4
ยิ่งกว่านั้นคุณจะไม่เห็นโซลูชันที่สร้างสรรค์เนื่องจากไม่มีวิธีแก้ปัญหาใดที่ดีไปกว่าการใช้กำลัง
FUZxxl

คำตอบ:


3

Pyth, 39 ไบต์

Lsm.:bdtUbKfT.zj\,mhf!}Yjb-Kk+yky++bkbK

Bruteforces ชุดย่อยทั้งหมดของทุกสายอักขระในการเพิ่มความยาวและตรวจสอบว่าสายนั้นเกิดขึ้นภายในอื่น ๆ \nstring\nหากไม่ได้ทำงานก็จะทำเช่นเดียวกันยกเว้นย่อยทั้งหมดของ


ฉันได้รับข้อผิดพลาดการรวมประเภทที่ไม่ดีเมื่อฉันทดสอบนี้ pyth.herokuapp.com/…
freekvd

@freekvd Heroku ต้องมี Pyth รุ่นที่ล้าสมัยเนื่องจากการโทร.:ด้วยสตริงประเภทแรกและ int ประเภทที่สองไม่ใช่ข้อผิดพลาด ลองใช้ Pyth จาก repo: github.com/isaacg1/pyth
orlp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.