pollatron

Untitled

May 24th, 2025
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.09 KB | None | 0 0
  1. # others[N,D]: N is the tower itself (0,1,2), and D is the ODD/EVEN inidicator, where 0 means EVEN and 1 means ODD.
  2. others = ((1, 2), (0, 2), (0, 1))
  3.  
  4. size = int(input("Set the size of the tower (discs): "))
  5. movesRequired = (2**size - 1)
  6. towers = [
  7.     list(size - i for i in range(size)),  # full tower (size, size - 1, size - 2, ..., 1)
  8.     [],
  9.     []
  10. ]
  11.  
  12. def move(f, t):
  13.     piece = towers[f][-1]
  14.     if len(towers[t])>0 and towers[t][-1]<=piece: raise "Invalid Movement"
  15.     towers[f].pop()
  16.     towers[t].append(piece)
  17.  
  18. print(f"Start: {towers[0]} {towers[1]} {towers[2]}")
  19.  
  20. nextMoveFrom = 0
  21. moveCount = 0
  22. while len(towers[2]) < size:
  23.     moveTo = others[nextMoveFrom][len(towers[nextMoveFrom]) % 2]
  24.    
  25.     move(nextMoveFrom, moveTo)
  26.     moveCount += 1
  27.    
  28.     percentage = 100 * moveCount / movesRequired
  29.     print(f"Move {moveCount}: {nextMoveFrom} -> {moveTo}; Towers: {towers[0]} {towers[1]} {towers[2]} ({percentage}%)")
  30.    
  31.     o1 = others[moveTo][0]
  32.     o2 = others[moveTo][1]
  33.     nextMoveFrom = (
  34.         o2 if len(towers[o1])==0 else
  35.         o1 if len(towers[o2])==0 else
  36.         (o1 if towers[o1][-1] < towers[o2][-1] else o2))
  37.  
Add Comment
Please, Sign In to add comment