From 0318a99577908497cb91e517bf640252813136c4 Mon Sep 17 00:00:00 2001 From: Vitor Buxbaum Date: Sat, 18 Sep 2021 18:45:20 -0300 Subject: [PATCH 1/5] =?UTF-8?q?2.8=20-=20Decis=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2_paradigmas/08_mergesort.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 2_paradigmas/08_mergesort.py diff --git a/2_paradigmas/08_mergesort.py b/2_paradigmas/08_mergesort.py new file mode 100644 index 0000000..5a6ec12 --- /dev/null +++ b/2_paradigmas/08_mergesort.py @@ -0,0 +1,5 @@ +""" +Essa implementação no livro está incompleta, e tem apenas finalidade didática. + +A implementação completa está no Capítulo 4. +""" From f84f26336db02118f8d17cda64d496afaaeb66ef Mon Sep 17 00:00:00 2001 From: Vitor Buxbaum Date: Sat, 18 Sep 2021 23:21:26 -0300 Subject: [PATCH 2/5] 2.9 - input numero de matrizes e dimensoes --- 2_paradigmas/09_avalia_mult_matrizes.py | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 2_paradigmas/09_avalia_mult_matrizes.py diff --git a/2_paradigmas/09_avalia_mult_matrizes.py b/2_paradigmas/09_avalia_mult_matrizes.py new file mode 100644 index 0000000..dd2d2ef --- /dev/null +++ b/2_paradigmas/09_avalia_mult_matrizes.py @@ -0,0 +1,35 @@ +def main(): + numero_matrizes = coleta_numero_inteiro("Número de matrizes") + dimensoes = coleta_dimensoes(numero_matrizes) + matriz_de_resultados = matriz_de_zeros(numero_matrizes) + + print(f"\n{numero_matrizes = }, {dimensoes = }") + print(f"\n{matriz_de_resultados = }") + + +def coleta_numero_inteiro(descricao): + try: + return int(input(f"{descricao}: ")) + except ValueError: + print( + "\nOoops, valor inválido!" + f"\nPor favor digite um número inteiro para '{descricao}'.\n" + ) + return coleta_numero_inteiro(descricao) + + +def coleta_dimensoes(numero_matrizes): + return [ + coleta_numero_inteiro(f"Dimensão {indice} de {numero_matrizes}") + for indice in range(numero_matrizes + 1) + ] + + +def matriz_de_zeros(numero_matrizes): + lista_de_zeros = [0 for _ in range(numero_matrizes)] + + return [lista_de_zeros for _ in range(numero_matrizes)] + + +if __name__ == "__main__": + main() From 46f9e7d052f900886f05597331364d7b271d9fe7 Mon Sep 17 00:00:00 2001 From: Vitor Buxbaum Date: Sun, 14 Nov 2021 17:54:18 -0300 Subject: [PATCH 3/5] =?UTF-8?q?2.9=20-=20restante=20da=20implementa=C3=A7?= =?UTF-8?q?=C3=A3o=20+=20type=20hints?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2_paradigmas/09_avalia_mult_matrizes.py | 55 +++++++++++++++++++++---- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/2_paradigmas/09_avalia_mult_matrizes.py b/2_paradigmas/09_avalia_mult_matrizes.py index dd2d2ef..cb6dfd3 100644 --- a/2_paradigmas/09_avalia_mult_matrizes.py +++ b/2_paradigmas/09_avalia_mult_matrizes.py @@ -1,13 +1,17 @@ +from rich import print + + def main(): numero_matrizes = coleta_numero_inteiro("Número de matrizes") - dimensoes = coleta_dimensoes(numero_matrizes) - matriz_de_resultados = matriz_de_zeros(numero_matrizes) - print(f"\n{numero_matrizes = }, {dimensoes = }") - print(f"\n{matriz_de_resultados = }") + matriz_de_resultados = preenche_custos( + matriz_de_zeros(numero_matrizes), coleta_dimensoes(numero_matrizes) + ) + + imprime_matriz(matriz_de_resultados) -def coleta_numero_inteiro(descricao): +def coleta_numero_inteiro(descricao: str) -> int: try: return int(input(f"{descricao}: ")) except ValueError: @@ -18,17 +22,52 @@ def coleta_numero_inteiro(descricao): return coleta_numero_inteiro(descricao) -def coleta_dimensoes(numero_matrizes): +def coleta_dimensoes(numero_matrizes: int) -> list: return [ coleta_numero_inteiro(f"Dimensão {indice} de {numero_matrizes}") for indice in range(numero_matrizes + 1) ] -def matriz_de_zeros(numero_matrizes): +def matriz_de_zeros(numero_matrizes: int) -> list[list]: lista_de_zeros = [0 for _ in range(numero_matrizes)] - return [lista_de_zeros for _ in range(numero_matrizes)] + return [lista_de_zeros.copy() for _ in range(numero_matrizes)] + + +def imprime_matriz(matriz: list[list]): + if not matriz: + print("Matriz vazia".center(80, ".")) + return + + print("[") + for linha in matriz: + print(f" {linha},") + print("]") + + +def custos(matriz_de_zeros: list[list], dimensoes: list, i, j, k): + return ( + matriz_de_zeros[i - 1][k - 1] + + matriz_de_zeros[k][j - 1] + + (dimensoes[i - 1] * dimensoes[k] * dimensoes[j]) + ) + + +def preenche_custos(matriz_de_zeros: list[list], dimensoes: list): + for h in range(1, len(matriz_de_zeros)): + for i in range(1, len(matriz_de_zeros) - h + 1): + j = i + h + custo_atual = custos(matriz_de_zeros, dimensoes, i, j, i) + + for k in range(i + 1, j): + custo_atual = min( + custo_atual, custos(matriz_de_zeros, dimensoes, i, j, k) + ) + matriz_de_zeros[i - 1][j - 1] = custo_atual + print(f"m[{i}][{j}] = {custo_atual}") + print() + return matriz_de_zeros if __name__ == "__main__": From f72125f96b15aa812dc669d06871c477242e2946 Mon Sep 17 00:00:00 2001 From: Vitor Buxbaum Date: Sun, 14 Nov 2021 17:54:47 -0300 Subject: [PATCH 4/5] 2.9 - removendo import rich --- 2_paradigmas/09_avalia_mult_matrizes.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/2_paradigmas/09_avalia_mult_matrizes.py b/2_paradigmas/09_avalia_mult_matrizes.py index cb6dfd3..65701ed 100644 --- a/2_paradigmas/09_avalia_mult_matrizes.py +++ b/2_paradigmas/09_avalia_mult_matrizes.py @@ -1,6 +1,3 @@ -from rich import print - - def main(): numero_matrizes = coleta_numero_inteiro("Número de matrizes") @@ -46,11 +43,11 @@ def imprime_matriz(matriz: list[list]): print("]") -def custos(matriz_de_zeros: list[list], dimensoes: list, i, j, k): +def custos(matriz_de_zeros: list[list], dimensoes: list, i1, i2, i3): return ( - matriz_de_zeros[i - 1][k - 1] - + matriz_de_zeros[k][j - 1] - + (dimensoes[i - 1] * dimensoes[k] * dimensoes[j]) + matriz_de_zeros[i1 - 1][i3 - 1] + + matriz_de_zeros[i3][i2 - 1] + + (dimensoes[i1 - 1] * dimensoes[i3] * dimensoes[i2]) ) From 120c47a91c566518ff66e16b72dd7bc02256f15e Mon Sep 17 00:00:00 2001 From: Vitor Buxbaum Date: Sun, 14 Nov 2021 18:10:51 -0300 Subject: [PATCH 5/5] =?UTF-8?q?2.9=20-=20refatora=C3=A7=C3=A3o=20pequena?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2_paradigmas/09_avalia_mult_matrizes.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/2_paradigmas/09_avalia_mult_matrizes.py b/2_paradigmas/09_avalia_mult_matrizes.py index 65701ed..8c36c4b 100644 --- a/2_paradigmas/09_avalia_mult_matrizes.py +++ b/2_paradigmas/09_avalia_mult_matrizes.py @@ -43,7 +43,7 @@ def imprime_matriz(matriz: list[list]): print("]") -def custos(matriz_de_zeros: list[list], dimensoes: list, i1, i2, i3): +def calcula_custo(matriz_de_zeros: list[list], dimensoes: list, i1, i2, i3): return ( matriz_de_zeros[i1 - 1][i3 - 1] + matriz_de_zeros[i3][i2 - 1] @@ -55,14 +55,15 @@ def preenche_custos(matriz_de_zeros: list[list], dimensoes: list): for h in range(1, len(matriz_de_zeros)): for i in range(1, len(matriz_de_zeros) - h + 1): j = i + h - custo_atual = custos(matriz_de_zeros, dimensoes, i, j, i) + custo_atual = calcula_custo(matriz_de_zeros, dimensoes, i, j, i) for k in range(i + 1, j): custo_atual = min( - custo_atual, custos(matriz_de_zeros, dimensoes, i, j, k) + custo_atual, + calcula_custo(matriz_de_zeros, dimensoes, i, j, k), ) - matriz_de_zeros[i - 1][j - 1] = custo_atual print(f"m[{i}][{j}] = {custo_atual}") + matriz_de_zeros[i - 1][j - 1] = custo_atual print() return matriz_de_zeros