Ecco una rappresentazione ASCII abbastanza semplice di un libro aperto:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Si noti che la parte di testo è solo sulla pagina giusta ed è larga 7 caratteri per 5 di altezza. Nota anche che il bordo superiore del libro ha 5 barre rovesciate e 10 caratteri di sottolineatura. Il 10 viene dalla larghezza del testo più 3 e il 5 è la metà di 10.
Utilizzando lo stesso formato di scala possiamo ridimensionare il libro di avere un'area di testo w caratteri di larghezza e h alta, dove w è un qualsiasi dispari numero intero positivo e h è un qualsiasi numero intero positivo.
Alcuni libri w × h : 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
Il numero di trattini bassi in alto è sempre w +3 e il numero di barre rovesciate è sempre ( w +3) / 2.
Obbiettivo
Scrivere un progamma che prende un nome di file e w e h come argomenti della riga di comando, ed emette un libro con quelle dimensioni di testo a stdout, che visualizza il contenuto del file.
Quando il file ha più testo di quello che si adatta a una pagina, il Ntasto dovrebbe stampare la pagina successiva e Bdovrebbe tornare indietro di una pagina. Non dovrebbe succedere nulla se Bviene premuto dalla prima pagina o Ndall'ultima pagina. Il programma dovrebbe fermarsi quando si Qpreme il tasto.
Esempio
Supponiamo che f.txtcontenga Lorem ipsum dol?e l'utente abbia premuto la sequenza di tasti N N B N N Q. Il programma dovrebbe eseguire qualcosa del genere:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Nota che c'è una nuova riga dopo ogni libro e nessuno spazio finale. Questo è richiesto
Appunti
- Si può presumere che il file contenga solo caratteri ASCII stampabili (esadecimale da 20 a 7E).
- Stampa un carattere in ogni punto disponibile, indipendentemente dai limiti delle parole.
- w e h sono argomenti opzionali predefiniti rispettivamente a 7 e 5. Il tuo programma non verrà fornito né in entrambi né in entrambi. (Si può presumere che l'input sia sempre ben formato.)
- Riempi qualsiasi spazio di testo vuoto nell'ultima pagina con spazi.
Qdovrebbe comunque essere richiesto di uscire se esiste solo una pagina.
vincente
Vince il programma più breve in byte dopo l'applicazione dei bonus.
bonus
- Rimuovi gli spazi iniziali in modo che ogni riga inizi con una parola (o segmento di parole). ad esempio
| amet, |nel primo esempio diventerebbe| amet, c |. (-30 byte) - Cancella lo schermo dei libri precedentemente disegnati dopo
NoBviene premuto (eTse fai il bonus dopo questo) in modo che il libro sembri cambiare le pagine in atto. (-20 byte) Fai in modo che la
Tchiave passi istantaneamente tra il testo disegnato da sinistra a destra dall'alto verso il basso (impostazione predefinita), dall'alto verso il basso da sinistra a destra. Se hai fatto il primo bonus, dovrebbe funzionare per le colonne nella modalità dall'alto verso il basso. (-100 byte)Quindi per esempio:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|diventa
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H