İş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, Nanahtar sonraki sayfayı yazdırmalı ve Bbir sayfa geriye gitmelidir. Bİlk sayfadan veya Nson sayfadan basılırsa hiçbir şey olmamalıdır . QTuşa basıldığında program durmalıdır .
Misal
Varsayalım f.txtiç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.
Qyalnı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ı
NveyaBdüğmesine basıldıktan sonra temizleyin (veTbundan sonra bonusu yaparsanız), böylece kitap değişen sayfalar yerinde gibi görünür. (-20 bayt) TAnahtarı 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