Wenn die Schüler zum ersten Mal in der Beweistechnik der mathematischen Induktion unterrichtet werden , ist ein häufiges Beispiel das Problem, ein 2 N × 2 N- Gitter mit L-förmigen Trominos zu kacheln , wobei ein vorgegebener Gitterraum leer bleibt . (N ist eine nicht negative ganze Zahl.)
Ich überlasse es Ihnen, den Beweis durchzugehen, wenn Sie es nicht bereits wissen. Es gibt viele Ressourcen, die darüber diskutieren.
Ihre Aufgabe hier ist es, ein Programm zu schreiben, das einen Wert für N sowie die Koordinaten des Gitterraums leer lässt und eine ASCII-Darstellung des resultierenden Gitters mit Tromino-Kacheln ausgibt.
Der Charakter O
wird den leeren Raum füllen und die 4 Umdrehungen unseres Trominos werden so aussehen:
|
+-
|
-+
-+
|
+-
|
(Ja, es kann zweideutig sein, was +
zu welchem -
und |
für bestimmte Arrangements gehört, aber das ist in Ordnung.)
Ihr Programm muss für N = 0 (für ein 1 × 1-Raster) bis mindestens N = 8 (für ein 256 × 256-Raster) funktionieren. Es werden x- und y-Werte angegeben, die die Koordinaten für Folgendes sind O
:
- x ist die horizontale Achse. x = 1 ist die linke Gitterkante, x = 2 N ist die rechte Gitterkante.
- y ist die vertikale Achse. y = 1 ist die obere Gitterkante, y = 2 N ist die untere Gitterkante.
Sowohl x als auch y liegen immer im Bereich [1, 2 N ].
Für ein gegebenes N, x und y muss Ihr Programm also ein 2 N × 2 N- Gitter drucken , das vollständig mit L-förmigen Trominos gekachelt ist, mit Ausnahme der x, y-Gitterkoordinate, die eine sein wird O
.
Beispiele
Wenn N = 0 ist, müssen x und y beide 1 sein. Die Ausgabe ist einfach
O
Wenn N = 1, x = 1 und y = 2, wäre die Ausgabe
-+
O|
N = 2, x = 3, y = 2:
+--+
||O|
|+-|
+--+
N = 2, x = 4, y = 1:
+-|O
||+-
|+-|
+--+
N = 3, x = 3, y = 6 (zB das Bild auf dieser Seite ):
+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
||O|-+||
|+-||-+|
+--++--+
Einzelheiten
- Sie können eine Funktion schreiben, die die 3 ganzen Zahlen enthält, anstatt ein ganzes Programm zu schreiben. Es sollte die Rasterzeichenfolge drucken oder zurückgeben.
- Nehmen Sie Eingaben von stdin, der Befehlszeile (oder von Funktionsargumenten, wenn Sie eine Funktion schreiben).
- Die Ausgabe kann optional eine einzelne Trainingszeile enthalten.
- Sie sind nicht erforderlich verwenden , um die Kachelmethode , dass der Nachweis der Regel vermuten läßt. Es kommt nur darauf an, dass das Gitter neben dem mit L-förmigen Trominos gefüllt ist
O
. (Trominos dürfen nicht geschnitten werden oder die Gittergrenzen überschreiten.)
Der kürzeste Code in Bytes gewinnt. Tiebreaker ist früherer Beitrag. ( Handy-Byte-Zähler. )
if p!=i
; die Liste im Inneren.join()
braucht nicht[]
;(1-i%2)
kann gemacht werden als~i%2
; Sie können iterable schreiben verwenden Auspackent,l,a=[],...
wie*t,l,a=...
;if n==0
kann geprüft werden alsif n<1
weiln
nicht negativ sein kann; Das Finale"\n".join
kann wahrscheinlich durch Drucken jedes Elements erreicht werden, da allgemeine Regeln das Drucken anstelle des Zurückgebens erlauben. Diesif p!=i
kann daran liegen,if p-i
dass Werte ungleich Null die Wahrheit sind.