Quando agli studenti viene insegnato per la prima volta la tecnica di dimostrazione dell'induzione matematica , un esempio comune è il problema della piastrellatura di una griglia 2 N × 2 N con tromino a forma di L , lasciando vuoto uno spazio della griglia predeterminato. (N è un numero intero non negativo.)
Lascerò a te di esaminare la prova se non la conosci già. Ci sono molte risorse che ne discutono.
Il tuo compito qui è scrivere un programma che accetta un valore per N, così come le coordinate dello spazio della griglia da lasciare vuoto e stampare una rappresentazione ASCII della griglia piastrellata tromino risultante.
Il personaggio O
riempirà lo spazio vuoto e le 4 rotazioni del nostro tromino appariranno così:
|
+-
|
-+
-+
|
+-
|
(Sì, può essere ambiguo che si +
accompagna a quale -
e|
per alcuni accordi, ma va bene.)
Il programma deve funzionare per N = 0 (per una griglia 1 × 1) fino ad almeno N = 8 (per una griglia 256 × 256). Verranno dati i valori xey che sono le coordinate per O
:
- x è l'asse orizzontale. x = 1 è il bordo sinistro della griglia, x = 2 N è il bordo destro della griglia.
- y è l'asse verticale. y = 1 è il bordo della griglia superiore, y = 2 N è il bordo della griglia inferiore.
Sia x che y sono sempre nell'intervallo [1, 2 N ].
Quindi per un dato N, xey, il tuo programma deve stampare un 2 N × 2 N griglia , completamente piastrellata con tromino a forma di L, ad eccezione della coordinata della griglia x, y che sarà un O
.
Esempi
Se N = 0, allora xey devono essere entrambi 1. L'output è semplicemente
O
Se N = 1, x = 1 e y = 2, l'output sarebbe
-+
O|
N = 2, x = 3, y = 2:
+--+
||O|
|+-|
+--+
N = 2, x = 4, y = 1:
+-|O
||+-
|+-|
+--+
N = 3, x = 3, y = 6 (ad esempio l'immagine in questa pagina ):
+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
||O|-+||
|+-||-+|
+--++--+
Dettagli
- È possibile scrivere una funzione che accetta i 3 numeri interi invece di scrivere un intero programma. Dovrebbe stampare o restituire la stringa della griglia.
- Prendi input da stdin, dalla riga di comando (o args di funzione se scrivi la funzione).
- L'output può contenere facoltativamente una singola riga di training.
- Non è necessario utilizzare il metodo di piastrellatura normalmente suggerito dalla prova. Importa solo che la griglia sia piena di tromino a forma di L oltre a
O
. (I tromino non possono essere tagliati o uscire dai limiti della griglia.)
Vince il codice più breve in byte. Tiebreaker è post precedente. ( Pratico contatore di byte. )
if p!=i
; l'elenco all'interno.join()
non è necessario[]
;(1-i%2)
può essere fatto come~i%2
; puoi usare iterable unpacking per scriveret,l,a=[],...
come*t,l,a=...
;if n==0
può essere controllato comeif n<1
perchén
non può essere negativo; il finale"\n".join
può probabilmente essere fatto stampando ogni elemento, poiché le regole generali consentono la stampa al posto del ritorno;if p!=i
può essereif p-i
perché valori diversi da zero sono Verità.