Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # -*-coding: utf8-*-
- # constants
- R = '-->'
- L = '<--'
- CORN = 'corn'
- DUCK = 'duck'
- WOLF = 'wolf'
- BOAT = 'boat'
- ALL = [CORN, WOLF, DUCK]
- # move duck from bank if conditions are met
- def force_move_duck(bank):
- if DUCK in bank and CORN in bank:
- return True
- if DUCK in bank and WOLF in bank:
- return True
- # just pretty print all from both river banks
- def print_banks(left_bank, right_bank, direction):
- l = '({})'.format(', '.join(left_bank))
- r = '({})'.format(', '.join(right_bank))
- print('{:>30s} {} {:s}'.format(l, direction, r))
- # move to right_bank
- def to_right_bank(left_bank, right_bank):
- if force_move_duck(left_bank) and len(left_bank) == 3:
- left_bank.remove(DUCK)
- right_bank.append(DUCK)
- else:
- boat = left_bank.pop(0)
- right_bank.append(boat)
- print_banks(left_bank, right_bank, R)
- return left_bank, right_bank
- # move to left_bank
- def to_left_bank(left_bank, right_bank):
- if force_move_duck(right_bank):
- right_bank.remove(DUCK)
- left_bank.append(DUCK)
- print_banks(left_bank, right_bank, L)
- return left_bank, right_bank
- def loop():
- # Initial status
- left_bank = ALL
- right_bank = []
- print_banks(left_bank, right_bank, '~~~')
- # main loop
- while True:
- left_bank, right_bank = to_right_bank(left_bank, right_bank)
- # we break the loop if ALL are in right_bank
- if len(set(ALL) - set(right_bank)) == 0:
- break
- left_bank, right_bank = to_left_bank(left_bank, right_bank)
- if __name__ == '__main__':
- loop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement