Sit-In Lab 1 Twenty-Forty-Eight
2048 Puzzle 4 by 4 matrix You can slide the tiles in 4 directions: up, down, left, right Tiles will hit each other If 2 same-number tiles hit each other, they are “merged” Tiles can only be merged once Write a piece of code to print the result of the move Input: 4 lines of 4 numbers - Initial state of the puzzle Followed by d - the direction of the move 0 (left) 1 (up) 2 (right) 3 (down) Output the outcome of the move
Sample 1 2 4 16 8 64 32 Move left
Similar numbers will be merged Sample 1 2 4 16 8 64 32 4 16 8 2 64 32 Move left Similar numbers will be merged Before After
Sample 2 2 4 16 8 64 32 Move up
Sample 2 2 4 16 8 64 32 2 16 8 4 64 32 Move up Numbers take the place of the “0” Similar numbers will be merged Before After
Sample 3 2 4 16 8 64 32 Move right
Sample 3 2 4 16 8 64 32 4 16 8 2 64 32 Move right Numbers take the place of the “0” Similar numbers will be merged Before After
Sample 4 2 4 16 8 64 32 Move down
Similar numbers will be merged Sample 4 2 4 16 8 64 32 2 4 16 8 64 32 Move down Similar numbers will be merged Before After
Algorithm #1 To move up… Use a combination of rotateRight moveLeft 2 16 8 4 64 32 4 8 32 64 16 2 Use a combination of rotateRight moveLeft 4. Move left To move up… 1. Rotate right 2. Rotate right 3. Rotate right 2 4 16 8 64 32 32 2 4 64 16 8 64 32 4 2 8 16 2 4 8 32 64 16
Algorithm #1 To move right… Use a combination of rotateRight moveLeft 4 16 8 2 64 32 4 2 64 8 32 16 Use a combination of rotateRight moveLeft 4. Rotate right To move right… 1. Rotate right 2. Rotate right 3. Move left 2 4 16 8 64 32 32 2 4 64 16 8 64 32 4 2 8 16 64 4 32 2 8 16
Algorithm #1 To move down… Use a combination of rotateRight moveLeft 2 4 16 8 64 32 4 8 32 64 16 2 Use a combination of rotateRight moveLeft 4. Rotate right To move down… 1. Rotate right 2. Move left 3. Rotate right 2 4 16 8 64 32 32 2 4 64 16 8 32 2 4 64 16 8 8 64 32 4 2 16
Main method Helper methods Read in the inputs Call helper methods and print the output Helper methods rotateRight: rotate the matrix 90 degrees right moveLeft: move numbers to the left, merging numbers if necessary
Algorithm #2 Assemble 1D array Perform moveLeft on each of the array Copy result back to array 1 2 3 4 4 3 2 1 Move left Move right 1 2 3 4 4 3 2 1 Move up Move down
Main method Helper methods Read in the inputs Call helper methods and print the output Helper methods assemble1DArray: retrieve 1D array based on direction of move, set first element to be the direction of the move moveLeft: move numbers to the left, merging numbers if necessary
How to assemble?
2 4 16 8 64 32 Sample 1 Move left [0, 0] [0, 1] [0, 2] [0, 3] … 4 16 8 64 32 Move left (first element is the direction of the move) [0, 0] [0, 1] [0, 2] [0, 3] …
Sample 2 2 4 16 8 64 32 Move up [0, 0] [1, 0] [2, 0] [3, 0] …
Sample 3 2 4 16 8 64 32 Move right [0, 3] [0, 2] [0, 1] [0, 0] …
Sample 4 2 4 16 8 64 32 Move down [3, 0] [2, 0] [1, 0] [0, 0] …
How to collapse and merge? (moveLeft)
moveLeft 2 4 Move left Collapse all numbers to left 2 4
2 4 2 4 moveLeft Compare 2 numbers if similar If not, move onto the next set of numbers 2 4
2 4 2 8 moveLeft Compare the next set of numbers If yes, merge the numbers 2 8
2 8 2 8 moveLeft Continue until no more comparisons Collapse everything to the left again, if necessary 2 8
Questions?