You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
5.6 KiB

  1. """
  2. Analytical Skills
  3. Opgave: zoeken
  4. (c) 2019 Hogeschool Utrecht
  5. Tijmen Muller (tijmen.muller@hu.nl)
  6. Let op! Je mag voor deze opgave geen extra modules importeren met 'import'.
  7. """
  8. def linear_search(lst, target):
  9. """ Bepaalt of *target* voorkomt in lijst *lst* door middel van lineair zoeken. """
  10. return False
  11. def linear_search_index(lst, target):
  12. """ Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. lineair zoeken. """
  13. index = 0
  14. return -1
  15. def linear_search_index_steps(lst, target):
  16. """
  17. Geeft de positie (m.a.w. index) van *target* in lijst *lst*
  18. d.m.v. lineair zoeken, en het aantal benodigde stappen.
  19. """
  20. index = 0
  21. steps = 0
  22. return -1, steps
  23. def binary_search(lst, target):
  24. """ Bepaalt of *target* voorkomt in lijst *lst* door middel van binair zoeken. """
  25. # stap 1
  26. mini = 0
  27. # stap 6(!)
  28. while False: # hoelang ga je door met zoeken?
  29. # stap 2
  30. # stap 3
  31. return True
  32. # stap 4
  33. # stap 5
  34. return False
  35. def binary_search_index(lst, target):
  36. """ Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. binair zoeken. """
  37. return -1
  38. def binary_search_index_steps(lst, target):
  39. """
  40. Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. binair zoeken,
  41. en het aantal benodigde stappen.
  42. """
  43. steps = 0
  44. return (-1, steps)
  45. """==============================================[ HU TESTRAAMWERK ]====================================================
  46. Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
  47. Je kunt je code testen door deze file te runnen of met behulp van pytest.
  48. """
  49. import random
  50. def test_linear_search():
  51. for i in range(10):
  52. lst_test = random.sample(range(20), 10)
  53. target = random.randrange(20)
  54. assert linear_search(lst_test, target) == (target in lst_test), "Fout: linear_search({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search(lst_test, target), target in lst_test)
  55. def test_linear_search_index():
  56. for i in range(10):
  57. lst_test = random.sample(range(20), 10)
  58. target = random.choice(lst_test)
  59. assert linear_search_index(lst_test, target) == lst_test.index(target), "Fout: linear_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search_index(lst_test, target), lst_test.index(target))
  60. lst_test = [0, 1, 2]
  61. assert linear_search_index(lst_test, 3) == -1, "Fout: linear_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, 3, linear_search_index(lst_test, 3), -1)
  62. def test_linear_search_index_steps():
  63. for i in range(10):
  64. lst_test = random.sample(range(20), 10)
  65. target = random.choice(lst_test)
  66. assert linear_search_index_steps(lst_test, target)[0] == lst_test.index(target), "Fout: linear_search_index_steps({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search_index_steps(lst_test, target)[0], lst_test.index(target))
  67. def test_binary_search():
  68. for i in range(10):
  69. lst_test = sorted(random.sample(range(20), 10))
  70. target = random.randrange(20)
  71. assert binary_search(lst_test, target) == (target in lst_test), "Fout: binary_search({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search(lst_test, target), target in lst_test)
  72. def test_binary_search_index():
  73. for i in range(10):
  74. lst_test = sorted(random.sample(range(20), 10))
  75. target = random.choice(lst_test)
  76. assert binary_search_index(lst_test, target) == lst_test.index(target), "Fout: binary_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search_index(lst_test, target), lst_test.index(target))
  77. lst_test = [0, 1, 2]
  78. assert binary_search_index(lst_test, 3) == -1, "Fout: binary_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, 3, binary_search_index(lst_test, 3), -1)
  79. def test_binary_search_index_steps():
  80. for i in range(10):
  81. lst_test = sorted(random.sample(range(20), 10))
  82. target = random.choice(lst_test)
  83. assert binary_search_index_steps(lst_test, target)[0] == lst_test.index(target), "Fout: binary_search_index_steps({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search_index_steps(lst_test, target)[0], lst_test.index(target))
  84. if __name__ == '__main__':
  85. try:
  86. print("\x1b[0;32m")
  87. test_linear_search()
  88. print("Je functie linear_search() werkt goed!")
  89. test_linear_search_index()
  90. print("Je functie linear_search_index() werkt goed!")
  91. test_binary_search()
  92. print("Je functie binary_search() werkt goed!")
  93. test_binary_search_index()
  94. print("Je functie binary_search_index() werkt goed!")
  95. test_linear_search_index_steps()
  96. print("Je functie linear_search_index_steps() werkt goed!")
  97. test_binary_search_index_steps()
  98. print("Je functie binary_search_index_steps() werkt goed!")
  99. print("\x1b[0;30m")
  100. size = int(input("Geef een grootte voor de lijst: "))
  101. lst_test = list(range(size))
  102. print("Ik ga zoeken in:", lst_test)
  103. tgt = int(input("Geef een getal: "))
  104. (idx, cnt) = linear_search_index_steps(lst_test, tgt)
  105. print("Het lineair zoekalgoritme vond '" + str(tgt) + "' op positie '" + str(idx) + "' na " + str(cnt) + " stappen.")
  106. (idx, cnt) = binary_search_index_steps(lst_test, tgt)
  107. print("Het binair zoekalgoritme vond '" + str(tgt) + "' op positie '" + str(idx) + "' na " + str(cnt) + " stappen.")
  108. except AssertionError as ae:
  109. print("\x1b[0;31m")
  110. print(str(ae))