9
การบีบอัดข้อความและการบีบอัด -“ ไม่อีกแล้ว”
จากการอภิปรายเมื่อเร็ว ๆ นี้เกี่ยวกับการใช้เครื่องมือบีบอัดในโค้ดกอล์ฟฉันคิดว่ามันเป็นความท้าทายที่ดีในการเขียนตัวบีบอัดข้อความและตัวขยายการบีบอัดของคุณเอง ท้าทาย: เขียนโปรแกรมสองโปรแกรม : โปรแกรมหนึ่งเพื่อบีบอัดข้อความ ASCII เป็นลำดับไบต์และอีกโปรแกรมหนึ่งเพื่อขยายไฟล์ โปรแกรมไม่จำเป็นต้องเป็นภาษาเดียวกัน โปรแกรมแรกควรอ่านส่วนของข้อความ ASCII (จากไฟล์หรือจากอินพุตมาตรฐานหรือใช้กลไกใดก็ตามที่เป็นธรรมชาติที่สุดในภาษา) และส่งออกเวอร์ชันบีบอัดของมัน (เอาท์พุทที่บีบอัดอาจประกอบด้วยหรือโดยพลการไบต์ไม่จำเป็นต้องอ่าน) โปรแกรมที่สองควรอ่านผลลัพธ์ของแรกและสร้างข้อความอินพุตเดิม เกณฑ์การให้คะแนน: คะแนนของการแก้ปัญหาจะเป็นผลรวมของการนับสามต่อไปนี้: ความยาวของคอมเพรสเซอร์โปรแกรมในตัวละคร ความยาวของการส่งออกของคอมเพรสเซอร์ได้รับการป้อนข้อมูลการทดสอบด้านล่างไบต์ ความยาวของ decompressorโปรแกรม (ถ้าแตกต่างจากคอมเพรสเซอร์) ในตัวละคร คุณควรสังเกตการนับทั้งสามและผลรวมของคำตอบของคุณ ตั้งแต่นี้เป็นรหัสกอล์ฟที่ต่ำกว่าคะแนนที่ดีกว่า กฎและข้อ จำกัด : คุณไม่สามารถใช้เครื่องมือหรือไลบรารีการบีบอัดหรือการคลายการบีบอัดใด ๆ ที่มีอยู่ก่อนแม้ว่าจะมาพร้อมกับภาษาที่คุณเลือก หากมีข้อสงสัยเกี่ยวกับการอนุญาตให้ใช้เครื่องมือหรือฟังก์ชั่นที่กำหนดโปรดถาม โปรแกรมคอมเพรสเซอร์ของคุณต้องสามารถจัดการอินพุตที่ประกอบด้วยข้อความ ASCII ที่พิมพ์ได้รวมถึงแท็บ (ASCII 9) และฟีดบรรทัด (ASCII 10) คุณอาจ แต่ไม่จำเป็นต้องจัดการกับ Unicode และ / หรืออินพุตแบบไบนารีโดยพลการ โปรแกรมตัวขยายการบีบอัดของคุณจะต้องสร้างเอาต์พุตที่ตรงตามที่ได้รับกับคอมเพรสเซอร์เหมือนกับอินพุต โดยเฉพาะอย่างยิ่งระวังอย่าให้มีการป้อนบรรทัดต่อท้ายหากอินพุตไม่มี (อินพุตทดสอบด้านล่างมีฟีดบรรทัดต่อท้ายดังนั้นคุณจะต้องทดสอบแยกต่างหากเคล็ดลับสำหรับ …