@ -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) |