Girar una array 180 grados

Dada una array cuadrada, la tarea es que la giremos 180 grados en sentido contrario a las agujas del reloj sin usar ningún espacio extra. 

Ejemplos: 

Input :  1  2  3
         4  5  6
         7  8  9
Output : 9 8 7 
         6 5 4 
         3 2 1

Input :  1 2 3 4 
         5 6 7 8 
         9 0 1 2 
         3 4 5 6 
Output : 6 5 4 3 
         2 1 0 9 
         8 7 6 5 
         4 3 2 1

Método: 1 (Solo imprime array rotada) 
La solución a este problema es que para rotar una array 180 grados podemos seguir fácilmente ese paso 

Matrix =  a00 a01 a02
          a10 a11 a12
          a20 a21 a22

when we rotate it by 90 degree
then matrix is
Matrix = a02 a12 a22
         a01 a11 a21
         a00 a10 a20
  
when we rotate it by again 90 
degree then matrix is 
Matrix = a22 a21 a20
         a12 a11 a10
         a02 a01 a00 

De la ilustración anterior , obtenemos que simplemente para rotar la array 180 grados, tendremos que imprimir la array dada de manera inversa.

C++

// C++ program to rotate a matrix by 180 degrees
#include <bits/stdc++.h>
#define N 3
using namespace std;
 
// Function to Rotate the matrix by 180 degree
void rotateMatrix(int mat[][N])
{
    // Simply print from last cell to first cell.
    for (int i = N - 1; i >= 0; i--) {
        for (int j = N - 1; j >= 0; j--)
            printf("%d ", mat[i][j]);
 
        printf("\n");
    }
}
 
// Driven code
int main()
{
    int mat[N][N] = {
        { 1, 2, 3 },
        { 4, 5, 6 },
        { 7, 8, 9 }
    };
 
    rotateMatrix(mat);
    return 0;
}

Java

// Java program to rotate a
// matrix by 180 degrees
import java.util.*;
 
class GFG {
    static int N = 3;
 
    // Function to Rotate the
    // matrix by 180 degree
    static void rotateMatrix(int mat[][])
    {
 
        // Simply print from last
        // cell to first cell.
        for (int i = N - 1; i >= 0; i--) {
            for (int j = N - 1; j >= 0; j--)
                System.out.print(mat[i][j] + " ");
 
            System.out.println();
        }
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int[][] mat = { { 1, 2, 3 },
                        { 4, 5, 6 },
                        { 7, 8, 9 } };
 
        rotateMatrix(mat);
    }
}
 
// This code is contributed by ChitraNayal

Python3

# Python3 program to
# rotate a matrix by
# 180 degrees
N = 3;
 
# Function to Rotate
# the matrix by 180 degree
def rotateMatrix(mat):
     
    # Simply print from
    # last cell to first cell.
    i = N - 1;
    while(i >= 0):
        j = N - 1;
        while(j >= 0):
            print(mat[i][j], end = " ");
            j = j - 1;
        print();
        i = i - 1;
 
# Driven code
mat = [[1, 2, 3],
       [ 4, 5, 6 ],
       [ 7, 8, 9 ]];
rotateMatrix(mat);
 
# This code is contributed
# by mits

C#

// C# program to rotate a
// matrix by 180 degrees
using System;
 
class GFG {
    static int N = 3;
 
    // Function to Rotate the
    // matrix by 180 degree
    static void rotateMatrix(int[, ] mat)
    {
        // Simply print from last
        // cell to first cell.
        for (int i = N - 1; i >= 0; i--) {
            for (int j = N - 1; j >= 0; j--)
                Console.Write(mat[i, j] + " ");
 
            Console.WriteLine();
        }
    }
 
    // Driver Code
    static public void Main()
    {
        int[, ] mat = { { 1, 2, 3 },
                        { 4, 5, 6 },
                        { 7, 8, 9 } };
 
        rotateMatrix(mat);
    }
}
 
// This code is contributed by aj_36

PHP

<?php
// PHP program to rotate
// a matrix by 180 degree
$N = 3;
 
// Function to Rotate the
// matrix by 180 degree
function rotateMatrix($mat)
{
    global $N;
     
    // Simply print from
    // last cell to first cell.
    for ($i = $N - 1; $i >= 0; $i--)
    {
        for ($j = $N - 1; $j >= 0; $j--)
            echo $mat[$i][$j], " ";
         
    echo "\n";
    }
}
 
// Driver Code
$mat = array(array(1, 2, 3),
             array(4, 5, 6),
             array(7, 8, 9));
 
rotateMatrix($mat);
 
// This code is contributed by ajit
?>

Javascript

<script>
 
// Javascript program to rotate a
// matrix by 180 degrees
N = 3;
 
// Function to Rotate the
// matrix by 180 degree
function rotateMatrix(mat)
{
     
    // Simply print from last
    // cell to first cell.
    for(var i = N - 1; i >= 0; i--)
    {
        for(var j = N - 1; j >= 0; j--)
            document.write(mat[i][j] + " ");
 
        document.write("<br>");
    }
}
 
// Driver Code
var mat = [ [ 1, 2, 3 ],
            [ 4, 5, 6 ],
            [ 7, 8, 9 ] ];
 
rotateMatrix(mat);
 
// This code is contributed by kirti
 
</script>

Producción : 

 9 8 7 
 6 5 4 
 3 2 1  

Complejidad temporal: O(N*N) 
Espacio auxiliar: O(1)

Método: 2 (Rotación en el lugar) 
Hay cuatro pasos: 
1- Encuentra la transposición de una array. 
2- Columnas inversas de la transpuesta. 
3- Hallar la transpuesta de una array. 
4- Columnas inversas de la transpuesta

Let the given matrix be
1  2  3  4
5  6  7  8
9  10 11 12
13 14 15 16

First we find transpose.
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

Then we reverse elements of every column.
4 8 12 16
3 7 11 15
2 6 10 14
1 5  9 13

then transpose again 
4 3 2 1 
8 7 6 5 
12 11 10 9
16 15 14 13 

Then we reverse elements of every column again
16 15 14 13 
12 11 10 9 
8 7 6 5 
4 3 2 1

C++

// C++ program for left rotation of matrix by 180
#include <bits/stdc++.h>
using namespace std;
 
#define R 4
#define C 4
 
// Function to rotate the matrix by 180 degree
void reverseColumns(int arr[R][C])
{
    for (int i = 0; i < C; i++)
        for (int j = 0, k = C - 1; j < k; j++, k--)
            swap(arr[j][i], arr[k][i]);
}
 
// Function for transpose of matrix
void transpose(int arr[R][C])
{
    for (int i = 0; i < R; i++)
        for (int j = i; j < C; j++)
            swap(arr[i][j], arr[j][i]);
}
 
// Function for display the matrix
void printMatrix(int arr[R][C])
{
    for (int i = 0; i < R; i++) {
        for (int j = 0; j < C; j++)
            cout << arr[i][j] << " ";
        cout << '\n';
    }
}
 
// Function to anticlockwise rotate matrix
// by 180 degree
void rotate180(int arr[R][C])
{
    transpose(arr);
    reverseColumns(arr);
    transpose(arr);
    reverseColumns(arr);
}
 
// Driven code
int main()
{
    int arr[R][C] = { { 1, 2, 3, 4 },
                      { 5, 6, 7, 8 },
                      { 9, 10, 11, 12 },
                      { 13, 14, 15, 16 } };
    rotate180(arr);
    printMatrix(arr);
    return 0;
}

Java

// Java program for left
// rotation of matrix by 180
import java.util.*;
 
class GFG {
    static int R = 4, C = 4, t = 0;
 
    // Function to rotate the
    // matrix by 180 degree
    static void reverseColumns(int arr[][])
    {
        for (int i = 0; i < C; i++) {
            for (int j = 0, k = C - 1; j < k; j++, k--) {
                t = arr[j][i];
                arr[j][i] = arr[k][i];
                arr[k][i] = t;
            }
        }
    }
 
    // Function for transpose of matrix
    static void transpose(int arr[][])
    {
        for (int i = 0; i < R; i++) {
            for (int j = i; j < C; j++) {
                t = arr[i][j];
                arr[i][j] = arr[j][i];
                arr[j][i] = t;
            }
        }
    }
 
    // Function for display the matrix
    static void printMatrix(int arr[][])
    {
        for (int i = 0; i < R; i++) {
            for (int j = 0; j < C; j++)
                System.out.print(arr[i][j] + " ");
            System.out.println();
        }
    }
 
    // Function to anticlockwise
    // rotate matrix by 180 degree
    static void rotate180(int arr[][])
    {
        transpose(arr);
        reverseColumns(arr);
        transpose(arr);
        reverseColumns(arr);
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int[][] arr = { { 1, 2, 3, 4 },
                        { 5, 6, 7, 8 },
                        { 9, 10, 11, 12 },
                        { 13, 14, 15, 16 } };
 
        rotate180(arr);
        printMatrix(arr);
    }
}
 
// This code is contributed by ChitraNayal

C#

// C# program for left
// rotation of matrix by 180
using System;
 
class GFG {
    static int R = 4, C = 4, t = 0;
 
    // Function to rotate the
    // matrix by 180 degree
    static void reverseColumns(int[, ] arr)
    {
        for (int i = 0; i < C; i++) {
            for (int j = 0, k = C - 1;
                 j < k; j++, k--) {
                t = arr[j, i];
                arr[j, i] = arr[k, i];
                arr[k, i] = t;
            }
        }
    }
 
    // Function for transpose of matrix
    static void transpose(int[, ] arr)
    {
        for (int i = 0; i < R; i++) {
            for (int j = i; j < C; j++) {
                t = arr[i, j];
                arr[i, j] = arr[j, i];
                arr[j, i] = t;
            }
        }
    }
 
    // Function for display the matrix
    static void printMatrix(int[, ] arr)
    {
        for (int i = 0; i < R; i++) {
            for (int j = 0; j < C; j++)
                Console.Write(arr[i, j] + " ");
            Console.WriteLine();
        }
    }
 
    // Function to anticlockwise
    // rotate matrix by 180 degree
    static void rotate180(int[, ] arr)
    {
        transpose(arr);
        reverseColumns(arr);
        transpose(arr);
        reverseColumns(arr);
    }
 
    // Driver Code
    static public void Main()
    {
        int[, ] arr = { { 1, 2, 3, 4 },
                        { 5, 6, 7, 8 },
                        { 9, 10, 11, 12 },
                        { 13, 14, 15, 16 } };
 
        rotate180(arr);
        printMatrix(arr);
    }
}
 
// This code is contributed by ajit

Python3

# Python3 program for left rotation of matrix by 180
  
R = 4
C = 4
  
# Function to rotate the matrix by 180 degree
def reverseColumns(arr):
    for i in range(C):
        j = 0
        k = C-1
        while j < k:
            t = arr[j][i]
            arr[j][i] = arr[k][i]
            arr[k][i] = t
            j += 1
            k -= 1
             
# Function for transpose of matrix
def transpose(arr):
    for i in range(R):
        for j in range(i, C):
            t = arr[i][j]
            arr[i][j] = arr[j][i]
            arr[j][i] = t
  
# Function for display the matrix
def printMatrix(arr):
    for i in range(R):
        for j in range(C):
            print(arr[i][j], end = " ");
        print();
  
# Function to anticlockwise rotate matrix
# by 180 degree
def rotate180(arr):
    transpose(arr);
    reverseColumns(arr);
    transpose(arr);
    reverseColumns(arr);
  
# Driven code
arr = [ [ 1, 2, 3, 4 ],
        [ 5, 6, 7, 8 ],
        [9, 10, 11, 12 ],
        [13, 14, 15, 16 ] ];
rotate180(arr);
printMatrix(arr);

PHP

<?php
// PHP program for left rotation of matrix by 180
 
$R = 4;
$C = 4;
  
// Function to rotate the matrix by 180 degree
function reverseColumns(&$arr)
{
    global $C;
    for ($i = 0; $i < $C; $i++)
    {
        for ($j = 0, $k = $C - 1; $j < $k; $j++, $k--)
        {
              $t = $arr[$j][$i];
              $arr[$j][$i] = $arr[$k][$i];
              $arr[$k][$i] = $t;
        }
    }   
}
  
// Function for transpose of matrix
function transpose(&$arr)
{
    global $R, $C;
    for ($i = 0; $i < $R; $i++)
    {
        for ($j = $i; $j < $C; $j++)
        {
            $t = $arr[$i][$j];
            $arr[$i][$j] = $arr[$j][$i];
            $arr[$j][$i] = $t;
        }
    }
}
  
// Function for display the matrix
function printMatrix(&$arr)
{
    global $R, $C;
    for ($i = 0; $i < $R; $i++) {
        for ($j = 0; $j < $C; $j++)
        {
            echo $arr[$i][$j]." ";
        }
        echo "\n";
    }
}
  
// Function to anticlockwise rotate matrix
// by 180 degree
function rotate180(&$arr)
{
     
    transpose($arr);
    reverseColumns($arr);
    transpose($arr);
    reverseColumns($arr);
}
  
// Driven code
 
$arr = array( array( 1, 2, 3, 4 ),
                 array( 5, 6, 7, 8 ),
                 array( 9, 10, 11, 12 ),
                 array( 13, 14, 15, 16 ) );
rotate180($arr);
printMatrix($arr);
return 0;
?>

Javascript

<script>
// Javascript program for left
// rotation of matrix by 180
 
    let  R = 4, C = 4, t = 0;
     
    // Function to rotate the
    // matrix by 180 degree
    function reverseColumns(arr)
    {
        for (let i = 0; i < C; i++) {
            for (let j = 0, k = C - 1; j < k; j++, k--) {
                t = arr[j][i];
                arr[j][i] = arr[k][i];
                arr[k][i] = t;
            }
        }
    }
     
    // Function for transpose of matrix
    function transpose(arr)
    {
        for (let i = 0; i < R; i++) {
            for (let j = i; j < C; j++) {
                t = arr[i][j];
                arr[i][j] = arr[j][i];
                arr[j][i] = t;
            }
        }
    }
     
    // Function for display the matrix
    function printMatrix(arr)
    {
        for (let i = 0; i < R; i++) {
            for (let j = 0; j < C; j++)
                document.write(arr[i][j] + " ");
            document.write("<br>");
        }
    }
     
    // Function to anticlockwise
    // rotate matrix by 180 degree
    function rotate180(arr)
    {
        transpose(arr);
        reverseColumns(arr);
        transpose(arr);
        reverseColumns(arr);
    }
     
    // Driver Code
    let arr = [ [ 1, 2, 3, 4 ],
        [ 5, 6, 7, 8 ],
        [9, 10, 11, 12 ],
        [13, 14, 15, 16 ] ];
    rotate180(arr);
    printMatrix(arr);
     
    //This code is contributed by avanitrachhadiya2155
     
</script>

Producción : 

 16 15 14 13 
 12 11 10 9 
 8 7 6 5 
 4 3 2 1

Complejidad temporal: O(R*C) 
Espacio auxiliar: O(1)
En el código anterior, la transposición de la array debe encontrarse dos veces y, además, las columnas deben invertirse dos veces. 
Entonces, podemos tener una mejor solución.

Método: 3 (Intercambio de posición)
Aquí, intercambiamos los valores en las posiciones respectivas. 

C++

#include <bits/stdc++.h>
using namespace std;
 
/**
 * Reverse Row at specified index in the matrix
 * @param data matrix
 * @param index row index
 */
void reverseRow(vector<vector<int>>& data,
                int index)
{
    int cols = data[index].size();
    for(int i = 0; i < cols / 2; i++)
    {
        int temp = data[index][i];
        data[index][i] = data[index][cols - i - 1];
        data[index][cols - i - 1] = temp;
    }
}
 
/**
 * Print Matrix data
 * @param data matrix
 */
void printMatrix(vector<vector<int>>& data)
{
    for(int i = 0; i < data.size(); i++)
    {
        for(int j = 0; j < data[i].size(); j++)
        {
            cout << data[i][j] << " ";
        }
        cout << endl;
    }
}
 
/**
 * Rotate Matrix by 180 degrees
 * @param data matrix
 */
void rotateMatrix180(vector<vector<int>>& data)
{
    int rows = data.size();
    int cols = data[0].size();
 
    if (rows % 2 != 0)
    {
         
        // If N is odd reverse the middle
        // row in the matrix
        reverseRow(data, data.size() / 2);
    }
     
    // Swap the value of matrix [i][j] with
    // [rows - i - 1][cols - j - 1] for half    
    // the rows size.
    for(int i = 0; i <= (rows/2) - 1; i++)
    {
        for(int j = 0; j < cols; j++)
        {
            int temp = data[i][j];
            data[i][j] = data[rows - i - 1][cols - j - 1];
            data[rows - i - 1][cols - j - 1] = temp;
        }
    }
}
 
// Driver code   
int main()
{
    vector<vector<int>> data{ { 1, 2, 3, 4, 5 },
                              { 6, 7, 8, 9, 10 },
                              { 11, 12, 13, 14, 15 },
                              { 16, 17, 18, 19, 20 },
                              { 21, 22, 23, 24, 25 } };
 
    // Rotate Matrix
    rotateMatrix180(data);
 
    // Print Matrix
    printMatrix(data);
 
    return 0;
}
 
// This code is contributed by divyeshrabadiya07

Java

public class GFG {
       /**
     * Reverse Row at specified index in the matrix
     * @param data matrix
     * @param index row index
     */
    private static void reverseRow(int[][] data, int index) {
        int cols = data[index].length;
        for (int i = 0; i < cols / 2; i++) {
            int temp = data[index][i];
            data[index][i] = data[index][cols - i - 1];
            data[index][cols - i - 1] = temp;
        }
    }
 
    /**
     * Print Matrix data
     * @param data matrix
     */
    private static void printMatrix(int[][] data) {
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                System.out.print(data[i][j] + " ");
            }
            System.out.println("");
        }
    }
 
    /**
     * Rotate Matrix by 180 degrees
     * @param data matrix
     */
    private static void rotateMatrix180(int[][] data) {
        int rows = data.length;
        int cols = data[0].length;
 
        if (rows % 2 != 0) {
            //If N is odd reverse the middle row in the matrix
            reverseRow(data, data.length / 2);
        }
 
        //Swap the value of matrix [i][j] with [rows - i - 1][cols - j - 1] for half the rows size.
        for (int i = 0; i <= (rows/2) - 1; i++) {
            for (int j = 0; j < cols; j++) {
                int temp = data[i][j];
                data[i][j] = data[rows - i - 1][cols - j - 1];
                data[rows - i - 1][cols - j - 1] = temp;
            }
        }
    }
 
    public static void main(String[] args) {
        int[][] data = {
                {1, 2, 3, 4, 5},
                {6, 7, 8, 9, 10},
                {11, 12, 13, 14, 15},
                {16, 17, 18, 19, 20},
                {21, 22, 23, 24, 25}
        };
 
        //Rotate Matrix
        rotateMatrix180(data);
 
        //Print Matrix
        printMatrix(data);
    }
}

Python3

# Reverse Row at specified index in the matrix
def reverseRow(data, index):
     
    cols = len(data[index])
    for i in range(cols // 2):
        temp = data[index][i]
        data[index][i] = data[index][cols - i - 1]
        data[index][cols - i - 1] = temp
     
    return data
 
# Print Matrix data
def printMatrix(data):
     
    for i in range(len(data)):
        for j in range(len(data[0])):
            print(data[i][j], end = ' ')
         
        print()
 
# Rotate Matrix by 180 degrees
def rotateMatrix(data):
     
    rows = len(data)
    cols = len(data[0])
     
    if (rows % 2):
         
        # If N is odd reverse the middle
        # row in the matrix
        data = reverseRow(data, len(data) // 2)
         
        # Swap the value of matrix [i][j] with
        # [rows - i - 1][cols - j - 1] for half
        # the rows size.
        for i in range(rows // 2):
            for j in range(cols):
                temp = data[i][j]
                data[i][j] = data[rows - i - 1][cols - j - 1]
                data[rows - i - 1][cols - j - 1] = temp
         
        return data
         
# Driver Code
data = [ [ 1, 2, 3, 4, 5 ],
         [ 6, 7, 8, 9, 10 ],
         [ 11, 12, 13, 14, 15 ],
         [ 16, 17, 18, 19, 20 ],
         [ 21, 22, 23, 24, 25 ] ]
          
# Rotate Matrix
data = rotateMatrix(data)
 
# Print Matrix
printMatrix(data)
 
# This code is contributed by rohitsingh07052

C#

using System;
 
class GFG
{
  /**
     * Reverse Row at specified index in the matrix
     * @param data matrix
     * @param index row index
     */
  private static void reverseRow(int[, ] data, int index)
  {
    int cols = data.GetLength(1);
    for (int i = 0; i < cols / 2; i++)
    {
      int temp = data[index, i];
      data[index, i] = data[index, cols - i - 1];
      data[index, cols - i - 1] = temp;
    }
  }
 
  /**
     * Print Matrix data
     * @param data matrix
     */
  private static void printMatrix(int[, ] data)
  {
    for (int i = 0; i < data.GetLength(0); i++)
    {
      for (int j = 0; j < data.GetLength(1); j++)
      {
        Console.Write(data[i, j] + " ");
      }
      Console.WriteLine();
    }
  }
 
  /**
     * Rotate Matrix by 180 degrees
     * @param data matrix
     */
  private static void rotateMatrix180(int[, ] data)
  {
    int rows = data.GetLength(0);
    int cols = data.GetLength(1);
 
    if (rows % 2 != 0)
    {
 
      // If N is odd reverse the middle row in the
      // matrix
      reverseRow(data, data.GetLength(0) / 2);
    }
 
    // Swap the value of matrix [i][j] with [rows - i -
    // 1][cols - j - 1] for half the rows size.
    for (int i = 0; i <= (rows / 2) - 1; i++)
    {
      for (int j = 0; j < cols; j++)
      {
        int temp = data[i, j];
        data[i, j] = data[rows - i - 1, cols - j - 1];
        data[rows - i - 1, cols - j - 1] = temp;
      }
    }
  }
 
  // Driver code
  public static void Main()
  {
    int[, ] data = { { 1, 2, 3, 4, 5 },
                    { 6, 7, 8, 9, 10 },
                    { 11, 12, 13, 14, 15 },
                    { 16, 17, 18, 19, 20 },
                    { 21, 22, 23, 24, 25 } };
 
    // Rotate Matrix
    rotateMatrix180(data);
 
    // Print Matrix
    printMatrix(data);
  }
}
 
// This code is contributed by subhammahato348

Javascript

<script>
 
// Reverse Row at specified index in the matrix
// @param data matrix
// @param index row index
function reverseRow(data,index)
{
    let cols = data[index].length;
    for(let i = 0; i < cols / 2; i++)
    {
        let temp = data[index][i];
        data[index][i] = data[index][cols - i - 1];
        data[index][cols - i - 1] = temp;
    }
}
 
/**
 * Print Matrix data
 * @param data matrix
 */
function printMatrix(data)
{
    for(let i = 0; i < data.length; i++)
    {
        for(let j = 0; j < data[i].length; j++)
        {
            document.write(data[i][j] + " ");
        }
        document.write("<br>");
    }
}
 
/**
 * Rotate Matrix by 180 degrees
 * @param data matrix
 */
function rotateMatrix180(data)
{
    let rows = data.length;
    let cols = data[0].length;
 
    if (rows % 2 != 0)
    {
         
        // If N is odd reverse the middle
        // row in the matrix
        reverseRow(data, Math.floor(data.length / 2));
    }
 
    // Swap the value of matrix [i][j]
    // with [rows - i - 1][cols - j - 1]
    // for half the rows size.
    for(let i = 0; i <= (rows/2) - 1; i++)
    {
        for(let j = 0; j < cols; j++)
        {
            let temp = data[i][j];
            data[i][j] = data[rows - i - 1][cols - j - 1];
            data[rows - i - 1][cols - j - 1] = temp;
        }
    }
}
 
// Driver code
let data = [ [ 1, 2, 3, 4, 5 ],
             [ 6, 7, 8, 9, 10 ],
             [ 11, 12, 13, 14, 15 ],
             [ 16, 17, 18, 19, 20 ],
             [ 21, 22, 23, 24, 25 ] ];
// Rotate Matrix
rotateMatrix180(data);
 
// Print Matrix
printMatrix(data);
 
// This code is contributed by rag2127
    
</script>

Producción : 

25 24 23 22 21 
20 19 18 17 16 
15 14 13 12 11 
10 9 8 7 6 
5 4 3 2 1 

Complejidad temporal : O(R*C) 
Espacio auxiliar : O(1)
 

Publicación traducida automáticamente

Artículo escrito por SHARIQ_JMI y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *