Skip to content

Commit

Permalink
add help message and lower bound for easy (x)cross scramble, clean up
Browse files Browse the repository at this point in the history
  • Loading branch information
cs0x7f committed Sep 4, 2024
1 parent f0e5337 commit 59d989f
Show file tree
Hide file tree
Showing 40 changed files with 138 additions and 55 deletions.
76 changes: 54 additions & 22 deletions src/js/lib/mathlib.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,22 @@ var mathlib = (function() {
}
}

var permMul4 = [];
for (var i = 0; i < 24; i++) {
var perm1 = [];
var perm2 = [];
var perm3 = [];
permMul4[i] = [];
setNPerm(perm1, i, 4);
for (var j = 0; j < 24; j++) {
setNPerm(perm2, j, 4);
for (var k = 0; k < 4; k++) {
perm3[k] = perm1[perm2[k]];
}
permMul4[i][j] = getNPerm(perm3, 4);
}
}

function circleOri(arr, a, b, c, d, ori) {
var temp = arr[a];
arr[a] = arr[d] ^ ori;
Expand Down Expand Up @@ -1046,49 +1062,64 @@ var mathlib = (function() {

_ = Searcher.prototype;

_.solve = function(idx, minl, MAXL, callback) {
var sols = this.solveMulti([idx], minl, MAXL, callback);
_.solve = function(idx, minl, MAXL, callback, cost) {
var sols = this.solveMulti([idx], minl, MAXL, callback, cost);
return sols == null ? null : sols[0];
};

_.solveMulti = function(idxs, minl, MAXL, callback) {
_.solveMulti = function(idxs, minl, MAXL, callback, cost) {
this.sidx = 0;
this.sol = [];
this.length = minl;
this.idxs = idxs;
return this.nextMulti(MAXL, callback, cost);
};

_.next = function(MAXL, callback, cost) {
var sols = this.nextMulti(MAXL, callback, cost);
return sols == null ? null : sols[0];
};

_.nextMulti = function(MAXL, callback, cost) {
this.cost = (cost || 1e9) + 1;
this.callback = callback || function() { return true; };
var sol = [];
out: for (var l = minl; l <= MAXL; l++) {
for (var s = 0; s < idxs.length; s++) {
this.sidx = s;
if (this.idaSearch(idxs[s], l, -1, sol) == 0) {
break out;
for (; this.length <= MAXL; this.length++) {
for (; this.sidx < this.idxs.length; this.sidx++) {
if (this.idaSearch(this.idxs[this.sidx], this.length, 0, -1, this.sol) == 0) {
return this.cost <= 0 ? null : [this.sol, this.sidx];
}
}
this.sidx = -1;
this.sidx = 0;
}
return this.sidx == -1 ? null : [sol, this.sidx];
};
return null;
}

_.idaSearch = function(idx, maxl, lm, sol) {
_.idaSearch = function(idx, maxl, depth, lm, sol) {
if (--this.cost <= 0) {
return 0;
}
var prun = this.getPrun(idx);
if (prun > maxl) {
return prun > maxl + 1 ? 2 : 1;
}
if (maxl == 0) {
} else if (maxl == 0) {
return this.isSolved(idx) && this.callback(sol, this.sidx) ? 0 : 1;
}
if (prun == 0 && this.isSolved(idx) && maxl == 1) {
} else if (prun == 0 && maxl == 1 && this.isSolved(idx)) {
return 1;
}
for (var axis = 0; axis < this.N_AXIS; axis++) {
var axis = sol.length > depth ? sol[depth][0] : 0;
for (; axis < this.N_AXIS; axis++) {
if (this.ckmv[lm] >> axis & 1) {
continue;
}
var idx1 = $.isArray(idx) ? idx.slice() : idx;
for (var pow = 0; pow < this.N_POWER; pow++) {
idx1 = this.doMove(idx1, axis);
var pow = sol.length > depth ? sol[depth][1] : 0;
for (; pow < this.N_POWER; pow++) {
idx1 = this.doMove(idx1, axis, pow);
if (idx1 == null) {
break;
}
sol.push([axis, pow]);
var ret = this.idaSearch(idx1, maxl - 1, axis, sol);
sol[depth] = [axis, pow];
var ret = this.idaSearch(idx1, maxl - 1, depth + 1, axis, sol);
if (ret == 0) {
return 0;
}
Expand Down Expand Up @@ -1436,6 +1467,7 @@ var mathlib = (function() {
setNPerm: setNPerm,
getNPerm: getNPerm,
getNParity: getNParity,
permMul4: permMul4,
Coord: Coord,
createMove: createMove,
createMoveHash: createMoveHash,
Expand Down
2 changes: 1 addition & 1 deletion src/js/lib/utillib.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ ISCSTIMER && execMain(function() {
DEBUG && console.log(CSTIMER_VERSION, fingerprint, msg, url, line, col, error);
};

var constants = ['CSTIMER_VERSION', 'LANG_SET', 'LANG_STR', 'LANG_CUR', 'OK_LANG', 'CANCEL_LANG', 'RESET_LANG', 'ABOUT_LANG', 'ZOOM_LANG', 'COPY_LANG', 'BUTTON_TIME_LIST', 'BUTTON_OPTIONS', 'BUTTON_EXPORT', 'BUTTON_DONATE', 'PROPERTY_SR', 'PROPERTY_USEINS', 'PROPERTY_USEINS_STR', 'PROPERTY_SHOWINS', 'PROPERTY_VOICEINS', 'PROPERTY_VOICEINS_STR', 'PROPERTY_VOICEVOL', 'PROPERTY_PHASES', 'PROPERTY_TIMERSIZE', 'PROPERTY_USEMILLI', 'PROPERTY_SMALLADP', 'PROPERTY_SCRSIZE', 'PROPERTY_SCRMONO', 'PROPERTY_SCRLIM', 'PROPERTY_SCRALIGN', 'PROPERTY_SCRALIGN_STR', 'PROPERTY_SCRWRAP', 'PROPERTY_SCRWRAP_STR', 'PROPERTY_SCRNEUT', 'PROPERTY_SCRNEUT_STR', 'PROPERTY_SCREQPR', 'PROPERTY_SCRFAST', 'PROPERTY_SCRKEYM', 'PROPERTY_SCRCLK', 'PROPERTY_SCRCLK_STR', 'PROPERTY_WNDSCR', 'PROPERTY_WNDSTAT', 'PROPERTY_WNDTOOL', 'PROPERTY_WND_STR', 'EXPORT_DATAEXPORT', 'EXPORT_TOFILE', 'EXPORT_FROMFILE', 'EXPORT_TOSERV', 'EXPORT_FROMSERV', 'EXPORT_FROMOTHER', 'EXPORT_USERID', 'EXPORT_INVID', 'EXPORT_ERROR', 'EXPORT_NODATA', 'EXPORT_UPLOADED', 'EXPORT_CODEPROMPT', 'EXPORT_ONLYOPT', 'EXPORT_ACCOUNT', 'EXPORT_LOGINGGL', 'EXPORT_LOGINWCA', 'EXPORT_LOGOUTCFM', 'EXPORT_LOGINAUTHED', 'EXPORT_AEXPALERT', 'EXPORT_WHICH', 'EXPORT_WHICH_ITEM', 'IMPORT_FINAL_CONFIRM', 'BUTTON_SCRAMBLE', 'BUTTON_TOOLS', 'IMAGE_UNAVAILABLE', 'TOOLS_SELECTFUNC', 'TOOLS_CROSS', 'TOOLS_EOLINE', 'TOOLS_ROUX1', 'TOOLS_222FACE', 'TOOLS_GIIKER', 'TOOLS_IMAGE', 'TOOLS_STATS', 'TOOLS_HUGESTATS', 'TOOLS_DISTRIBUTION', 'TOOLS_TREND', 'TOOLS_METRONOME', 'TOOLS_RECONS', 'TOOLS_RECONS_NODATA', 'TOOLS_RECONS_TITLE', 'TOOLS_TRAINSTAT', 'TOOLS_BLDHELPER', 'TOOLS_CFMTIME', 'TOOLS_SOLVERS', 'TOOLS_DLYSTAT', 'TOOLS_DLYSTAT1', 'TOOLS_DLYSTAT_OPT1', 'TOOLS_DLYSTAT_OPT2', 'TOOLS_SYNCSEED', 'TOOLS_SYNCSEED_SEED', 'TOOLS_SYNCSEED_INPUT', 'TOOLS_SYNCSEED_30S', 'TOOLS_SYNCSEED_HELP', 'TOOLS_SYNCSEED_DISABLE', 'TOOLS_SYNCSEED_INPUTA', 'TOOLS_BATTLE', 'TOOLS_BATTLE_HEAD', 'TOOLS_BATTLE_TITLE', 'TOOLS_BATTLE_STATUS', 'TOOLS_BATTLE_INFO', 'TOOLS_BATTLE_JOINALERT', 'TOOLS_BATTLE_LEAVEALERT', 'OLCOMP_UPDATELIST', 'OLCOMP_VIEWRESULT', 'OLCOMP_VIEWMYRESULT', 'OLCOMP_START', 'OLCOMP_SUBMIT', 'OLCOMP_SUBMITAS', 'OLCOMP_WCANOTICE', 'OLCOMP_OLCOMP', 'OLCOMP_ANONYM', 'OLCOMP_ME', 'OLCOMP_WCAACCOUNT', 'OLCOMP_ABORT', 'OLCOMP_WITHANONYM', 'PROPERTY_IMGSIZE', 'PROPERTY_IMGREP', 'TIMER_INSPECT', 'TIMER_SOLVE', 'PROPERTY_USEMOUSE', 'PROPERTY_TIMEU', 'PROPERTY_TIMEU_STR', 'PROPERTY_PRETIME', 'PROPERTY_ENTERING', 'PROPERTY_ENTERING_STR', 'PROPERTY_INTUNIT', 'PROPERTY_INTUNIT_STR', 'PROPERTY_COLOR', 'PROPERTY_COLORS', 'PROPERTY_VIEW', 'PROPERTY_VIEW_STR', 'PROPERTY_UIDESIGN', 'PROPERTY_UIDESIGN_STR', 'COLOR_EXPORT', 'COLOR_IMPORT', 'COLOR_FAIL', 'PROPERTY_FONTCOLOR_STR', 'PROPERTY_COLOR_STR', 'PROPERTY_FONT', 'PROPERTY_FONT_STR', 'PROPERTY_FORMAT', 'PROPERTY_USEKSC', 'PROPERTY_USEGES', 'PROPERTY_NTOOLS', 'PROPERTY_AHIDE', 'SCRAMBLE_LAST', 'SCRAMBLE_NEXT', 'SCRAMBLE_SCRAMBLE', 'SCRAMBLE_SCRAMBLING', 'SCRAMBLE_LENGTH', 'SCRAMBLE_INPUT', 'SCRAMBLE_INPUTTYPE', 'PROPERTY_VRCSPEED', 'PROPERTY_VRCORI', 'PROPERTY_VRCMP', 'PROPERTY_VRCMPS', 'PROPERTY_GIIKERVRC', 'PROPERTY_GIISOK_DELAY', 'PROPERTY_GIISOK_DELAYS', 'PROPERTY_GIISOK_KEY', 'PROPERTY_GIISOK_MOVE', 'PROPERTY_GIISOK_MOVES', 'PROPERTY_GIISBEEP', 'PROPERTY_GIIRST', 'PROPERTY_GIIRSTS', 'PROPERTY_GIIMODE', 'PROPERTY_GIIMODES', 'PROPERTY_VRCAH', 'PROPERTY_VRCAHS', 'CONFIRM_GIIRST', 'PROPERTY_GIIAED', 'scrdata', 'SCRAMBLE_NOOBST', 'SCRAMBLE_NOOBSS', 'SCROPT_TITLE', 'SCROPT_BTNALL', 'SCROPT_BTNNONE', 'SCROPT_EMPTYALT', 'STATS_CFM_RESET', 'STATS_CFM_DELSS', 'STATS_CFM_DELMUL', 'STATS_CFM_DELETE', 'STATS_COMMENT', 'STATS_REVIEW', 'STATS_DATE', 'STATS_SSSTAT', 'STATS_SSRETRY', 'STATS_CURROUND', 'STATS_CURSESSION', 'STATS_CURSPLIT', 'STATS_EXPORTCSV', 'STATS_SSMGR_TITLE', 'STATS_SSMGR_NAME', 'STATS_SSMGR_DETAIL', 'STATS_SSMGR_OPS', 'STATS_SSMGR_ORDER', 'STATS_SSMGR_ODCFM', 'STATS_SSMGR_SORTCFM', 'STATS_ALERTMG', 'STATS_PROMPTSPL', 'STATS_ALERTSPL', 'STATS_AVG', 'STATS_SUM', 'STATS_SOLVE', 'STATS_TIME', 'STATS_SESSION', 'STATS_SESSION_NAME', 'STATS_SESSION_NAMEC', 'STATS_STRING', 'STATS_PREC', 'STATS_PREC_STR', 'STATS_TYPELEN', 'STATS_STATCLR', 'STATS_ABSIDX', 'STATS_XSESSION_DATE', 'STATS_XSESSION_NAME', 'STATS_XSESSION_SCR', 'STATS_XSESSION_CALC', 'STATS_RSFORSS', 'PROPERTY_PRINTSCR', 'PROPERTY_PRINTCOMM', 'PROPERTY_PRINTDATE', 'PROPERTY_SUMMARY', 'PROPERTY_IMRENAME', 'PROPERTY_SCR2SS', 'PROPERTY_SS2SCR', 'PROPERTY_SS2PHASES', 'PROPERTY_STATINV', 'PROPERTY_STATSSUM', 'PROPERTY_STATTHRES', 'PROPERTY_STATBPA', 'PROPERTY_STATWPA', 'PROPERTY_STATAL', 'PROPERTY_STATALU', 'PROPERTY_HLPBS', 'PROPERTY_HLPBS_STR', 'PROPERTY_DELMUL', 'PROPERTY_TOOLSFUNC', 'PROPERTY_TRIM', 'PROPERTY_TRIMR', 'PROPERTY_TRIM_MED', 'PROPERTY_STKHEAD', 'PROPERTY_TOOLPOS', 'PROPERTY_TOOLPOS_STR', 'PROPERTY_HIDEFULLSOL', 'PROPERTY_IMPPREV', 'PROPERTY_AUTOEXP', 'PROPERTY_AUTOEXP_OPT', 'PROPERTY_SCRASIZE', 'MODULE_NAMES', 'BGIMAGE_URL', 'BGIMAGE_INVALID', 'BGIMAGE_OPACITY', 'BGIMAGE_IMAGE', 'BGIMAGE_IMAGE_STR', 'SHOW_AVG_LABEL', 'SHOW_DIFF_LABEL', 'SHOW_DIFF_LABEL_STR', 'USE_LOGOHINT', 'TOOLS_SCRGEN', 'SCRGEN_NSCR', 'SCRGEN_PRE', 'SCRGEN_GEN', 'VRCREPLAY_TITLE', 'VRCREPLAY_ORI', 'VRCREPLAY_SHARE', 'GIIKER_CONNECT', 'GIIKER_RESET', 'GIIKER_REQMACMSG', 'GIIKER_NOBLEMSG', 'PROPERTY_SHOWAD', 'PROPERTY_GIIORI', 'LGHINT_INVALID', 'LGHINT_NETERR', 'LGHINT_SERVERR', 'LGHINT_SUBMITED', 'LGHINT_SSBEST', 'LGHINT_SCRCOPY', 'LGHINT_LINKCOPY', 'LGHINT_SOLVCOPY', 'LGHINT_SORT0', 'LGHINT_IMPORTED', 'LGHINT_IMPORT0', 'LGHINT_BTCONSUC', 'LGHINT_BTDISCON', 'LGHINT_BTNOTSUP', 'LGHINT_BTINVMAC', 'LGHINT_AEXPABT', 'LGHINT_AEXPSUC', 'LGHINT_AEXPFAL'];
var constants = ['CSTIMER_VERSION', 'LANG_SET', 'LANG_STR', 'LANG_CUR', 'OK_LANG', 'CANCEL_LANG', 'RESET_LANG', 'ABOUT_LANG', 'ZOOM_LANG', 'COPY_LANG', 'BUTTON_TIME_LIST', 'BUTTON_OPTIONS', 'BUTTON_EXPORT', 'BUTTON_DONATE', 'PROPERTY_SR', 'PROPERTY_USEINS', 'PROPERTY_USEINS_STR', 'PROPERTY_SHOWINS', 'PROPERTY_VOICEINS', 'PROPERTY_VOICEINS_STR', 'PROPERTY_VOICEVOL', 'PROPERTY_PHASES', 'PROPERTY_TIMERSIZE', 'PROPERTY_USEMILLI', 'PROPERTY_SMALLADP', 'PROPERTY_SCRSIZE', 'PROPERTY_SCRMONO', 'PROPERTY_SCRLIM', 'PROPERTY_SCRALIGN', 'PROPERTY_SCRALIGN_STR', 'PROPERTY_SCRWRAP', 'PROPERTY_SCRWRAP_STR', 'PROPERTY_SCRNEUT', 'PROPERTY_SCRNEUT_STR', 'PROPERTY_SCREQPR', 'PROPERTY_SCRFAST', 'PROPERTY_SCRKEYM', 'PROPERTY_SCRCLK', 'PROPERTY_SCRCLK_STR', 'PROPERTY_WNDSCR', 'PROPERTY_WNDSTAT', 'PROPERTY_WNDTOOL', 'PROPERTY_WND_STR', 'EXPORT_DATAEXPORT', 'EXPORT_TOFILE', 'EXPORT_FROMFILE', 'EXPORT_TOSERV', 'EXPORT_FROMSERV', 'EXPORT_FROMOTHER', 'EXPORT_USERID', 'EXPORT_INVID', 'EXPORT_ERROR', 'EXPORT_NODATA', 'EXPORT_UPLOADED', 'EXPORT_CODEPROMPT', 'EXPORT_ONLYOPT', 'EXPORT_ACCOUNT', 'EXPORT_LOGINGGL', 'EXPORT_LOGINWCA', 'EXPORT_LOGOUTCFM', 'EXPORT_LOGINAUTHED', 'EXPORT_AEXPALERT', 'EXPORT_WHICH', 'EXPORT_WHICH_ITEM', 'IMPORT_FINAL_CONFIRM', 'BUTTON_SCRAMBLE', 'BUTTON_TOOLS', 'IMAGE_UNAVAILABLE', 'TOOLS_SELECTFUNC', 'TOOLS_CROSS', 'TOOLS_EOLINE', 'TOOLS_ROUX1', 'TOOLS_222FACE', 'TOOLS_GIIKER', 'TOOLS_IMAGE', 'TOOLS_STATS', 'TOOLS_HUGESTATS', 'TOOLS_DISTRIBUTION', 'TOOLS_TREND', 'TOOLS_METRONOME', 'TOOLS_RECONS', 'TOOLS_RECONS_NODATA', 'TOOLS_RECONS_TITLE', 'TOOLS_TRAINSTAT', 'TOOLS_BLDHELPER', 'TOOLS_CFMTIME', 'TOOLS_SOLVERS', 'TOOLS_DLYSTAT', 'TOOLS_DLYSTAT1', 'TOOLS_DLYSTAT_OPT1', 'TOOLS_DLYSTAT_OPT2', 'TOOLS_SYNCSEED', 'TOOLS_SYNCSEED_SEED', 'TOOLS_SYNCSEED_INPUT', 'TOOLS_SYNCSEED_30S', 'TOOLS_SYNCSEED_HELP', 'TOOLS_SYNCSEED_DISABLE', 'TOOLS_SYNCSEED_INPUTA', 'TOOLS_BATTLE', 'TOOLS_BATTLE_HEAD', 'TOOLS_BATTLE_TITLE', 'TOOLS_BATTLE_STATUS', 'TOOLS_BATTLE_INFO', 'TOOLS_BATTLE_JOINALERT', 'TOOLS_BATTLE_LEAVEALERT', 'OLCOMP_UPDATELIST', 'OLCOMP_VIEWRESULT', 'OLCOMP_VIEWMYRESULT', 'OLCOMP_START', 'OLCOMP_SUBMIT', 'OLCOMP_SUBMITAS', 'OLCOMP_WCANOTICE', 'OLCOMP_OLCOMP', 'OLCOMP_ANONYM', 'OLCOMP_ME', 'OLCOMP_WCAACCOUNT', 'OLCOMP_ABORT', 'OLCOMP_WITHANONYM', 'PROPERTY_IMGSIZE', 'PROPERTY_IMGREP', 'TIMER_INSPECT', 'TIMER_SOLVE', 'PROPERTY_USEMOUSE', 'PROPERTY_TIMEU', 'PROPERTY_TIMEU_STR', 'PROPERTY_PRETIME', 'PROPERTY_ENTERING', 'PROPERTY_ENTERING_STR', 'PROPERTY_INTUNIT', 'PROPERTY_INTUNIT_STR', 'PROPERTY_COLOR', 'PROPERTY_COLORS', 'PROPERTY_VIEW', 'PROPERTY_VIEW_STR', 'PROPERTY_UIDESIGN', 'PROPERTY_UIDESIGN_STR', 'COLOR_EXPORT', 'COLOR_IMPORT', 'COLOR_FAIL', 'PROPERTY_FONTCOLOR_STR', 'PROPERTY_COLOR_STR', 'PROPERTY_FONT', 'PROPERTY_FONT_STR', 'PROPERTY_FORMAT', 'PROPERTY_USEKSC', 'PROPERTY_USEGES', 'PROPERTY_NTOOLS', 'PROPERTY_AHIDE', 'SCRAMBLE_LAST', 'SCRAMBLE_NEXT', 'SCRAMBLE_SCRAMBLE', 'SCRAMBLE_SCRAMBLING', 'SCRAMBLE_LENGTH', 'SCRAMBLE_INPUT', 'SCRAMBLE_INPUTTYPE', 'PROPERTY_VRCSPEED', 'PROPERTY_VRCORI', 'PROPERTY_VRCMP', 'PROPERTY_VRCMPS', 'PROPERTY_GIIKERVRC', 'PROPERTY_GIISOK_DELAY', 'PROPERTY_GIISOK_DELAYS', 'PROPERTY_GIISOK_KEY', 'PROPERTY_GIISOK_MOVE', 'PROPERTY_GIISOK_MOVES', 'PROPERTY_GIISBEEP', 'PROPERTY_GIIRST', 'PROPERTY_GIIRSTS', 'PROPERTY_GIIMODE', 'PROPERTY_GIIMODES', 'PROPERTY_VRCAH', 'PROPERTY_VRCAHS', 'CONFIRM_GIIRST', 'PROPERTY_GIIAED', 'scrdata', 'SCRAMBLE_NOOBST', 'SCRAMBLE_NOOBSS', 'SCROPT_TITLE', 'SCROPT_BTNALL', 'SCROPT_BTNNONE', 'SCROPT_EMPTYALT', 'STATS_CFM_RESET', 'STATS_CFM_DELSS', 'STATS_CFM_DELMUL', 'STATS_CFM_DELETE', 'STATS_COMMENT', 'STATS_REVIEW', 'STATS_DATE', 'STATS_SSSTAT', 'STATS_SSRETRY', 'STATS_CURROUND', 'STATS_CURSESSION', 'STATS_CURSPLIT', 'STATS_EXPORTCSV', 'STATS_SSMGR_TITLE', 'STATS_SSMGR_NAME', 'STATS_SSMGR_DETAIL', 'STATS_SSMGR_OPS', 'STATS_SSMGR_ORDER', 'STATS_SSMGR_ODCFM', 'STATS_SSMGR_SORTCFM', 'STATS_ALERTMG', 'STATS_PROMPTSPL', 'STATS_ALERTSPL', 'STATS_AVG', 'STATS_SUM', 'STATS_SOLVE', 'STATS_TIME', 'STATS_SESSION', 'STATS_SESSION_NAME', 'STATS_SESSION_NAMEC', 'STATS_STRING', 'STATS_PREC', 'STATS_PREC_STR', 'STATS_TYPELEN', 'STATS_STATCLR', 'STATS_ABSIDX', 'STATS_XSESSION_DATE', 'STATS_XSESSION_NAME', 'STATS_XSESSION_SCR', 'STATS_XSESSION_CALC', 'STATS_RSFORSS', 'PROPERTY_PRINTSCR', 'PROPERTY_PRINTCOMM', 'PROPERTY_PRINTDATE', 'PROPERTY_SUMMARY', 'PROPERTY_IMRENAME', 'PROPERTY_SCR2SS', 'PROPERTY_SS2SCR', 'PROPERTY_SS2PHASES', 'PROPERTY_STATINV', 'PROPERTY_STATSSUM', 'PROPERTY_STATTHRES', 'PROPERTY_STATBPA', 'PROPERTY_STATWPA', 'PROPERTY_STATAL', 'PROPERTY_STATALU', 'PROPERTY_HLPBS', 'PROPERTY_HLPBS_STR', 'PROPERTY_DELMUL', 'PROPERTY_TOOLSFUNC', 'PROPERTY_TRIM', 'PROPERTY_TRIMR', 'PROPERTY_TRIM_MED', 'PROPERTY_STKHEAD', 'PROPERTY_TOOLPOS', 'PROPERTY_TOOLPOS_STR', 'PROPERTY_HIDEFULLSOL', 'PROPERTY_IMPPREV', 'PROPERTY_AUTOEXP', 'PROPERTY_AUTOEXP_OPT', 'PROPERTY_SCRASIZE', 'MODULE_NAMES', 'BGIMAGE_URL', 'BGIMAGE_INVALID', 'BGIMAGE_OPACITY', 'BGIMAGE_IMAGE', 'BGIMAGE_IMAGE_STR', 'SHOW_AVG_LABEL', 'SHOW_DIFF_LABEL', 'SHOW_DIFF_LABEL_STR', 'USE_LOGOHINT', 'TOOLS_SCRGEN', 'SCRGEN_NSCR', 'SCRGEN_PRE', 'SCRGEN_GEN', 'VRCREPLAY_TITLE', 'VRCREPLAY_ORI', 'VRCREPLAY_SHARE', 'GIIKER_CONNECT', 'GIIKER_RESET', 'GIIKER_REQMACMSG', 'GIIKER_NOBLEMSG', 'PROPERTY_SHOWAD', 'PROPERTY_GIIORI', 'LGHINT_INVALID', 'LGHINT_NETERR', 'LGHINT_SERVERR', 'LGHINT_SUBMITED', 'LGHINT_SSBEST', 'LGHINT_SCRCOPY', 'LGHINT_LINKCOPY', 'LGHINT_SOLVCOPY', 'LGHINT_SORT0', 'LGHINT_IMPORTED', 'LGHINT_IMPORT0', 'LGHINT_BTCONSUC', 'LGHINT_BTDISCON', 'LGHINT_BTNOTSUP', 'LGHINT_BTINVMAC', 'LGHINT_AEXPABT', 'LGHINT_AEXPSUC', 'LGHINT_AEXPFAL', 'EASY_SCRAMBLE_HINT'];
for (var i = 0; i < constants.length; i++) {
window[constants[i]] = window[constants[i]] || '|||||||||||||||';
}
Expand Down
12 changes: 11 additions & 1 deletion src/js/scramble/scramble.js
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,17 @@ var scramble = ISCSTIMER && execMain(function(rn, rndEl) {
var scrFltSelAll = $('<input type="button">').val(SCROPT_BTNALL);
var scrFltSelNon = $('<input type="button">').val(SCROPT_BTNNONE);
var scrLen = $('<input type="text" maxlength="3">');
var scrHelp = $('<span>');
var sdiv = $('<div>');
var ssdiv = $('<div id="scrambleTxt"/>');
var alias = {
'333oh': '333',
'333ft': '333'
};
var helpMsg = {
'easyc': EASY_SCRAMBLE_HINT,
'easyxc': EASY_SCRAMBLE_HINT
};

var scrFlt = "";
var scrTPRe = /^\$T([a-zA-Z0-9]+)(-[0-9]+)?\$\s*(.*)$/;
Expand Down Expand Up @@ -531,6 +536,11 @@ var scramble = ISCSTIMER && execMain(function(rn, rndEl) {
scrLen.val(Math.abs(len));
scrLen[0].disabled = len <= 0;
var curType = menu.getSelected();
if (curType in helpMsg) {
scrHelp.text(helpMsg[curType]).show();
} else {
scrHelp.hide();
}
scrFlt = JSON.parse(kernel.getProp('scrFlt', JSON.stringify([curType, getExtra(curType, 0)])));
scrOpt[0].disabled = scrLen[0].disabled && !getExtra(curType, 0);
if (scrFlt[0] != curType) {
Expand Down Expand Up @@ -876,7 +886,7 @@ var scramble = ISCSTIMER && execMain(function(rn, rndEl) {

scrLen.change(genScramble);
scrOpt.click(showScrOpt);
scrOptDiv.append($('<div>').append(SCRAMBLE_LENGTH + ': ', scrLen), scrFltDiv);
scrOptDiv.append($('<div>').append(SCRAMBLE_LENGTH + ': ', scrLen), scrHelp, scrFltDiv);

title.append($('<nobr>').append(selects[0], ' ', selects[1], ' ', scrOpt), " <wbr>");
title.append($('<nobr>').append(lastClick, '/', nextClick, SCRAMBLE_SCRAMBLE));
Expand Down
15 changes: 11 additions & 4 deletions src/js/tools/cross.js
Original file line number Diff line number Diff line change
Expand Up @@ -365,8 +365,12 @@ var cross = (function(createMove, edgeMove, createPrun, setNPerm, getNPerm, Cnk,
function getEasyXCross(length) {
fullInit();
xinit();
var lenA = length % 10;
var lenB = ~~(length / 10);
var minLen = Math.min(lenA, lenB, 8);
var maxLen = Math.max(lenA, lenB);
var ncase = [1, 16, 174, 1568, 11377, 57758, 155012, 189978, 190080];
length = Math.max(0, Math.min(length, 8));
length = Math.max(0, Math.min(maxLen, 8)); // cross length
var remain = ncase[length];
var isFound = false;
var testCnt = 0;
Expand Down Expand Up @@ -416,10 +420,13 @@ var cross = (function(createMove, edgeMove, createPrun, setNPerm, getNPerm, Cnk,
for (var j = 0; j < 4; j++) {
corns[j] = corns[j] * 3 + mathlib.rn(3);
edges[j] = arr.indexOf(j) * 2 + mathlib.rn(2);
if (isFound) {
var sol = solvXCross.solve([perm, flip, edges[j], corns[j], j], 0, isFound ? minLen - 1 : maxLen);
if (sol == null) {
continue;
}
if (null != solvXCross.solve([perm, flip, edges[j], corns[j], j], 0, length)) {
} else if (sol.length < minLen) {
isFound = false; // too short
break;
} else if (sol.length <= maxLen) {
isFound = true;
}
}
Expand Down
1 change: 1 addition & 0 deletions src/lang/ar-sa.js
Original file line number Diff line number Diff line change
Expand Up @@ -617,3 +617,4 @@ var LGHINT_BTINVMAC = 'Not a valid mac address, cannot connect to your smart cub
var LGHINT_AEXPABT = 'Auto export abort';
var LGHINT_AEXPSUC = 'Auto export success';
var LGHINT_AEXPFAL = 'Auto export failed';
var EASY_SCRAMBLE_HINT = 'Change length to limit upper bound of solution length, input 2 digits to limit both lower (>= 8) and upper bound';
1 change: 1 addition & 0 deletions src/lang/ca-es.js
Original file line number Diff line number Diff line change
Expand Up @@ -617,3 +617,4 @@ var LGHINT_BTINVMAC = 'Not a valid mac address, cannot connect to your smart cub
var LGHINT_AEXPABT = 'Auto export abort';
var LGHINT_AEXPSUC = 'Auto export success';
var LGHINT_AEXPFAL = 'Auto export failed';
var EASY_SCRAMBLE_HINT = 'Change length to limit upper bound of solution length, input 2 digits to limit both lower (>= 8) and upper bound';
1 change: 1 addition & 0 deletions src/lang/cs-cz.js
Original file line number Diff line number Diff line change
Expand Up @@ -617,3 +617,4 @@ var LGHINT_BTINVMAC = 'Not a valid mac address, cannot connect to your smart cub
var LGHINT_AEXPABT = 'Auto export abort';
var LGHINT_AEXPSUC = 'Auto export success';
var LGHINT_AEXPFAL = 'Auto export failed';
var EASY_SCRAMBLE_HINT = 'Change length to limit upper bound of solution length, input 2 digits to limit both lower (>= 8) and upper bound';
1 change: 1 addition & 0 deletions src/lang/da-dk.js
Original file line number Diff line number Diff line change
Expand Up @@ -617,3 +617,4 @@ var LGHINT_BTINVMAC = 'Not a valid mac address, cannot connect to your smart cub
var LGHINT_AEXPABT = 'Auto export abort';
var LGHINT_AEXPSUC = 'Auto export success';
var LGHINT_AEXPFAL = 'Auto export failed';
var EASY_SCRAMBLE_HINT = 'Change length to limit upper bound of solution length, input 2 digits to limit both lower (>= 8) and upper bound';
1 change: 1 addition & 0 deletions src/lang/de-de.js
Original file line number Diff line number Diff line change
Expand Up @@ -617,3 +617,4 @@ var LGHINT_BTINVMAC = 'Ungültige MAC-Adresse, es kann keine Verbindung zum Smar
var LGHINT_AEXPABT = 'Automatischer Export abgebrochen';
var LGHINT_AEXPSUC = 'Automatischer Export erfolgreich';
var LGHINT_AEXPFAL = 'Automatischer Export fehlgeschlagen';
var EASY_SCRAMBLE_HINT = 'Change length to limit upper bound of solution length, input 2 digits to limit both lower (>= 8) and upper bound';
1 change: 1 addition & 0 deletions src/lang/el-gr.js
Original file line number Diff line number Diff line change
Expand Up @@ -617,3 +617,4 @@ var LGHINT_BTINVMAC = 'Not a valid mac address, cannot connect to your smart cub
var LGHINT_AEXPABT = 'Auto export abort';
var LGHINT_AEXPSUC = 'Auto export success';
var LGHINT_AEXPFAL = 'Auto export failed';
var EASY_SCRAMBLE_HINT = 'Change length to limit upper bound of solution length, input 2 digits to limit both lower (>= 8) and upper bound';
1 change: 1 addition & 0 deletions src/lang/en-us.js
Original file line number Diff line number Diff line change
Expand Up @@ -617,3 +617,4 @@ var LGHINT_BTINVMAC = 'Not a valid mac address, cannot connect to your smart cub
var LGHINT_AEXPABT = 'Auto export abort';
var LGHINT_AEXPSUC = 'Auto export success';
var LGHINT_AEXPFAL = 'Auto export failed';
var EASY_SCRAMBLE_HINT = 'Change length to limit upper bound of solution length, input 2 digits to limit both lower (>= 8) and upper bound';
Loading

0 comments on commit 59d989f

Please sign in to comment.