Hier ist eine ziemlich einfache ASCII-Darstellung eines offenen Buches:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Beachten Sie, dass sich der Textabschnitt nur auf der rechten Seite befindet und 7 Zeichen breit und 5 hoch ist. Beachten Sie auch, dass der obere Rand des Buches 5 Backslashes und 10 Unterstriche aufweist. Die 10 kommt aus der Textbreite plus 3 und die 5 ist die Hälfte von 10.
Mit demselben Skalierungsformat können wir die Größe des Buches so ändern, dass der Textbereich w Zeichen breit und h hoch ist, wobei w eine ungerade positive Ganzzahl und h eine beliebige positive Ganzzahl ist.
Einige w × h Bücher: 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
Die Anzahl der Unterstriche oben beträgt immer w +3 und die Anzahl der Backslashes beträgt immer ( w +3) / 2.
Tor
Schreiben Sie ein Programm, das einen Dateinamen und w und h als Befehlszeilenargumente verwendet und ein Buch mit diesen Textabmessungen an stdout ausgibt, wobei der Inhalt der Datei angezeigt wird .
Wenn die Datei mehr Text enthält, als auf eine Seite passt, N
sollte der Schlüssel die nächste Seite drucken und B
eine Seite zurückgehen. Es sollte nichts passieren, wenn B
von der ersten Seite oder N
von der letzten Seite gedrückt wird. Das Programm sollte anhalten, wenn die Q
Taste gedrückt wird.
Beispiel
Angenommen, f.txt
enthält Lorem ipsum dol?
und der Benutzer hat die Tastenfolge gedrückt N N B N N Q
. Das Programm sollte ungefähr so laufen:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Beachten Sie, dass nach jedem Buch eine neue Zeile und keine nachgestellten Leerzeichen stehen. Dies ist erforderlich.
Anmerkungen
- Sie können davon ausgehen, dass die Datei nur druckbare ASCII-Zeichen enthält (Hex 20 bis 7E).
- Drucken Sie unabhängig von den Wortgrenzen ein Zeichen an jeder verfügbaren Stelle.
- w und h sind optionale Argumente, die standardmäßig 7 bzw. 5 sind. Ihr Programm erhält entweder keine oder beide. (Sie können davon ausgehen, dass die Eingabe immer gut geformt ist.)
- Füllen Sie alle leeren Textbereiche auf der letzten Seite mit Leerzeichen.
Q
sollte immer noch zum Beenden erforderlich sein, wenn nur eine Seite vorhanden ist.
Gewinnen
Das kürzeste Programm in Bytes nach Anwendung der Boni gewinnt.
Boni
- Entfernen Sie führende Leerzeichen, sodass jede Zeile mit einem Wort (oder Wortsegment) beginnt. zB
| amet, |
im ersten Beispiel würde werden| amet, c |
. (-30 Bytes) - Löschen Sie den Bildschirm von zuvor gezeichneten Büchern, nachdem Sie diese gedrückt haben
N
oderB
gedrückt haben (undT
wenn Sie den Bonus danach ausführen), damit das Buch so aussieht, als ob die Seiten wechseln. (-20 Bytes) Lassen Sie die
T
Taste sofort zwischen dem von links nach rechts von oben nach unten (Standardeinstellung) gezeichneten Text und von links nach rechts von oben nach unten wechseln. Wenn Sie den ersten Bonus gemacht haben, sollte er für Spalten im Top-to-Bottom-Modus funktionieren. (-100 Bytes)Also zum Beispiel:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|
wird
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H