package puzzle; import static net.gnehzr.tnoodle.utils.GwtSafeUtils.azzert; import java.util.Random; import net.gnehzr.tnoodle.scrambles.PuzzleStateAndGenerator; import net.gnehzr.tnoodle.scrambles.InvalidMoveException; import net.gnehzr.tnoodle.scrambles.AlgorithmBuilder; import net.gnehzr.tnoodle.scrambles.AlgorithmBuilder.MergingMode; import org.timepedia.exporter.client.Export; @Export public class NoInspectionFourByFourCubePuzzle extends FourByFourCubePuzzle { public NoInspectionFourByFourCubePuzzle() { } @Override public PuzzleStateAndGenerator generateRandomMoves(Random r) { CubeMove[][] randomOrientationMoves = getRandomOrientationMoves(size - 1); CubeMove[] randomOrientation = randomOrientationMoves[r.nextInt(randomOrientationMoves.length)]; PuzzleStateAndGenerator psag = super.generateRandomMoves(r); psag = applyOrientation(this, randomOrientation, psag, true); return psag; } public static PuzzleStateAndGenerator applyOrientation(CubePuzzle puzzle, CubeMove[] randomOrientation, PuzzleStateAndGenerator psag, boolean discardRedundantMoves) { if(randomOrientation.length == 0) { // No reorientation required return psag; } // Append reorientation to scramble. try { AlgorithmBuilder ab = new AlgorithmBuilder(puzzle, MergingMode.NO_MERGING); ab.appendAlgorithm(psag.generator); for(CubeMove cm : randomOrientation) { ab.appendMove(cm.toString()); } psag = ab.getStateAndGenerator(); return psag; } catch(InvalidMoveException e) { azzert(false, e); return null; } } @Override public String getShortName() { return "444ni"; } @Override public String getLongName() { return "4x4x4 no inspection"; } }