@ -0,0 +1,43 @@ | |||||
""" | |||||
Analytical Skills - opgave faculteit iteratief | |||||
(c) 2019 Hogeschool Utrecht | |||||
Tijmen Muller (tijmen.muller@hu.nl) | |||||
""" | |||||
def faculteit_iteratief(n): | |||||
""" Berekent de faculteit van *n* op een iteratieve manier. """ | |||||
res = 1 | |||||
# Voeg de iteratie in: for ... | |||||
return res | |||||
""" | |||||
======================================================================================================================== | |||||
Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen! | |||||
Je kunt je code testen door deze file te runnen of met behulp van pytest. | |||||
""" | |||||
import math | |||||
def test_faculteit_iteratief(): | |||||
for x in range(6): | |||||
assert faculteit_iteratief(x) == math.factorial(x), "Fout: faculteit_iteratief({}) geeft {} in plaats van {}".format(x, faculteit_iteratief(x), math.factorial(x)) | |||||
if __name__ == '__main__': | |||||
try: | |||||
print("\x1b[0;32m") | |||||
test_faculteit_iteratief() | |||||
print("Je functie faculteit_iteratief() doorstaat de tests!") | |||||
print("\x1b[0;30m") | |||||
x = int(input("Geef een getal: ")) | |||||
print(str(x) + "! = " + str(faculteit_iteratief(x))) | |||||
except AssertionError as ae: | |||||
print("\x1b[0;31m" + str(ae)) |
@ -0,0 +1,73 @@ | |||||
""" | |||||
Analytical Skills - opgave insertion sort | |||||
(c) 2019 Hogeschool Utrecht | |||||
Tijmen Muller (tijmen.muller@hu.nl) | |||||
""" | |||||
import random | |||||
def insert(lst, grens, waarde): | |||||
""" Voegt de waarde op de juiste plek in het gesorteerde deel van lijst lst """ | |||||
# De lijst *lst* is gesorteerd van lst[0] t/m lst[grens] | |||||
# Het element *waarde* wordt ingevoegd op de juiste plek in bovengenoemde gesorteerde deel, | |||||
# dus hierna is de lijst *lst* gesorteerd van lst[0] t/m lst[grens+1] | |||||
# Aanpak: begin bij index *grens* en verplaats elementen groter dan *waarde* naar rechts. | |||||
# Als je een waarde tegenkomt die kleiner is dan *waarde* (of het begin van lijst *lst*), | |||||
# dan voeg je *waarde* in op de vrijgekomen plek. | |||||
pass | |||||
def insertion_sort(lst): | |||||
""" Implementatie van het insertion sort algoritme die gegeven lijst lst sorteert """ | |||||
pass | |||||
""" | |||||
======================================================================================================================== | |||||
Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen! | |||||
Je kunt je code testen door deze file te runnen of met behulp van pytest. | |||||
""" | |||||
def test_insert(): | |||||
lst_test = [3, 5, 7, 11, 13, 2, 9, 14] | |||||
insert(lst_test, 4, 2) | |||||
lst_correct = [2, 3, 5, 7, 11, 13, 9, 14] | |||||
assert lst_test == lst_correct, "\x1b[0;31mFout: insert(lst_test, 4, 2) geeft {} in plaats van {}".format(lst_test, lst_correct) | |||||
insert(lst_test, 5, 9) | |||||
lst_correct = [2, 3, 5, 7, 9, 11, 13, 14] | |||||
assert lst_test == lst_correct, "\x1b[0;31mFout: insert(lst_test, 5, 9) geeft {} in plaats van {}".format(lst_test, lst_correct) | |||||
insert(lst_test, 6, 14) | |||||
lst_correct = [2, 3, 5, 7, 9, 11, 13, 14] | |||||
assert lst_test == lst_correct, "\x1b[0;31mFout: insert(lst_test, 6, 14) geeft {} in plaats van {}".format(lst_test, lst_correct) | |||||
def test_insertion_sort(): | |||||
lst_test = random.sample(range(-99, 100), 6) | |||||
lst_copy = lst_test.copy() | |||||
insertion_sort(lst_test) | |||||
assert lst_test == sorted(lst_copy), "\x1b[0;31mFout: insertion_sort({}) geeft {} in plaats van {}".format(lst_copy, lst_test, sorted(lst_copy)) | |||||
if __name__ == '__main__': | |||||
try: | |||||
test_insert() | |||||
print("\x1b[0;32mJe functie insert() werkt goed!") | |||||
test_insertion_sort() | |||||
print("\x1b[0;32mJe insertion sort algoritme werkt goed!\n\nKnap gedaan!\n") | |||||
except AssertionError as ae: | |||||
print(ae) | |||||
aantal = int(input("\x1b[0;30mHoeveel getallen zal ik sorteren? ")) | |||||
lst = list(range(aantal)) | |||||
random.shuffle(lst) | |||||
print("De lijst: \n" + str(lst)) | |||||
insertion_sort(lst) | |||||
print("is na sortering: \n" + str(lst)) | |||||
@ -0,0 +1,130 @@ | |||||
""" | |||||
Analytical Skills - practicum 4: algoritmiek | |||||
(c) 2019 Hogeschool Utrecht | |||||
Tijmen Muller (tijmen.muller@hu.nl) | |||||
""" | |||||
""" | |||||
Naam: | |||||
Klas: | |||||
Studentnummer: | |||||
1. Sorteeralgoritme | |||||
Hieronder staat de pseudocode van een sorteeralgoritme: | |||||
1. Startend vanaf het begin van een lijst, vergelijk elk element met zijn volgende buur. | |||||
2. Als het element groter is dan zijn volgende buur, verwissel ze van plaats. | |||||
3. Doorloop zo de lijst tot het eind. | |||||
4. Als er verwisselingen zijn geweest bij stap 2., ga naar stap 1. | |||||
1a. Handmatig toepassen | |||||
Gegeven is de lijst l = [ 4, 3, 1, 2 ]. Geef de waardes die de lijst aanneemt bij álle tussenstappen bij | |||||
toepassing van bovenstaand sorteeralgoritme. | |||||
[antwoord] | |||||
1b. Implementatie | |||||
Implementeer het sorteeralgoritme in Python in een functie genaamd my_sort(lst). Lever je code pas in als alle | |||||
tests geen foutmeldingen meer geven. | |||||
1c. Best en worst case | |||||
- Stel je hebt een lijst met de waarden 1, 2 en 3. Bij welke volgorde van de waarden in de lijst is het | |||||
sorteeralgoritme het snelste klaar (best-case scenario)? Hoeveel vergelijkingen (zoals beschreven in stap 1. | |||||
van de pseudocode) zijn nodig geweest? | |||||
[antwoord] | |||||
- Bij welke volgorde van de waarden in de lijst is het sorteeralgoritme het minst snel klaar | |||||
(worst-case scenario)? Hoeveel vergelijkingen zijn nodig geweest? | |||||
[anwoord] | |||||
- Stel je hebt een lijst met de waarden 1 tot en met 4. Wat is nu het best-case scenario? Hoeveel vergelijkingen | |||||
zijn er nodig? | |||||
En wat is nu het worst-case scenario? Hoeveel vergelijkingen zijn er nodig? | |||||
[antwoord] | |||||
- Stel je hebt een lijst met de waarden 1 tot en met n (je weet nu dus niet precies hoeveel waarden er in de lijst | |||||
zitten, het zijn er 'n'). Wat is nu het best-case scenario? Hoeveel vergelijkingen zijn er nodig? | |||||
En wat is nu het worst-case scenario? Hoeveel vergelijkingen zijn er nodig? | |||||
[antwoord] | |||||
2. Recursie | |||||
2a. Lineair zoeken | |||||
Implementeer het lineair zoekalgoritme in Python op een *recursieve* manier. Maak hiervoor de functie genaamd | |||||
linear_search_recursive(lst, target). Lever je code pas in als alle tests geen foutmeldingen meer geven. | |||||
2b. Binair zoeken | |||||
Implementeer het binair zoekalgoritme in Python op een *recursieve* manier. Maak hiervoor de functie genaamd | |||||
binary_search_recursive(lst, target). Lever je code pas in als alle tests geen foutmeldingen meer geven. | |||||
""" | |||||
def my_sort(lst): | |||||
""" Implementatie van het sorteeralgoritme die gegeven lijst lst sorteert """ | |||||
pass | |||||
def linear_search_recursive(lst, target): | |||||
""" Bepaalt of *target* voorkomt in lijst *lst* door middel van recursief lineair zoeken. """ | |||||
return False | |||||
def binary_search_recursive(lst, target): | |||||
""" Bepaalt of *target* voorkomt in lijst *lst* door middel van recursief binair zoeken. """ | |||||
return False | |||||
""" | |||||
======================================================================================================================== | |||||
Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen! | |||||
Je kunt je code testen door deze file te runnen of met behulp van pytest. | |||||
""" | |||||
import random | |||||
def test_my_sort(): | |||||
lst_test = random.sample(range(-99, 100), 6) | |||||
lst_copy = lst_test.copy() | |||||
my_sort(lst_test) | |||||
assert lst_test == sorted(lst_copy), "Fout: my_sort({}) geeft {} in plaats van {}".format(lst_copy, lst_test, sorted(lst_copy)) | |||||
def test_linear_search_recursive(): | |||||
for i in range(10): | |||||
lst_test = random.sample(range(20), 10) | |||||
target = random.randrange(20) | |||||
assert linear_search_recursive(lst_test, target) == (target in lst_test), "Fout: linear_search_recursive({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search_recursive(lst_test, target), target in lst_test) | |||||
def test_binary_search_recursive(): | |||||
for i in range(10): | |||||
lst_test = sorted(random.sample(range(20), 10)) | |||||
target = random.randrange(20) | |||||
assert binary_search_recursive(lst_test, target) == (target in lst_test), "Fout: binary_search_recursive({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search_recursive(lst_test, target), target in lst_test) | |||||
if __name__ == '__main__': | |||||
try: | |||||
print("\x1b[0;32m") | |||||
test_my_sort() | |||||
print("Je functie my_sort() werkt goed!") | |||||
test_linear_search_recursive() | |||||
print("Je functie linear_search_recursive() werkt goed!") | |||||
test_binary_search_recursive() | |||||
print("Je functie binary_search_recursive() werkt goed!") | |||||
print("Gefeliciteerd, alles lijkt te werken! Lever je werk nu in op Canvas...") | |||||
except AssertionError as ae: | |||||
print("\x1b[0;31m" + str(ae)) | |||||
@ -0,0 +1,86 @@ | |||||
""" | |||||
Analytical Skills - opgave recursie | |||||
(c) 2019 Hogeschool Utrecht | |||||
Tijmen Muller (tijmen.muller@hu.nl) | |||||
""" | |||||
def faculteit(n): | |||||
# Base case | |||||
if n == 0: | |||||
return 1 | |||||
# Recursie | |||||
else: | |||||
return faculteit(0) | |||||
def exponent(n): | |||||
# Base case | |||||
# Recursie | |||||
return n | |||||
def som(lst): | |||||
return 1 | |||||
def palindroom(woord): | |||||
return False | |||||
""" | |||||
======================================================================================================================== | |||||
Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen! | |||||
Je kunt je code testen door deze file te runnen of met behulp van pytest. | |||||
""" | |||||
import math, random | |||||
def test_faculteit(): | |||||
for x in range(6): | |||||
assert faculteit(x) == math.factorial(x), "Fout: faculteit({}) geeft {} in plaats van {}".format(x, faculteit(x), math.factorial(x)) | |||||
def test_exponent(): | |||||
for x in range(10): | |||||
assert exponent(x) == 2**x, "Fout: exponent({}) geeft {} in plaats van {}".format(x, exponent(x), 2**x) | |||||
def test_som(): | |||||
for i in range(6): | |||||
lst_test = random.sample(range(-10, 11), i) | |||||
assert som(lst_test) == sum(lst_test), "Fout: som({}) geeft {} in plaats van {}".format(lst_test, som(lst_test), sum(lst_test)) | |||||
def test_palindroom(): | |||||
assert palindroom("") is True, "Fout: palindroom({}) geeft {} in plaats van {}".format("", palindroom(""), True) | |||||
assert palindroom("radar") is True, "Fout: palindroom({}) geeft {} in plaats van {}".format("radar", palindroom("radar"), True) | |||||
assert palindroom("maandnaam") is True, "Fout: palindroom({}) geeft {} in plaats van {}".format("maandnaam", palindroom("maandnaam"), True) | |||||
assert palindroom("pollepel") is False, "Fout: palindroom({}) geeft {} in plaats van {}".format("pollepel", palindroom("pollepel"), False) | |||||
assert palindroom("Maandnaam") is False, "Fout: palindroom({}) geeft {} in plaats van {}".format("Maandnaam", palindroom("Maandnaam"), False) | |||||
if __name__ == '__main__': | |||||
try: | |||||
print("\x1b[0;32m") | |||||
test_faculteit() | |||||
print("Je functie faculteit() doorstaat de tests!") | |||||
test_exponent() | |||||
print("Je functie exponent() doorstaat de tests!") | |||||
test_som() | |||||
print("Je functie som() doorstaat de tests!") | |||||
test_palindroom() | |||||
print("Je functie palindroom() doorstaat de tests!") | |||||
print("\x1b[0;30m") | |||||
x = input("Geef een woord: ") | |||||
print("'" + x + "' is " + ("" if palindroom(x) else "g") + "een palindroom!") | |||||
except AssertionError as ae: | |||||
print("\x1b[0;31m" + str(ae)) |
@ -0,0 +1,147 @@ | |||||
""" | |||||
Analytical Skills - opgave zoeken | |||||
(c) 2019 Hogeschool Utrecht | |||||
Tijmen Muller (tijmen.muller@hu.nl) | |||||
""" | |||||
import random | |||||
from math import floor | |||||
def linear_search(lst, target): | |||||
""" Bepaalt of *target* voorkomt in lijst *lst* door middel van lineair zoeken. """ | |||||
return False | |||||
def linear_search_index(lst, target): | |||||
""" Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. lineair zoeken. """ | |||||
index = 0 | |||||
return -1 | |||||
def linear_search_index_steps(lst, target): | |||||
""" Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. lineair zoeken, en het aantal benodigde stappen. """ | |||||
index = 0 | |||||
steps = 0 | |||||
return -1, steps | |||||
def binary_search(lst, target): | |||||
""" Bepaalt of *target* voorkomt in lijst *lst* door middel van binair zoeken. """ | |||||
# stap 1 | |||||
mini = 0 | |||||
# stap 6 | |||||
while False: # hoelang ga je door met zoeken? | |||||
# stap 2 | |||||
# stap 3 | |||||
return True | |||||
# stap 4 | |||||
# stap 5 | |||||
return False | |||||
def binary_search_index(lst, target): | |||||
""" Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. binair zoeken. """ | |||||
return -1 | |||||
def binary_search_index_steps(lst, target): | |||||
""" Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. binair zoeken, en het aantal benodigde stappen. """ | |||||
steps = 0 | |||||
return (-1, steps) | |||||
""" | |||||
======================================================================================================================== | |||||
Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen! | |||||
Je kunt je code testen door deze file te runnen of met behulp van pytest. | |||||
""" | |||||
def test_linear_search(): | |||||
for i in range(10): | |||||
lst_test = random.sample(range(20), 10) | |||||
target = random.randrange(20) | |||||
assert linear_search(lst_test, target) == (target in lst_test), "\x1b[0;31mFout: linear_search({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search(lst_test, target), target in lst_test) | |||||
def test_linear_search_index(): | |||||
for i in range(10): | |||||
lst_test = random.sample(range(20), 10) | |||||
target = random.choice(lst_test) | |||||
assert linear_search_index(lst_test, target) == lst_test.index(target), "\x1b[0;31mFout: linear_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search_index(lst_test, target), lst_test.index(target)) | |||||
lst_test = [0, 1, 2] | |||||
assert linear_search_index(lst_test, 3) == -1, "\x1b[0;31mFout: linear_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, 3, linear_search_index(lst_test, 3), -1) | |||||
def test_linear_search_index_steps(): | |||||
for i in range(10): | |||||
lst_test = random.sample(range(20), 10) | |||||
target = random.choice(lst_test) | |||||
assert linear_search_index_steps(lst_test, target)[0] == lst_test.index(target), "\x1b[0;31mFout: linear_search_index_steps({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search_index_steps(lst_test, target)[0], lst_test.index(target)) | |||||
def test_binary_search(): | |||||
for i in range(10): | |||||
lst_test = sorted(random.sample(range(20), 10)) | |||||
target = random.randrange(20) | |||||
assert binary_search(lst_test, target) == (target in lst_test), "\x1b[0;31mFout: binary_search({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search(lst_test, target), target in lst_test) | |||||
def test_binary_search_index(): | |||||
for i in range(10): | |||||
lst_test = sorted(random.sample(range(20), 10)) | |||||
target = random.choice(lst_test) | |||||
assert binary_search_index(lst_test, target) == lst_test.index(target), "\x1b[0;31mFout: binary_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search_index(lst_test, target), lst_test.index(target)) | |||||
lst_test = [0, 1, 2] | |||||
assert binary_search_index(lst_test, 3) == -1, "\x1b[0;31mFout: binary_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, 3, binary_search_index(lst_test, 3), -1) | |||||
def test_binary_search_index_steps(): | |||||
for i in range(10): | |||||
lst_test = sorted(random.sample(range(20), 10)) | |||||
target = random.choice(lst_test) | |||||
assert binary_search_index_steps(lst_test, target)[0] == lst_test.index(target), "\x1b[0;31mFout: binary_search_index_steps({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search_index_steps(lst_test, target)[0], lst_test.index(target)) | |||||
if __name__ == '__main__': | |||||
try: | |||||
test_linear_search() | |||||
print("\x1b[0;32mJe functie linear_search() werkt goed!") | |||||
test_linear_search_index() | |||||
print("\x1b[0;32mJe functie linear_search_index() werkt goed!") | |||||
test_binary_search() | |||||
print("\x1b[0;32mJe functie test_binary_search() werkt goed!") | |||||
test_binary_search_index() | |||||
print("\x1b[0;32mJe functie test_binary_search_index() werkt goed!") | |||||
test_linear_search_index_steps() | |||||
print("\x1b[0;32mJe functie test_linear_search_index_steps() werkt goed!") | |||||
test_binary_search_index_steps() | |||||
print("\x1b[0;32mJe functie test_binary_search_index_steps() werkt goed!") | |||||
size = int(input("\x1b[0;30mGeef een grootte voor de lijst: ")) | |||||
lst_test = list(range(size)) | |||||
print("Ik ga zoeken in:", lst_test) | |||||
tgt = int(input("Geef een getal: ")) | |||||
(idx, cnt) = linear_search_index_steps(lst_test, tgt) | |||||
print("Het lineair zoekalgoritme vond '" + str(tgt) + "' op positie '" + str(idx) + "' na " + str(cnt) + " stappen.") | |||||
(idx, cnt) = binary_search_index_steps(lst_test, tgt) | |||||
print("Het binair zoekalgoritme vond '" + str(tgt) + "' op positie '" + str(idx) + "' na " + str(cnt) + " stappen.") | |||||
except AssertionError as ae: | |||||
print(ae) | |||||
@ -0,0 +1,79 @@ | |||||
""" | |||||
Analytical Skills - opgave selection sort | |||||
(c) 2019 Hogeschool Utrecht | |||||
Tijmen Muller (tijmen.muller@hu.nl) | |||||
""" | |||||
import random | |||||
def swap(lst, index1, index2): | |||||
""" Verwisselt de waardes op positie index1 en index2 in lijst lst """ | |||||
lst[index1] = lst[index2] | |||||
lst[index2] = lst[index1] | |||||
def find_index_of_minimum(lst, start_index = 0): | |||||
""" Vindt de locatie van het minimum in lijst lst vanaf een gegeven start_index """ | |||||
minimum = lst[start_index] | |||||
index_of_minimum = start_index | |||||
# Doorloop de lijst lst vanaf start_index en | |||||
# update minimum en index_of_minimum waar nodig. | |||||
return index_of_minimum | |||||
def selection_sort(lst): | |||||
""" Implementatie van het selection sort algoritme die gegeven lijst lst sorteert """ | |||||
# Implementeer selection sort met behulp van | |||||
# swap() en find_index_of_minimum() | |||||
pass | |||||
""" | |||||
======================================================================================================================== | |||||
Hieronder staan de tests voor je code -- hier mag je niets aan veranderen! | |||||
Je kunt je code testen door deze file te runnen of met behulp van pytest. | |||||
""" | |||||
def test_swap(): | |||||
lst_test = [4, 9, 7] | |||||
swap(lst_test, 0, 1) | |||||
assert lst_test == [9, 4, 7], "\x1b[0;31mFout: swap([4, 9, 7], 0, 1) geeft {} in plaats van {}".format(lst_test, [9, 4, 7]) | |||||
lst_test = [4, 9, 7] | |||||
swap(lst_test, 1, 2) | |||||
assert lst_test == [4, 7, 9], "\x1b[0;31mFout: swap([4, 9, 7], 1, 2) geeft {} in plaats van {}".format(lst_test, [4, 7, 9]) | |||||
lst_test = [4, 9, 7] | |||||
swap(lst_test, 0, 2) | |||||
assert lst_test == [7, 9, 4], "\x1b[0;31mFout: swap([4, 9, 7], 0, 2) geeft {} in plaats van {}".format(lst_test, [7, 9, 4]) | |||||
def test_find_index_of_minimum(): | |||||
lst_test = [18, 6, 21, 44, 9, 14] | |||||
assert find_index_of_minimum(lst_test, 0) == 1, "\x1b[0;31mFout: find_index_of_minimum({}, 0) geeft {} in plaats van 1".format(lst_test, find_index_of_minimum(lst_test, 0)) | |||||
assert find_index_of_minimum(lst_test, 2) == 4, "\x1b[0;31mFout: find_index_of_minimum({}, 2) geeft {} in plaats van 4".format(lst_test, find_index_of_minimum(lst_test, 2)) | |||||
assert find_index_of_minimum(lst_test, 3) == 4, "\x1b[0;31mFout: find_index_of_minimum({}, 3) geeft {} in plaats van 4".format(lst_test, find_index_of_minimum(lst_test, 3)) | |||||
def test_selection_sort(): | |||||
lst_test = random.sample(range(-99, 100), 6) | |||||
lst_copy = lst_test.copy() | |||||
selection_sort(lst_test) | |||||
assert lst_test == sorted(lst_copy), "\x1b[0;31mFout: selection_sort({}) geeft {} in plaats van {}".format(lst_copy, lst_test, sorted(lst_copy)) | |||||
if __name__ == '__main__': | |||||
try: | |||||
test_swap() | |||||
print("\x1b[0;32mJe functie swap() werkt goed!") | |||||
test_find_index_of_minimum() | |||||
print("\x1b[0;32mJe functie find_index_of_minimum() werkt goed!") | |||||
test_selection_sort() | |||||
print("\x1b[0;32mJe selection sort algoritme werkt goed!\n\nKnap gedaan!") | |||||
except AssertionError as ae: | |||||
print(ae) |