Introducción
Los tangramas son un rompecabezas clásico que involucra la organización / colocación de bloques en varias formas. Del chino 七巧板 - literalmente significa "siete tableros de habilidad". Tomemos esta idea y usemos los siete Tetrominos piezas de para llenar una cuadrícula.
Desafío
Escriba una función o programa que tome una matriz de coordenadas de cuadrícula como entrada y genere una cuadrícula completa de 10 por 20 llena de piezas de Tetris, excepto en las coordenadas especificadas.
Optimice su puntaje intentando mantener la distribución uniforme de las piezas.
Criterios
Utilice este pastebin de coordenadas para realizar su tarea. Hay cinco conjuntos de coordenadas. Siéntase libre de modificar el formato en el que se escriben las coordenadas, pero no los valores.
El conjunto de datos # 2 no se puede resolver; en este caso, simplemente envíe la cuadrícula con las celdas de entrada rellenadas (es decir, X
donde están los agujeros).
Entrada
Las coordenadas de la cuadrícula representan 'agujeros' en la cuadrícula. Estas son células que no pueden contener ninguna parte de un Tetromino.
Coordenadas de cuadrícula:
(0,0), (1,0), (2,0), ... (9,0)
(0,1), (1,1), (2,1), ... (9,1)
.
.
.
(0,19), (1,19), (2,19), ... (9,19)
Use el estilo de matriz de su lenguaje de programación para ingresar las coordenadas.
Representar agujeros en la cuadrícula con un
X
u otro ASCII imprimible .
Salida
Usando un tamaño de cuadrícula Tetris estándar de 10 celdas de ancho por 20 celdas de alto , imprima una cuadrícula de solución si y solo si la cuadrícula se puede llenar completa y perfectamente usando piezas de Tetromino.
Piezas construidas con letras I
, O
, L
, J
, T
, Z
, S
como sigue:
I
I L J
I OO L J T ZZ SS
I OO LL JJ TTT ZZ SS
Ejemplo
Ejemplo de solución de salida sin coordenadas de entrada:
ZZIIIILLLI
JZZTTTLLLI
JJJSTLOOLI
SZZSSLOOLI
SSZZSLLJJI
TSOOSLLJII
TTOOSSLJII
TZOOSSLZII
ZZOOSSZZII
ZJJJJSZLLI
TTTJJOOILI
ITZJJOOILI
IZZTTTLIII
IZOOTZLIII
IJOOZZLLII
LJJJZSSTII
LLLTSSTTTI
LLLTTSSZJI
OOLTSSZZJI
OOIIIIZJJI
Con distribución de la siguiente manera:
I
I L J
I OO L J T ZZ SS
I OO LL JJ TTT ZZ SS
11 6 8 6 6 7 6
Notas
Las coordenadas representan un único X
y una Y
posición en la cuadrícula. La cuadrícula está basada en 0, lo que significa que la coordenada (0,0)
debe ser la celda superior izquierda o inferior izquierda, a elección del autor.
Los ladrillos pueden:
- ser seleccionado a discreción del autor.
- rotar como el autor lo considere conveniente.
- colocarse en la cuadrícula en cualquier lugar a discreción del autor (también conocido como: sin gravedad de Tetris)
Los ladrillos no pueden:
- colocarse fuera de los límites de la cuadrícula.
- solape un ladrillo o agujero existente en la cuadrícula.
- ser una pieza de Tetris tetromino no estándar.
Puntuación
Tu puntuación está en el formato:
(1000 - [bytes en código]) * (M / 10 + 1)
Donde M es un multiplicador para la distribución de piezas utilizadas en sus conjuntos de soluciones.
El puntaje más alto de los idus de marzo gana.
Para calcular M, agregue el valor de distribución de tetromino individual más bajo para cada conjunto y luego tome el promedio redondeado hacia abajo para calcular M.
Por ejemplo:
Set 1: 5
Set 2: 4
Set 3: 5
Set 4: 6
Set 5: 3
6 + 4 + 5 + 4 + 4 = 21/5 = 4.6
Entonces usarías 4
como tu valor M.
Nota: Si un conjunto no tiene solución, no factorice ese conjunto en el cálculo de M, ya que no tendría distribución de tetromino.
fuente
Respuestas:
Python 3 , 819 bytes, M = 0, Puntuación = 181
Este es un programa DFS de fuerza bruta. Construye una matriz numpy e inserta todos los agujeros ingresados. Luego toma el mosaico sin llenar más a la izquierda en la fila más alta que tiene uno, y coloca un tetromino. Recurrentemente, ahora lo hacemos de nuevo: cuando no podemos, encontramos una solución o retrocedemos y probamos otra pieza a la primera oportunidad.
Esto tiene una M de 0, ya que trata de usar piezas en un orden determinado, y casi siempre encuentra una solución sin la última en la lista. Intenté usar una lista ordenada aleatoriamente cada ciclo para hacer una distribución más uniforme, pero solo obtuve una M de 2, que no valía los bytes necesarios para importar random.shuffle .
No puedo comentar el código a continuación, ya que en mi golf hace mucho que olvidé lo que hace. La idea general:
Pruébalo en línea!
Prueba de muestra:
fuente