Advertisement
Noam_15

Hanukkah Riddle - Solution for 2 people

Dec 13th, 2020 (edited)
1,165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.56 KB | None | 0 0
  1. # A python solution with 2 people, for this riddle: https://www.idf.il/%D7%90%D7%AA%D7%A8%D7%99%D7%9D/%D7%96%D7%A8%D7%95%D7%A2-%D7%94%D7%99%D7%91%D7%A9%D7%94/2020/%D7%97%D7%99%D7%93%D7%AA-%D7%9E%D7%A6%D7%95%D7%91-%D7%9E%D7%99%D7%95%D7%97%D7%93%D7%AA-%D7%9C%D7%97%D7%A0%D7%95%D7%9B%D7%94/
  2.  
  3.  
  4. from itertools import product
  5.  
  6. # Numbers: 0...PEOPLE_NUM-1
  7. PEOPLE_NUM = 2 # (100 is too slow)
  8.  
  9. def get_all_possible_numbers(people_num: int):
  10.     return (list(i) for i in product(range(0, people_num), repeat=people_num))
  11.  
  12. def hide_number_in_index(numbers: list, index: int):
  13.     numbers_copy = numbers.copy()
  14.     numbers_copy[index] = None
  15.     return numbers_copy
  16.  
  17. def find_good_guess_index(guesses: list, real_numbers: list):
  18.     for ind, guess in enumerate(guesses):
  19.         if guess == real_numbers[ind]:
  20.             return ind
  21.     return -1
  22.  
  23. # Anything you need to store before start. Readonly.
  24. store = ()
  25.  
  26. def single_guess(my_ind: int, all_people_except_me: list):
  27.     return all_people_except_me[1 - my_ind] ^ my_ind
  28.  
  29.  
  30. # Start:
  31.  
  32. all_good = True
  33.  
  34. for real_numbers in get_all_possible_numbers(PEOPLE_NUM):
  35.     guesses = [single_guess(ind, hide_number_in_index(real_numbers, ind))
  36.         for ind, num in enumerate(real_numbers)]
  37.  
  38.     good_guess_index = find_good_guess_index(guesses, real_numbers)
  39.     is_good_guess = good_guess_index > -1
  40.  
  41.     if not is_good_guess:
  42.         all_good = False
  43.  
  44.     message = f"GOOD! ({good_guess_index})" if is_good_guess else "*BAD!*"
  45.     print(f'{real_numbers} TO {guesses}   => {message}')
  46.  
  47. print(f"All Good: {all_good}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement