#!/usr/bin/python3

"""
ΑΣΚΗΣΗ 8
Να γεμίσετε έναν πίνακα 3x3 με τυχαίους ακεραίους στο [0,1].
Να χρησιμοποιήσετε για το σκοπό αυτό κατάλληλες συναρτήσεις.
Να μετασχηματίσετε τον πίνακα από 3x3 σε 4x6 και εν συνεχεία σε 6x6 μέσω κατάλληλψν μετασχηματισμών.
"""

import random
import math

matrix=None

def generate_matrix():
	return [[random.randint(0,1) for _ in range(3)] for _ in range(3)]

def add_cols(*cols):
	global matrix
	help_matrix = matrix
	num_rows = len(matrix)
	if len(matrix) == 0: #Ισοδυναμεί με το: if not matrix γιατί bool([])==False
		return
	for i,el in enumerate(cols):
		if len(el) != num_rows:
			print(f"invalid dimension: length of matrix (={num_rows}) != length of col {i+1} (={len(el)}")
			matrix = help_matrix
			return
	for el in cols:
		for j in range(num_rows):
			matrix[j].append(el[j])
	return

def add_rows(*rows):
	global matrix
	help_matrix=matrix
	if len(matrix) == 0:
		return

	if matrix[0]:
		num_cols = len(matrix[0])
	else:
		num_cols = 0

	for i,el in enumerate(rows):
		if len(el) != num_cols:
			print(f"invaqlid dimension: length of matrix row (={num_cols}) != length of row {i+1} (={len(el)}):")
			matrix = help_matrix
			return
		matrix.append(list(el))
	return

def print_matrix(matrix):
	"""Εκτυπώνει έναν πίνακα με στοίχιση"""
	if len(matrix) == 0:
		return
	"""ΠΡΟΣΟΧΗ"""
	#Βρίσκουμε το max πλάτος που χρειάζεται κάθε στοιχείο του πίνακα για να χωρέσει όταν μετατραπεί σε string
	max_width = max( len(str(el)) for row in matrix for el in row ) + 1 

	#print("-"*(len(matrix[0])*max|_width if matrix[0] else 0)

	for row in matrix:
		print(" ".join(str(el).rjust(max_width) for el in row))

def main():
	global matrix
	matrix = generate_matrix()
	print("Ο αρχικός 3x3 πίνακας είναι:")
	print_matrix(matrix)

	add_rows([5,5,5])
	add_cols([4,4,4,4],[4,4,4,4],[4,4,4,4])

	print("\nΟ νέος 4x6 πίνακας είναι:")
	print_matrix(matrix)

	add_rows([8,8,8,8,8,8],[8,8,8,8,8,888])

	print("\nΟ νέος 6x6 πίνακας είναι:")
	print_matrix(matrix)
	
	
if __name__=="__main__":
	main()
