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 | \||_____|
sumber
\033[2J\033[;H
Jawaban:
C # 535bytes
Skor kode 655bytes -20byte bonus untuk kliring, dan -100byte bonus untuk kunci T ... Saya pikir, tidak bisa mengatakan saya yakin saya belum melewatkan sesuatu di spec
Saya dapat mencoba dan menutup loop dengan meminta metode W mengembalikan argumen s, tetapi itu membutuhkan usaha, jadi tidak ada janji.
Kode golf:
Diformat sedikit:
sumber
Jawa,
10391001993953946Dengan bonus: Hapus spasi terdepan (-30 byte) ->
1009971963923916Membersihkan layar tidak sesuai dengan java (kecuali jika saya hanya mencetak beberapa baris baru. Tetapi kemudian pengguna harus menggunakan ukuran konsol yang benar)
Kode:
Cantik:
Jika program tidak harus berjalan selamanya, saya juga bisa menyimpan beberapa byte dengan menghapus loop sementara dan hanya memanggil main.
Ini tidak optimal, tapi ini awal.
sumber
public
kata kunci ... Juga, tidakimport java.*;
berfungsi?import java.*;
juga, tetapi tidak berhasil. Dan metode utama memang harus tepatpublic static void main(String[]c)
(termasukpublic
), jika tidak maka tidak dikenali. Tetapi kelas tentu saja tidak harus terbuka untuk umum, tangkapan yang bagus.