ภาพเคลื่อนไหวของ Code Golf


28

เมื่อฉันเห็นรายการ code-golf ที่ทำให้ตัวละครหายไปสักหน่อยฉันก็อ่านรหัสลงไปฉันจะดูประวัติการแก้ไขของ diff-by-side ดูและเรียนรู้ :)

ความท้าทายนี้คือการสร้างโปรแกรมที่ให้ภาพเคลื่อนไหวที่สวยที่สุด

  • อินพุตจะเป็นชุดของเวอร์ชันข้อความที่เรียงลำดับ
  • โปรแกรมอาจถูกเขียนในภาษาการเขียนโปรแกรมใด ๆ
  • อนุญาตให้โปรแกรม จำกัด ตัวเองให้ป้อนข้อมูลในบางภาษาโปรแกรมเฉพาะ
  • ไม่ควรปรับโปรแกรมเป็นข้อมูลอินพุตเฉพาะ โปรแกรมควรเป็นแบบทั่วไปและใช้งานได้กับชุดข้อความรุ่นใด ๆ
  • สำหรับแต่ละรุ่นในอินพุตจะต้องมีเวลาที่สอดคล้องกันในแอนิเมชั่นเอาท์พุทที่แสดงข้อความเต็มของเวอร์ชัน คุณต้องทำให้ความแตกต่างระหว่างสเตจเวอร์ชันและสเตจเวอร์ชันทั้งหมดต้องแสดงและตามลำดับในเอาต์พุต ในเฟรมหลักเหล่านี้จะต้องแสดงขนาดเวอร์ชันและผู้ดูควรเข้าใจว่านี่เป็นเวอร์ชั่นสมบูรณ์ที่พวกเขาเห็นอยู่ ณ จุดนั้น
  • โปรแกรมไม่สามารถใช้รหัสบุคคลที่สามใด ๆ ในการคำนวณส่วนต่าง
  • เอาต์พุตการไฮไลต์ไวยากรณ์เป็นทางเลือก หากโปรแกรมระบายสีไวยากรณ์มันอาจไม่ใช้รหัสบุคคลที่สามเพื่อทำเช่นนั้น
  • ผลลัพธ์จะเป็นภาพเคลื่อนไหวแบบ GIF
  • โปรแกรมอาจใช้ห้องสมุดบุคคลที่สามเพื่อเขียน GIF
  • นี่คือเพื่อให้เป็นตามคำนิยามของความนิยมประกวดในเว็บไซต์นี้รายการที่มีมากที่สุดชนะคะแนนโหวต

นี่คือสคริปต์ตัวอย่างง่ายๆที่ใช้ ธndiffและหมอนพื้นฐานเคลื่อนไหวสนับสนุน GIF และเคลื่อนไหวแต่ละเพิ่มและลบขั้นตอน:

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

และหวังว่ารายการยอดนิยมจะกลายเป็นเครื่องมือสนุก ๆ ที่มีประโยชน์สำหรับชุมชน codegolf.stackexchange.com ด้วย ดังนั้นมันจึงน่าชื่นชมถ้าโปรแกรมนั้นง่ายสำหรับผู้อื่นในการเรียกใช้และใช้งาน


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

คำตอบ:


11

(OP)

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งนี้อ้างอิงจากสคริปต์ Python ตัวอย่างในคำถาม

ฉันใช้ระยะทางแก้ไขที่ง่ายที่สุดแทนที่จะใช้ความอดทนที่ฉลาดกว่า

สำหรับการจัดแนวจีโนมมีอัลกอริธึมการจัดตำแหน่งหลายลำดับและพวกเขาสามารถทำงานได้ดียิ่งขึ้นกว่าเพียงแค่พิจารณาเฟรมที่อยู่ติดกันแต่ละคู่?

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

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

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

การสนับสนุน Python สำหรับการเขียน GIF ค่อนข้าง จำกัด PIL ไม่ได้ทำและหมอนก็ทำค่อนข้างแย่ ฉันใช้ Pillow แต่ต้องวิ่งผ่าน gifsicle เพื่อบีบอัดและเพิ่ม looping เป็นต้น หมอนไม่ถูกต้องเขียนกรอบเวลาและไม่อนุญาตให้คุณจัดการวิธีการกำจัด ฯลฯ ซึ่งเป็นความอัปยศเนื่องจากความแตกต่างมีความเข้าใจที่ดีขึ้นในฉากมากกว่าขั้นตอนหลังการประมวลผลที่เกี่ยวข้องกับเฟรมที่แบน :(

รหัสแหล่งที่มา


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