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 | \||_____|
quelle
\033[2J\033[;H
Antworten:
C # 535 Bytes
Die Punktzahl beträgt 655 Byte Code -20 Byte Bonus für das Löschen und -100 Byte Bonus für T-Taste ... Ich kann nicht sagen, dass ich sicher bin, dass ich etwas in der Spezifikation nicht verpasst habe
Ich kann versuchen, die Schleifen zu reduzieren, indem die W-Methode das Argument s zurückgibt, aber das würde Aufwand erfordern, also keine Versprechen.
Golfcode:
Ein bisschen formatiert:
quelle
Java,
10391001993953946Mit Bonus: Entfernen Sie führende Leerzeichen (-30 Bytes) ->
1009971963923916Das Löschen des Bildschirms lohnt sich mit Java nicht (außer wenn ich nur ein paar Zeilenumbrüche drucke. Dann muss der Benutzer die richtige Konsolengröße verwenden).
Code:
Ziemlich:
Wenn das Programm nicht für immer ausgeführt werden muss, kann ich auch einige Bytes sparen, indem ich die while-Schleife entferne und einfach main aufrufe.
Dies ist nicht optimal, aber es ist ein Anfang.
quelle
public
Schlüsselwörter nicht benötigen ... Funktioniert das auchimport java.*;
?import java.*;
, aber es funktioniert nicht. Und die Hauptmethode muss genaupublic static void main(String[]c)
(einschließlichpublic
) sein, sonst wird sie nicht erkannt. Aber die Klasse muss natürlich nicht öffentlich sein, guter Fang.