Oto dość proste przedstawienie otwartej książki w ASCII:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Zauważ, że fragment tekstu jest tylko na prawej stronie i ma 7 znaków szerokości i 5 wysokości. Zauważ również, że górna krawędź książki ma 5 ukośników odwrotnych i 10 znaków podkreślenia. 10 pochodzi od szerokości tekstu plus 3, a 5 to połowa 10.
Stosując ten sam format skalowania możemy zmienić rozmiar książkę mieć obszar tekstu wagowo znaków szerokich i h High, gdzie w jest jakiś dziwny dodatnia i h jest dowolną liczbą całkowitą dodatnią.
Niektóre książki w × h : 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
Liczba znaków podkreślenia u góry wynosi zawsze w +3, a liczba odwrotnych ukośników wynosi zawsze ( w +3) / 2.
Cel
Napisz progam która przyjmuje nazwę pliku i w i h jako argumentów wiersza poleceń i wysyła książkę z tych wymiarów tekst na standardowe wyjście, wyświetlając zawartość pliku.
Gdy plik zawiera więcej tekstu niż zmieści się na jednej stronie, N
klawisz powinien wydrukować następną stronę i B
powrócić na stronę. Nic nie powinno się zdarzyć, jeśli B
zostanie naciśnięty z pierwszej strony lub N
zostanie naciśnięty z ostatniej strony. Program powinien zatrzymać się po Q
naciśnięciu klawisza.
Przykład
Załóżmy, że f.txt
zawiera Lorem ipsum dol?
i użytkownik nacisnął sekwencję klawiszy N N B N N Q
. Program powinien uruchomić coś takiego:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Zauważ, że po każdej książce jest nowa linia i brak spacji. To jest wymagane.
Notatki
- Możesz założyć, że plik zawiera tylko drukowalne znaki ASCII (szesnastkowo od 20 do 7E).
- Wydrukuj jeden znak w każdym dostępnym miejscu, niezależnie od granic słów.
- w i h są opcjonalnymi argumentami, które domyślnie wynoszą odpowiednio 7 i 5. Twój program nie otrzyma ani jednego, ani jednego i drugiego. (Możesz założyć, że dane wejściowe są zawsze dobrze sformułowane).
- Wypełnij puste miejsce na ostatniej stronie spacjami.
Q
nadal powinno być wymagane zamknięcie, jeśli jest tylko jedna strona.
Zwycięski
Najkrótszy program w bajtach po zastosowaniu bonusów wygrywa.
Bonusy
- Usuń spacje wiodące, aby każda linia zaczynała się od słowa (lub segmentu słowa). np.
| amet, |
w pierwszym przykładzie stałoby się| amet, c |
. (-30 bajtów) - Wyczyść ekran poprzednio narysowanych książek po naciśnięciu
N
lubB
naciśnięciu (iT
jeśli zrobisz bonus po tym), aby książka wyglądała, jakby zmieniała strony na swoim miejscu. (-20 bajtów) Spraw, aby
T
klawisz błyskawicznie przełączał się między rysowanym tekstem od lewej do prawej od góry do dołu (domyślnie), od góry do dołu od lewej do prawej. Jeśli zrobiłeś pierwszą premię, powinien działać dla kolumn w trybie od góry do dołu. (-100 bajtów)Na przykład:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|
staje się
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
źródło
\033[2J\033[;H
Odpowiedzi:
C # 535 bajtów
Wynik to 655 bajtów kodu -20 bajtów premii za wyczyszczenie i -100 bajtów premii za klawisz T ... Myślę, że nie mogę powiedzieć, że jestem pewien, że niczego nie przeoczyłem w specyfikacji
Mogę spróbować zwinąć pętle, zwracając argument W przez metodę W, ale wymagałoby to wysiłku, więc żadnych obietnic.
Kod do gry w golfa:
Trochę sformatowany:
źródło
Jawa,
10391001993953946Z premią: Usuń wiodące spacje (-30 bajtów) ->
1009971963923916Wyczyszczenie ekranu nie jest tego warte w Javie (chyba że wydrukuję tylko kilka nowych linii. Ale wtedy użytkownik musi użyć właściwego rozmiaru konsoli)
Kod:
Ładny:
Jeśli program nie musi działać wiecznie, mógłbym również zaoszczędzić trochę bajtów, usuwając pętlę while i po prostu wywołując main.
To nie jest optymalne, ale to początek.
źródło
public
słów kluczowych ... Czyimport java.*;
działa?import java.*;
też, ale to nie działa. A główna metoda musi być dokładniepublic static void main(String[]c)
(w tympublic
), w przeciwnym razie nie zostanie rozpoznana. Ale klasa oczywiście nie musi być publiczna, dobry haczyk.