scramble-generator
Version:
Generate scrambles for Rubik's cubes
67 lines (57 loc) • 2.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Faces = exports.formatScramble = undefined;
var _scrambleUtilsCommon = require('scramble-utils-common');
Object.defineProperty(exports, 'Faces', {
enumerable: true,
get: function get() {
return _scrambleUtilsCommon.Faces;
}
});
var _helpers = require('./helpers');
var _formatter = require('./formatter');
var _formatter2 = _interopRequireDefault(_formatter);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Generates a random scramble for the given cube size.
* @example
* import generateScramble from 'scramble-generator';
* generateScramble();
* // R' U F D' L ...
*
* generateScramble({ cubeSize: 3, formatted: false });
* // [ { face: 'U', inverted: false, double: true },
* // { face: 'R', inverted: true, double: false },
* // { face: 'D', inverted: false, double: true }, ... ]
*/
var generateScramble = function generateScramble() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$cubeSize = _ref.cubeSize,
cubeSize = _ref$cubeSize === undefined ? 3 : _ref$cubeSize,
_ref$length = _ref.length,
length = _ref$length === undefined ? (cubeSize - 2) * 20 || 8 : _ref$length,
_ref$formatted = _ref.formatted,
formatted = _ref$formatted === undefined ? true : _ref$formatted;
var scramble = [];
var maxLayers = Math.floor(cubeSize / 2);
var lastAxis = void 0;
for (var i = 0; i < length; i++) {
var faceSelections = _scrambleUtilsCommon.FaceList.filter(function (face) {
return _scrambleUtilsCommon.FaceAxisInfo[face] !== lastAxis;
});
var rand = (0, _helpers.randomInRange)(0, faceSelections.length);
var face = faceSelections[rand];
lastAxis = _scrambleUtilsCommon.FaceAxisInfo[face];
scramble.push((0, _scrambleUtilsCommon.createMove)({
face: face,
inverted: (0, _helpers.coinFlip)(),
double: (0, _helpers.coinFlip)(),
layerCount: (0, _helpers.randomInRange)(1, maxLayers + 1)
}));
}
return formatted ? (0, _formatter2.default)(scramble) : scramble;
};
exports.formatScramble = _formatter2.default;
exports.default = generateScramble;