Created
April 3, 2020 08:57
-
-
Save TristenHarr/7d6f302583d2bfdacdb976910b601225 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # I've written this function to calculate the minimum number of moves required: | |
| # stacks: List of List of Characters representing the pieces in the stack, stacks[0][0] is the top of stack[0] | |
| # stack_ind: The index of the stack that the piece will be added to | |
| # needs_piece: The piece that should be added to the stack | |
| # needs_index: The index where the piece should be located | |
| def calculate_min_moves(stacks, stack_ind, needs_piece, needs_index): | |
| # Minimum moves needed to empty the stack that will receive the piece so that it can hold the piece | |
| num_removals = 0 | |
| for s in stacks[stack_ind][:needs_index+1]: | |
| if item != "-": | |
| num_removals += 1 | |
| min_to_unlock = 1000 | |
| unlock_from = -1 | |
| for i, stack in enumerate(stacks): | |
| if i != stack_ind: | |
| for k, piece in enumerate(stack): | |
| if piece == needs_piece: | |
| if k < min_to_unlock: | |
| min_to_unlock = k | |
| unlock_from = i | |
| num_free_spaces = 0 | |
| free_space_map = {} | |
| for i, stack in enumerate(stacks): | |
| if i != stack_ind and i != unlock_from: | |
| c = stack.count("-") | |
| num_free_spaces += c | |
| free_space_map[i] = c | |
| if num_removals + min_to_unlock <= num_free_spaces: | |
| print("No shuffling needed, there's enough free space to move all the extra nodes out of the way") | |
| else: | |
| # HERE | |
| print("case 2, things need shuffled") | |
| """ | |
| Edit: | |
| Test Cases on stacks: | |
| stacks = [ | |
| ['R', 'R', 'R', 'R'], | |
| ['Y', 'Y', 'Y', 'Y'], | |
| ['G', 'G', 'G', 'G'], | |
| ['-', '-', '-', 'B'], | |
| ['-', 'B', 'B', 'B'] | |
| ] | |
| Case 1: stacks[4][1] should be 'G' | |
| Move 'B' from stacks[4][1] to stacks[3][2] | |
| Move 'G' from stacks[2][0] to stacks[4][1] | |
| num_removals = 0 # 'G' is directly accessible as the top of stack 2 | |
| min_to_unlock = 1 # stack 4 has 1 piece that needs removed | |
| free_spaces = 3 # stack 3 has free spaces and no pieces need moved to or from it | |
| moves = [[4, 3], [2, 4]] | |
| min_moves = 2 | |
| # This is easy to calculate | |
| Case 2: stacks[0][3] should be 'B' | |
| Move 'B' from stacks[3][3] to stack[4][0] | |
| Move 'R' from stacks[0][0] to stacks[3][3] | |
| Move 'R' from stacks[0][1] to stacks[3][2] | |
| Move 'R' from stacks[0][2] to stacks[3][1] | |
| Move 'R' from stacks[0][3] to stacks[3][0] | |
| Move 'B' from stacks[4][0] to stacks[0][3] | |
| num_removals = 0 # 'B' is directly accessible | |
| min_to_unlock = 4 # stack 0 has 4 pieces that need removed | |
| free_spaces = 3 # If stack 3 and 4 were switched this would be 1 | |
| moves = [[3, 4], [0, 3], [0, 3], [0, 3], [0, 3], [4, 0]] | |
| min_moves = 6 | |
| #This is hard to calculate | |
| """ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment