Reto de girado de una pieza de tetris [Disponible para cualquier lenguaje]

  • 3 Respuestas
  • 480 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

*

Desconectado gammafp

Reto de girar una pieza.



Imaginemos que tenemos piezas de un juego de tetris guardadas en un array bi-dimensional por ejemplo la pieza "z" del tetris:

La pieza de tetris se guarda en un array bi-dimensional que tiene una estructura similar a esta:
[ [1, 1, 0],
  [0, 1, 1] ]

Donde los 1 representan cuadros donde estará la pieza y los 0 son espacios vacíos.
Nos piden crear una función que al pasar como parámetro el array anterior este haga girar la pieza del tetris hacía la derecha y nos devuelva el array con la nueva forma.


[ [0, 1],
  [1, 1],
   [1, 0] ]

Podéis realizar las siguientes pruebas con diferentes piezas

Pieza en forma de T
[[1, 1, 1], [0, 1, 0], [0, 1, 0]]
Su resultado despues de pasar por la función es: [[0, 0, 1] , [1, 1, 1], [0, 0, 1]]

Pieza en forma de L:
[[1, 0], [1, 0], [1, 1]]
Su resultado después de pasar por la función es: [[1, 1, 1], [1, 0, 0]]



Os animo a hacer este ejercicio y a publicar vuestras respuesta en vuestros lenguajes favoritos.

Publicad el código hecho y el resultado del programa funcionando y demostrando que la pieza está girada.

Suerte y hasta pronto.
« Última modificación: Diciembre 27, 2016, 11:53:21 pm por gammafp »

*

Desconectado LittleJ

Re:Reto de girado de una pieza de tetris [Disponible para cualquier lenguaje]
« Respuesta #1 en: Diciembre 27, 2016, 08:03:27 pm »
Código: python
pieza = [[1, 1, 0], [0, 1, 1]]
nueva_pieza = []

altura = len(pieza[0])
ancho = len(pieza)

for i in range(0, altura):
nueva_pieza.append([])
for j in range(0, ancho):
nueva_pieza[i].append(pieza[j][i])


nueva_pieza.reverse()
print nueva_pieza

*

Desconectado gammafp

Re:Reto de girado de una pieza de tetris [Disponible para cualquier lenguaje]
« Respuesta #2 en: Diciembre 27, 2016, 09:51:01 pm »
Spoiler para Oculto:
No tienes permiso para ver enlaces. Registrarme ó Logearme
Código: python
pieza = [[1, 1, 0], [0, 1, 1]]
nueva_pieza = []

altura = len(pieza[0])
ancho = len(pieza)

for i in range(0, altura):
nueva_pieza.append([])
for j in range(0, ancho):
nueva_pieza[i].append(pieza[j][i])


nueva_pieza.reverse()
print nueva_pieza


Excelente respuesta  ImJustaLearner me has sorprendido en tu respuesta, usar reverse() para poder invertir el arreglo es una excelente idea :), sin embargo cuando se pasan otras piezas tu función flaquea, por ejemplo si se pasa la pieza L ( [[1, 0],[1, 0], [1, 1]] ) esta devuelve la siguiente lista ( [[0, 0, 1], [1, 1, 1]] ).
« Última modificación: Diciembre 27, 2016, 11:48:46 pm por gammafp »

*

Desconectado kolesias

Re:Reto de girado de una pieza de tetris [Disponible para cualquier lenguaje]
« Respuesta #3 en: Diciembre 28, 2016, 06:23:10 am »
Código
/// Rota la pieza hacia la derecha
rotateRight( pieceMap )
{
    int length  = pieceMap.length;
    int last    = length - 1;
   
    var newPiece = [];
   
    for( int i = 0; i <= length; ++i ) {
        var section = [];
       
        for( int e = last; e >= 0; --e ) {
            if ( i <= (pieceMap[e].length-1) )
                section.add(pieceMap[e][i]);
        }
       
        if ( section.isNotEmpty )
            newPiece.add(section);
    }
   
    return newPiece;
}

main( List<String> args )
{
    print( rotateRight([[1, 1, 0], [0, 1, 1]]) ); // Z
    print( rotateRight([[1,1,1], [0,1,0], [0,1,0]]) ); // T
    print( rotateRight([[1,0],[1,0],[1,1]]) ); // L
}

Este sería el código para No tienes permiso para ver enlaces. Registrarme ó Logearme. Aunque estoy seguro que se puede simplificar.

También he hecho una versión gráfica:

No tienes permiso para ver enlaces. Registrarme ó Logearme
Demo: No tienes permiso para ver enlaces. Registrarme ó Logearme (Hacer clic para ejecutar la función)

 

Temas relacionados

  Asunto / Iniciado por Respuestas Último mensaje
2 Respuestas
362 Vistas
Último mensaje Septiembre 22, 2016, 08:33:26 am
por System
4 Respuestas
960 Vistas
Último mensaje Abril 21, 2017, 09:42:48 pm
por Cast
7 Respuestas
1166 Vistas
Último mensaje Abril 11, 2017, 08:33:31 pm
por Carlosd4929
7 Respuestas
554 Vistas
Último mensaje Septiembre 19, 2017, 06:54:06 pm
por D4V1K
3 Respuestas
134 Vistas
Último mensaje Septiembre 12, 2018, 04:30:32 pm
por Josemy