Mercurial > louis > peeves
view stacks_lists/pancakes/pancakes.py @ 0:20fea762903e
Import some exercises and solutions
author | Louis Opter <kalessin@kalessin.fr> |
---|---|
date | Sat, 29 Jun 2013 19:30:31 -0700 |
parents | |
children |
line wrap: on
line source
#!/usr/bin/env python def flip_pancakes(pancakes, index): print( "{0} → flip at {1} ({2}) (biggest_sorted={3}, biggest_unsorted={4}) → ".format( pancakes, index, pancakes[index], pancakes[find_biggest_sorted(pancakes)], pancakes[find_biggest_unsorted(pancakes)] ), end="" ) for i in range(int((index + 1) / 2)): tmp = pancakes[index - i] pancakes[index - i] = pancakes[i] pancakes[i] = tmp print("{0}".format(pancakes)) def is_sorted(pancakes): for i in range(1, len(pancakes)): if pancakes[i - 1] > pancakes[i]: return False return True def find_biggest(pancakes): biggest = pancakes[0] biggest_idx = 0 for i in range(1, len(pancakes)): if pancakes[i] > biggest: biggest = pancakes[i] biggest_idx = i return biggest_idx def find_biggest_sorted(pancakes): for i in reversed(range(1, len(pancakes))): if i != find_biggest(pancakes[:i + 1]): return i return 0 def find_biggest_unsorted(pancakes): biggest = pancakes[0] biggest_idx = 0 for i in range(1, find_biggest_sorted(pancakes) + 1): if pancakes[i] > biggest: biggest = pancakes[i] biggest_idx = i return biggest_idx def sort_pancakes(pancakes): while not is_sorted(pancakes): biggest_unsorted = find_biggest_unsorted(pancakes) flip_pancakes(pancakes, biggest_unsorted) biggest_sorted = find_biggest_sorted(pancakes) flip_pancakes(pancakes, biggest_sorted) biggest_unsorted = find_biggest_unsorted(pancakes) if __name__ == "__main__": sort_pancakes([7, 5, 4, 8, 2, 1])