นี่เป็นภาพ ASCII ที่ค่อนข้างธรรมดาของหนังสือที่เปิดอยู่:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
ขอให้สังเกตว่าส่วนของข้อความนั้นอยู่ที่หน้าขวาเท่านั้นและมีความกว้าง 7 ตัวอักษรโดยสูง 5 นอกจากนี้โปรดสังเกตว่าขอบด้านบนของหนังสือมี 5 แบ็กสแลชและ 10 ขีด 10 มาจากความกว้างของข้อความบวก 3 และ 5 คือครึ่งหนึ่งของ 10
โดยใช้รูปแบบการปรับขนาดเดียวกันกับที่เราสามารถปรับขนาดหนังสือเล่มนี้จะมีพื้นที่ข้อความWตัวอักษรกว้างและเอชสูงที่Wใด ๆแปลกจำนวนเต็มบวกและเอชเป็นจำนวนเต็มบวกใด ๆ
หนังสือw × hบางเล่ม: 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
จำนวนขีดล่างที่ด้านบนจะเป็นw +3 เสมอและจำนวนของเครื่องหมายแบ็กสแลชจะอยู่เสมอ ( w +3) / 2
เป้าหมาย
เขียน progam ที่ใช้ชื่อไฟล์และwและhเป็นอาร์กิวเมนต์บรรทัดคำสั่งและเอาท์พุทหนังสือที่มีขนาดข้อความเหล่านั้นไปยัง stdout โดยแสดงเนื้อหาของไฟล์
เมื่อไฟล์มีข้อความมากกว่าที่จะพอดีในหน้าเดียวN
คีย์ควรพิมพ์หน้าถัดไปและB
ควรกลับไปหน้า ไม่ควรเกิดอะไรขึ้นถ้าB
กดจากหน้าแรกหรือN
กดจากหน้าสุดท้าย โปรแกรมควรหยุดเมื่อQ
กดปุ่ม
ตัวอย่าง
สมมติว่าf.txt
มีและใช้งานได้กดลำดับที่สำคัญLorem ipsum dol?
N N B N N Q
โปรแกรมควรใช้งานดังนี้:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
โปรดสังเกตว่ามีการขึ้นบรรทัดใหม่หลังจากหนังสือทุกเล่มและไม่มีช่องว่างต่อท้าย สิ่งนี้จำเป็น
หมายเหตุ
- คุณอาจคิดว่าไฟล์นั้นมีอักขระ ASCII ที่พิมพ์ได้เท่านั้น(ฐานสิบหกถึง 20)
- พิมพ์หนึ่งตัวละครในแต่ละจุดที่มีอยู่โดยไม่คำนึงถึงขอบเขตของคำ
- wและhเป็นอาร์กิวเมนต์ที่เป็นทางเลือกซึ่งค่าดีฟอลต์คือ 7 และ 5 ตามลำดับ โปรแกรมของคุณจะไม่ได้รับหรือทั้งสองอย่าง (คุณอาจสันนิษฐานว่าอินพุตมีรูปแบบที่ดีเสมอ)
- เติมช่องว่างข้อความใด ๆ ในหน้าสุดท้ายด้วยช่องว่าง
Q
ควรจะยังคงต้องออกหากมีเพียงหนึ่งหน้า
การชนะ
โปรแกรมที่สั้นที่สุดในหน่วยไบต์หลังจากโบนัสถูกนำไปใช้ชนะ
โบนัส
- ลบช่องว่างนำหน้าเพื่อให้ทุกบรรทัดเริ่มต้นด้วยคำ (หรือส่วนคำ) เช่นในตัวอย่างแรกจะกลายเป็น
| amet, |
| amet, c |
(-30 ไบต์) - ล้างหน้าจอของหนังสือที่วาดก่อนหน้านี้หลังจาก
N
หรือB
กด (และT
ถ้าคุณทำโบนัสหลังจากนี้) เพื่อให้ดูเหมือนว่าหนังสือหน้าการเปลี่ยนแปลงในสถานที่ (-20 ไบต์) กำหนดให้
T
ปุ่มสลับระหว่างข้อความที่ถูกดึงจากซ้ายไปขวาบนลงล่าง (ค่าเริ่มต้น) ถึงบนซ้ายไปขวาจากบนลงล่าง หากคุณได้โบนัสแรกมาแล้วควรทำงานกับคอลัมน์ในโหมดจากบนลงล่าง (-100 ไบต์)ตัวอย่างเช่น:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|
กลายเป็น
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H