From d55117564615c45753b7f4571ba345a3b958f511 Mon Sep 17 00:00:00 2001 From: TiagoRG <35657250+TiagoRG@users.noreply.github.com> Date: Thu, 1 Dec 2022 22:22:35 +0000 Subject: [PATCH] Added extra exercices from TP --- 1ano/fp/extra1/ex01.py | 33 +++++++++++++++++ 1ano/fp/extra1/ex02.py | 80 ++++++++++++++++++++++++++++++++++++++++++ 1ano/fp/extra1/ex03.py | 32 +++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 1ano/fp/extra1/ex01.py create mode 100644 1ano/fp/extra1/ex02.py create mode 100644 1ano/fp/extra1/ex03.py diff --git a/1ano/fp/extra1/ex01.py b/1ano/fp/extra1/ex01.py new file mode 100644 index 0000000..abb5834 --- /dev/null +++ b/1ano/fp/extra1/ex01.py @@ -0,0 +1,33 @@ +# NMEC: + +""" +A sequência de Fibonacci começa com os números 0 e 1. Depois, cada elemento +consecutivo da sequência obtém-se pela soma dos dois elementos anteriores. +Complete a função genFibonacci(n) para _devolver_ uma lista com os n primeiros +números de Fibonacci. Por exemplo, se n=6, deve devolver [0, 1, 1, 2, 3, 5]. +A função só tem de funcionar para n>=2. + +The Fibonacci sequence starts with the numbers 0 and 1. Then each consecutive +element of the sequence is obtained by the sum of the two previous elements. +Complete the genFibonacci(n) function to _return_ a list of the first n +Fibonacci numbers. For example, if n=6, it should return [0, 1, 1, 2, 3, 5]. +The function only has to work for n>=2. +""" + +def genFibonacci(n): + assert n >= 2 + # Complete ... + lst = [] + for i in range(n): + if i == 0: + lst.append(0) + elif i == 1: + lst.append(1) + else: + lst.append(lst[i-2] + lst[i-1]) + return lst + + +# NÃO precisa de invocar a função. O codecheck trata disso. +# You DO NOT need to call the function. Codecheck does that for you. + diff --git a/1ano/fp/extra1/ex02.py b/1ano/fp/extra1/ex02.py new file mode 100644 index 0000000..6d8e07d --- /dev/null +++ b/1ano/fp/extra1/ex02.py @@ -0,0 +1,80 @@ +# ID: + +""" +Imagine que está a fazer palavras cruzadas (em Inglês) e falta-lhe uma +palavra com o padrão "?YS???Y", onde os "?" representam letras por preencher. +Complete este programa para o ajudar a descobrir a palavra. +O programa já inclui instruções para ler uma lista de palavras inglesas a +partir do ficheiro wordlist.txt. +""" + +# This function reads words from a file. +def load(fname): + with open(fname) as f: + lst = [] + for line in f: + words = line.strip().split() + lst.extend(words) + return lst + + +""" a) +Complete a função matchesPattern(s, pattern) para devolver +True se s corresponder ao padrão fornecido e False, no caso contrário. +Uma string s corresponde ao padrão se e só se tiver os mesmos carateres +que o padrão nas mesmas posições, exceto onde o padrão tem ?. +Nas posições dos ?, não importa que carateres estão na string s. +A correspondência não deve fazer distinção entre maiúsculas e minúsculas. +""" +def matchesPattern(s, pattern): + # Complete ... + if len(s) != len(pattern): + return False + for i in range(len(s)): + if (s[i].lower() != pattern[i].lower()) and (pattern[i] != "?"): + return False + return True + +""" b) +Complete a função filterPattern(lst, pattern) para extrair duma lista de strings +as strings que têm o padrão dado. +Sugestão: use a função matchesPattern para testar cada palavra. +""" +def filterPattern(lst, pattern): + # Complete ... + matches = [] + for word in lst: + if matchesPattern(word, pattern): + matches.append(word) + return matches + + +def main(): + print("a)") + print( matchesPattern("secret", "s?c??t") ) #-> True + print( matchesPattern("secreta", "s?c??t") ) #-> False + print( matchesPattern("socket", "s?c??t") ) #-> True + print( matchesPattern("soccer", "s?c??t") ) #-> False + print( matchesPattern("SEcrEt", "?ecr?t") ) #-> True + print( matchesPattern("SEcrET", "?ecr?t") ) #-> True + print( matchesPattern("SecrEt", "?ECR?T") ) #-> True + + words = load("wordlist.txt") + + print("b)") + # Solution to "S?C??T" + lst = filterPattern(words, "s?c??t") + print(lst) + + assert isinstance(lst, list), "result lst should be a list" + assert "secret" in lst, "result should contain 'secret'" + + # Solution to "?YS???Y" + lst = filterPattern(words, "?ys???y") + print(lst) + + +# Call main function: +if __name__ == "__main__": + main() + diff --git a/1ano/fp/extra1/ex03.py b/1ano/fp/extra1/ex03.py new file mode 100644 index 0000000..8bdaf30 --- /dev/null +++ b/1ano/fp/extra1/ex03.py @@ -0,0 +1,32 @@ +# Devolve o número de linhas da matriz M. +def matrows(M): + return len(M) + +# Complete para devolver o número de colunas da matriz M. +def matcols(M): + return len(M[0]) + +# Complete a função para devolver uma matriz com m×n zeros. +def matzeros(m, n): + M = [] + for i in range(m): + M.append(n*[0]) + return M + +def matzerosTEST(m, n): + M = matzeros(m, n) + M[0][1] = 1 # should change just 1 element! + return M + +# Complete a função para multiplicar a matriz A pela matriz B. +def matmult(A, B): + assert matcols(A) == matrows(B) + C = [[sum(a*b for a, b in zip(A_row, B_col)) + for B_col in zip(*B)] + for A_row in A] + return C + +def matmultTEST(A, B): + C = matmult(A, B) + return A, B, C +