Created
July 2, 2023 19:43
-
-
Save Dex9999/abc74f1ba7f28d34136fb3d4da3f9b1d to your computer and use it in GitHub Desktop.
Get Puzzle Type from a Scramble
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
| function whatPuzzle(scramble) { | |
| const cubePattern2x2 = /^([UFR]'?|2? ?)+$/; | |
| const cubePattern3x3 = /^([RLUDFB]'?|2? ?)+$/; | |
| const cubePattern4x4or5x5 = /^([RLUDFBwxyz]'?|2? ?)+$/; | |
| const cubePattern6x6or7x7 = /^([3RLUDFBw]'?|2? ?)+$/; | |
| const clockPattern = /^([AURDLFBy0-9+\-*]+ ?)+$/; | |
| const megaminxPattern = /^([RDU'+\-\s]+)+$/; | |
| const pyraminxPattern = /^([LUBR'brlu\s]+)+$/; | |
| const skewbPattern = /^(?:[LUBR'\s]+)$/; | |
| const squanPattern = /^[\(\-\d,\)\/\s]+$/; | |
| if (cubePattern2x2.test(scramble)) { | |
| return "222"; | |
| } else if (cubePattern3x3.test(scramble)) { | |
| if (skewbPattern.test(scramble)) { | |
| return "skewb"; | |
| } else if (scramble.trim().startsWith("R' U' F") && scramble.trim().endsWith("R' U' F")) { | |
| return "333fm"; | |
| } else { | |
| return "333"; | |
| } | |
| } else if (cubePattern4x4or5x5.test(scramble)) { | |
| if (scramble.split("w").length - 1 <= 2) { | |
| return "333bf"; | |
| } else if (scramble.split(" ").length === 60) { | |
| return "555"; | |
| } else if (scramble.includes('x') || scramble.includes('y') || scramble.includes('z')) { | |
| return "444bf"; | |
| } else { | |
| return "444"; | |
| } | |
| } else if (cubePattern6x6or7x7.test(scramble)) { | |
| if (scramble.split("3").length - 1 <= 2) { | |
| return "555bf"; | |
| } else if (scramble.split(" ").length === 100) { | |
| return "777"; | |
| } else { | |
| return "666"; | |
| } | |
| } else if (clockPattern.test(scramble)) { | |
| return "clock"; | |
| } else if (megaminxPattern.test(scramble)) { | |
| return "minx"; | |
| } else if (pyraminxPattern.test(scramble)) { | |
| return "pyram"; | |
| } else if (squanPattern.test(scramble)) { | |
| return "sq1"; | |
| } else { | |
| return "invalid"; | |
| } | |
| } | |
| // EXAMPLE USE: | |
| // const scramble1 = ` (0,-4)/ (-2,-5)/ (-1,2)/ (0,-3)/ (-5,-5)/ (-3,0)/ (-4,0)/ (3,0)/ (6,0)/ (0,-1)/ (-2,0)/`; | |
| // console.log(whatPuzzle(scramble1)); | |
| // Console Output: "sq1" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Super interesting function and case structure.
5BLD scrambles will have 3Rw or 3Uw in the end.
MBLD is a standalone event, it does not need differentiation.