İşte açık bir kitabın oldukça basit bir ASCII tasviri:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Metin bölümünün yalnızca sağ sayfada olduğunu ve 7 karakter genişliğinde ve 5 yüksekliğinde olduğuna dikkat edin. Ayrıca kitabın üst kenarında 5 ters eğik çizgi ve 10 alt çizgi olduğunu unutmayın. 10, metin genişliği artı 3'ten gelir ve 5, 10'un yarısıdır.
Aynı ölçeklendirme formatını kullanarak, kitabı w karakterleri geniş ve h yüksekliğinde bir metin alanına sahip olacak şekilde yeniden boyutlandırabiliriz; burada w herhangi bir tek pozitif tam sayı ve h herhangi bir pozitif tam sayıdır.
Bazı W x h kitaplar: 1 x 1, 1 x 2, 3 x 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
Üstteki alt çizgi sayısı her zaman w +3 ve ters eğik çizgi sayısı her zaman ( w +3) / 2'dir.
Hedef
Komut satırı bağımsız değişkenleri olarak bir dosya adı ve w ve h alan bir program yazın ve stdout'a bu metin boyutlarına sahip bir kitap çıktısıyla dosyanın içeriğini görüntüleyin.
Dosya bir sayfaya sığmayacak kadar metin içeriyorsa, N
anahtar sonraki sayfayı yazdırmalı ve B
bir sayfa geriye gitmelidir. B
İlk sayfadan veya N
son sayfadan basılırsa hiçbir şey olmamalıdır . Q
Tuşa basıldığında program durmalıdır .
Misal
Varsayalım f.txt
içeren Lorem ipsum dol?
ve kullanıcı anahtar dizisi bastı N N B N N Q
. Program şöyle bir şey çalıştırmalıdır:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Her kitaptan sonra yeni bir satır olduğuna ve sondaki boşluk olmadığına dikkat edin. Bu gereklidir.
notlar
- Dosyanın yalnızca yazdırılabilir ASCII karakterleri (onaltılık 20 ila 7E) içerdiğini varsayabilirsiniz .
- Sözcük sınırlarına bakılmaksızın, kullanılabilir her noktaya bir karakter yazdırın.
- w ve h olan isteğe bağlı argümanlar varsayılan 7 ve 5, sırasıyla. Programınıza ya hiçbiri ya da ikisi birden verilmeyecektir. (Girdinin her zaman iyi biçimlendirildiğini varsayabilirsiniz.)
- Son sayfadaki boş metin alanlarını boşluklarla doldurun.
Q
yalnızca bir sayfa varsa yine de çıkmanız gerekir.
Kazanan
Bonuslar uygulandıktan sonra bayt cinsinden en kısa program kazanır.
Bonuslar
- Baştaki boşlukları kaldırın, böylece her satır bir kelime (veya kelime parçası) ile başlar. örneğin
| amet, |
ilk örnekte olur| amet, c |
. (-30 bayt) - Önceden çizilen kitapların ekranını
N
veyaB
düğmesine basıldıktan sonra temizleyin (veT
bundan sonra bonusu yaparsanız), böylece kitap değişen sayfalar yerinde gibi görünür. (-20 bayt) T
Anahtarı soldan sağa yukarıdan aşağıya doğru (varsayılan), soldan sağa doğru yukarıdan aşağıya doğru çizilen metin arasında anında geçiş yapın . İlk bonusu yaptıysanız, yukarıdan aşağıya modda sütunlar için çalışmalıdır. (-100 bayt)Yani mesela:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|
olur
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H