Cuando a los estudiantes se les enseña por primera vez sobre la técnica de prueba de inducción matemática , un ejemplo común es el problema de colocar una rejilla de 2 N × 2 N con trominos en forma de L , dejando un espacio de rejilla predeterminado vacío. (N es un número entero no negativo).
Te dejaré que revises la prueba si aún no lo sabes. Hay muchos recursos que lo discuten.
Su tarea aquí es escribir un programa que tome un valor para N, así como las coordenadas del espacio de la cuadrícula para dejarlas vacías, e imprima una representación ASCII de la cuadrícula de mosaicos de tromino resultante.
El personaje O
llenará el espacio vacío, y las 4 rotaciones de nuestro tromino se verán así:
|
+-
|
-+
-+
|
+-
|
(Sí, puede ser ambiguo cuál +
va con qué -
y |
para ciertos arreglos, pero está bien).
Su programa debe funcionar para N = 0 (para una cuadrícula de 1 × 1) hasta al menos N = 8 (para una cuadrícula de 256 × 256). Se le darán valores x e y que son las coordenadas para O
:
- x es el eje horizontal. x = 1 es el borde izquierdo de la cuadrícula, x = 2 N es el borde derecho de la cuadrícula.
- y es el eje vertical. y = 1 es el borde superior de la cuadrícula, y = 2 N es el borde inferior de la cuadrícula.
Tanto x como y siempre están en el rango [1, 2 N ].
Entonces, para un determinado N, x e y, su programa debe imprimir una cuadrícula de 2 N × 2 N , completamente en mosaico con trominoes en forma de L, excepto por la coordenada de la cuadrícula x, y que será un O
.
Ejemplos
Si N = 0, entonces x e y deben ser ambos 1. La salida es simplemente
O
Si N = 1, x = 1 ey = 2, la salida sería
-+
O|
N = 2, x = 3, y = 2:
+--+
||O|
|+-|
+--+
N = 2, x = 4, y = 1:
+-|O
||+-
|+-|
+--+
N = 3, x = 3, y = 6 (por ejemplo, la imagen en esta página ):
+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
||O|-+||
|+-||-+|
+--++--+
Detalles
- Puede escribir una función que tome los 3 enteros en lugar de escribir un programa completo. Debe imprimir o devolver la cadena de la cuadrícula.
- Tome la entrada de stdin, línea de comando, (o args de función si escribe función).
- La salida puede contener opcionalmente una línea de entrenamiento única.
- No es necesario que utilice el método de mosaico que normalmente sugiere la prueba. Solo importa que la cuadrícula esté llena de trominoes en forma de L además del
O
. (Los trominos no se pueden cortar ni salir de los límites de la cuadrícula).
El código más corto en bytes gana. Tiebreaker es una publicación anterior. ( Práctico contador de bytes ) .
if p!=i
; la lista dentro.join()
no necesita[]
;(1-i%2)
se puede hacer como~i%2
; puede usar el desempaquetado iterable para escribirt,l,a=[],...
como*t,l,a=...
;if n==0
puede verificarse comoif n<1
porquen
no puede ser negativo; la final"\n".join
probablemente se puede hacer imprimiendo cada elemento, ya que las reglas generales permiten imprimir en lugar de regresar;if p!=i
puede serif p-i
porque los valores distintos de cero son Verdad.