Berikut ini adalah penggambaran buku terbuka ASCII yang cukup sederhana:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Perhatikan bahwa porsi teks hanya di halaman kanan dan lebar 7 karakter kali 5 tinggi. Perhatikan juga bahwa tepi atas buku ini memiliki 5 garis miring terbalik dan 10 garis bawah. 10 berasal dari lebar teks ditambah 3 dan 5 adalah setengah dari 10.
Dengan menggunakan format skala yang sama kita dapat mengubah ukuran buku untuk memiliki area teks w luas karakter dan h tinggi, di mana w adalah setiap aneh bilangan bulat positif dan h adalah setiap bilangan bulat positif.
Beberapa w × h buku: 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
Jumlah garis bawah di atas selalu w + 3 dan jumlah garis miring terbalik selalu ( w + 3) / 2.
Tujuan
Tulis progam yang menggunakan nama file dan w dan h sebagai argumen baris perintah, dan output buku dengan dimensi teks tersebut menjadi stdout, menampilkan isi file.
Ketika file memiliki lebih banyak teks daripada yang akan muat dalam satu halaman N
kunci harus mencetak halaman berikutnya dan B
harus kembali halaman. Tidak ada yang terjadi jika B
ditekan dari halaman pertama atau N
ditekan dari halaman terakhir. Program harus berhenti ketika Q
tombol dipukul.
Contoh
Misalkan f.txt
berisi Lorem ipsum dol?
dan pengguna telah menekan urutan tombol N N B N N Q
. Program harus menjalankan sesuatu seperti ini:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Perhatikan bahwa ada baris baru setelah setiap buku dan tidak ada spasi tambahan. Ini wajib diisi.
Catatan
- Anda dapat menganggap file hanya berisi karakter ASCII yang dapat dicetak (hex 20 hingga 7E).
- Cetak satu karakter di setiap tempat yang tersedia, terlepas dari batasan kata.
- w dan h adalah argumen opsional yang masing-masing default ke 7 dan 5. Program Anda tidak akan diberikan keduanya atau keduanya. (Anda dapat berasumsi bahwa input selalu terbentuk dengan baik.)
- Isi semua ruang teks kosong di halaman terakhir dengan spasi.
Q
harus tetap diminta untuk berhenti jika hanya ada satu halaman.
Kemenangan
Program terpendek dalam byte setelah bonus diterapkan menang.
Bonus
- Hapus spasi terdepan sehingga setiap baris dimulai dengan kata (atau segmen kata). misalnya
| amet, |
dalam contoh pertama akan menjadi| amet, c |
. (-30 byte) - Kosongkan layar buku yang ditarik sebelumnya setelah
N
atauB
ditekan (danT
jika Anda melakukan bonus setelah ini) sehingga buku itu tampak seperti halaman yang berubah di tempat. (-20 byte) Buat
T
tombol langsung beralih antara teks yang ditarik dari kiri ke kanan atas-ke-bawah (default), ke kiri-ke-kanan atas-ke-bawah. Jika Anda melakukan bonus pertama itu harus bekerja untuk kolom dalam mode top-to-bottom. (-100 byte)Jadi misalnya:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|
menjadi
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H