การบีบอัดแบบดิฟ [ปิด]


20

สำหรับความท้าทายนี้คุณจะต้องบีบอัดดิฟ diff เป็นข้อมูลบางอย่างที่แสดงถึงความแตกต่างระหว่างสองสาย สำหรับความท้าทายนี้คุณต้องจัดหาโปรแกรมอย่างน้อยหนึ่งโปรแกรมที่สามารถ:

  1. อินพุทAและBและเอาท์พุทดิฟC
  2. อินพุทAและCและเอาท์พุทB
  3. อินพุทBและCและเอาท์พุทA

เป้าหมายคือสร้างความแตกต่างCเล็กที่สุดเท่าที่จะทำได้ diff สามารถเป็นอะไรก็ได้: สตริงตัวเลขจำนวนหยดของข้อมูล เราแค่แคร์เรื่องขนาด (จำนวนไบต์)

ฉันมี 50 กรณีทดสอบที่สามารถพบได้บน Github แต่ละกรณีทดสอบประกอบด้วย URL ที่คั่นด้วยช่องว่างสองจุดซึ่งชี้ไปที่ไฟล์ 2 ไฟล์ที่คุณต้องการแตกต่างกัน (กรณีทดสอบเหล่านี้มีต้นกำเนิดมาจากโปรไฟล์ Github ของสมาชิก PPCG ขอบคุณทุกคน!)

งานทั้งสามอย่างข้างต้นควรใช้เวลาไม่ถึงนาทีในการทำงานบนคอมพิวเตอร์ที่ได้รับพลังงานพอสมควร (สำหรับแต่ละกรณีทดสอบ)

คะแนนของคุณเท่ากับขนาดทั้งหมด (เป็นไบต์) ของทั้ง 50 diffs ต่ำกว่าดีกว่า ไม่อนุญาตให้ใช้ Hardcoding ในโปรแกรมของคุณ (ฉันขอสงวนสิทธิ์ในการเปลี่ยนแปลงกรณีทดสอบเพื่อป้องกันการเข้ารหัส) diffutilsไม่อนุญาตให้สร้างบิวอินที่ต่างกัน (เหมือน)


4
ความแตกต่างคืออะไร?
Conor O'Brien

ทุกสิ่งที่คุณต้องการให้เป็นจริง อย่างไม่เป็นทางการสตริงที่แสดงถึงความแตกต่างระหว่างAและB
นาธานเมอร์ริล

1
การเชื่อมโยงมากขึ้นเน่า: หมายเลขกรณีทดสอบคู่โดยดัชนีบรรทัด 1 ฐาน; ทั้งสองกรณีทดสอบ 3, 13, 14, 15, 16, 17, 18, 19, 20, 21 เป็น 404 ทั้งหมดนอกเหนือจากนี้ฉันจัดการเพื่อดึงทุกกรณีอื่น
H Walters

3
ฉันกำลังปิดคำถามนี้เพราะส่วนใหญ่ยังไม่ได้ตอบและลิงก์เก่า ๆ จำนวนมากที่ฉันใช้เป็นกรณีทดสอบไม่ทำงานอีกต่อไป โปรดอัปเดตคำถามและเปิดใหม่หากคุณต้องการ
Nathan Merrill

1
เสร็จสิ้น GIST คือgist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8 ไฟล์ที่สองเป็นไฟล์เก็บถาวร uuencoded ของกรณีทดสอบ 40 คู่ที่เหลืออยู่
เซท

คำตอบ:


0

คำตอบของฉันถูกต้องหรือไม่

set f [open commits.txt]
while {![eof $f]} {scan [gets $f] %s\ %s a b; puts [string compare $a $b]}
close $f

ทดสอบได้ที่: http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMNmd4QkxvQUFsTnM


1
คุณต้องระบุหลายโปรแกรม (ทั้งที่diffเทียบเท่าและpatchเทียบเท่า) หากstring comparediffs สตริงมันจะละเมิดกฎ "no builtins" หากเปรียบเทียบเฉพาะสตริง (เช่นชื่อที่แนะนำ) ก็จะไม่มีข้อมูลเพียงพอที่จะสร้างแพตช์ใหม่

@ ais523: builtins ฉันเข้าใจว่ามันเป็นคำสั่งบรรทัดคำสั่ง ฉันรู้string compareว่าไม่ได้สร้างข้อมูลเพื่อสร้างหน้า แต่ไม่มีที่ในคำถามที่ถามมา
sergiol

จากคำถาม "2. อินพุต A และ C และเอาต์พุต B" นี่คือสิ่งที่โปรแกรมที่คุณส่งไม่สามารถทำได้และอันที่จริงไม่มีโปรแกรมใดที่สามารถทำได้ (เพราะไม่มีข้อมูลเพียงพอ)

@ ais523: ตกลงฉันเข้าใจผิด
sergiol

@ ais523: ฉันไม่คิดว่าคำสั่งของคุณถูกต้อง "อันที่จริงแล้วโปรแกรมไม่สามารถทำได้" ถ้า C เป็นส่วนต่างระหว่าง A และ B ดังนั้น C และ A, B ที่กำหนดจะคำนวณได้ บางทีฉันอาจพลาดจุดที่แน่นอนของคุณ
เซท
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.