Matriz espiral binaria en Python

Matriz espiral binaria en Python

Se muestra un ejercicio para realizar una matriz espiral en Python, acomodando una cadena de ceros y  unos.

Python es un lenguaje de programación muy utilizado, que utiliza una sintaxis sencilla. Vamos a crear a continuación una matriz espiral binaria, es decir que contiene una cadena de ceros y unos. Te invito a ver el siguiente video donde se explica toda la realización del programa.

 

Descripción del problema: Matriz espiral binaria

Dado un número entero m, escriba un programa que lo convierta a combinación binaria y acomode cada uno de los bits de dicha combinación en una matriz de tamaño nxn.

El valor de n debe ser determinado en función del número de bits de la combinación binaria.

Los bits deben ser acomodados en espiral hacia el centro de la matriz, iniciando en la esquina superior izquierda, siguiendo hacia la derecha, luego hacia abajo, luego hacia la izquierda, luego hacia arriba y así sucesivamente.

Todas las localidades de la matriz deberán contener un dígito.

Secciones del código en Python

Función para convertir un número a binario en Python

def binario(decimal):
	binario = ''
	while decimal // 2 != 0:
		binario = str(decimal % 2) + binario
		decimal = decimal // 2
	return str(decimal) + binario

El algoritmo aquí utilizado se muestra en la siguiente imagen:

convertir numero a binario en python para matriz espiral

Función para imprimir una matriz en Python

def imprimir(md):
	for x in md:
		for y in x:
			print (y, end="")
		print ()

Se utiliza print(y,end=””) para indicarle que ese print no genera salto de línea, para eso le pasamos como argumento end el valor de vacío.

Código para recibir la entrada y mandar a llamar la función que convierte a binario

# Recibir la entrada
m = int(input())

# Convertir ese valor a binario

binario = binario(m)

Cómo agregar ceros a la izquierda de una cadena binaria

# Agregar ceros a la izquierda

n = math.ceil(math.sqrt(len(binario)))
cerosizquierda = n*n-len(binario)
strceros = "0" * cerosizquierda
cadena = strceros + binario

Aquí utilizamos ceil para redondear un dato decimal al valor entero superior, así un valor como 3.8 se redondeará a 4.

Cómo crear una matriz de asteriscos o vacía de n x n usando una expresión generadora en Python

# Crear una matriz vacia de n x n
md = [["*" for y in range(n)]  for x in range(n)]

Llenar la matriz con los bits de la cadena binaria

# Llenar la matriz con los bits de la cadena binaria

x = 0
y = 0
i = 0
limizq= 0
limder= n-1
limsup= 0
liminf= n-1
dir = 'der'

while (i<len(cadena)):
	# colocar el valor
	md[y][x] = cadena[i]
	i+=1

	# reajustar el siguiente movimiento

	if dir=='der':
		limsup=y+1
		if x==limder:
			dir = 'aba'
			if y<liminf:
				y+=1
		else:
			x+=1
		continue

	if dir=='aba':
		limder=x-1
		if y==liminf:
			dir = 'izq'
			if x>limizq:
				x-=1
		else:
			y+=1
		continue

	if dir=='izq':
		liminf=y-1
		if x==limizq:
			dir = 'arr'
			if y>limsup:
				y-=1
		else:
			x-=1
		continue

	if dir=='arr':
		limizq=x+1
		if y==limsup:
			dir = 'der'
			if x<limder:
				x+=1
		else:
			y-=1
		continue



imprimir(md)

Te invito a ver el video de explicación del código para una mejor comprensión de lo que estamos realizando aquí. O bien deja en un comentario tu duda.

 

¿Qué te pareció este artículo?
  • No era lo que buscaba 
  • Regular 
  • Interesante 
  • Excelente 
  • Poco informativo 
(Visto 2.747 veces)
Facebooktwitterlinkedinmail

Tu comentario

opiniones

Leave a Reply

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







42 + = 44