/**
* Copyright (C) 2023 Shuang Chen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-----------------------------------------------------------------------
Modified by Isaac Vega
*/
export declare const Cnk: number[][];
export declare const fact: number[];
export declare function circleOri(arr: number[], a: number, b: number, c: number, d: number, ori: number): void;
export declare function circle(arr: any[], ...args: any[]): typeof circle;
export declare function acycle(arr: number[], perm: any[], pow?: number, ori?: number[]): typeof acycle;
export declare function getPruning(table: number[], index: number): number;
export declare function setNPerm(arr: number[], idx: number, n: number, even?: number): number[];
export declare function getNPerm(arr: number[], n: number, even?: number): number;
export declare function getNParity(idx: number, n: number): number;
export declare function get8Perm(arr: number[], n?: number, even?: number): number;
export declare function set8Perm(arr: number[], idx: number, n?: number, even?: number): number[];
export declare function getNOri(arr: number[], n: number, evenbase: number): number;
export declare function setNOri(arr: number[], idx: number, n: number, evenbase: number): number[];
export declare class coord {
length: number;
evenbase: number;
private type;
constructor(type: string, length: number, evenbase: number);
get(arr: number[]): number;
set(arr: number[], idx: number): number[];
}
export declare function fillFacelet(facelets: number[][], f: number[], perm: number[], ori: number[], divcol: number): void;
export declare function createMove(moveTable: number[][], size: number, doMove: any, N_MOVES?: number): void;
export declare function edgeMove(arr: number[], m: number): void;
export declare class CubieCube {
ca: number[];
ea: number[];
ori: number;
tstamp: number;
constructor();
static EdgeMult(a: CubieCube, b: CubieCube, prod: CubieCube): void;
static CornMult(a: CubieCube, b: CubieCube, prod: CubieCube): void;
static CubeMult(a: CubieCube, b: CubieCube, prod: CubieCube): void;
static moveCube: CubieCube[];
static rotCube: CubieCube[];
static get rotMult(): number[][];
static get rotMulI(): number[][];
static get rotMulM(): number[][];
static get rot2str(): string[];
static SOLVED: CubieCube;
init(ca: number[], ea: number[]): CubieCube;
hashCode(): number;
isEqual(c: CubieCube): boolean;
toFaceCube(cFacelet?: number[][], eFacelet?: number[][]): string;
invForm(cc: CubieCube): this;
fromFacelet(facelet: string, cFacelet?: number[][], eFacelet?: number[][]): this | -1;
verify(): 0 | -1;
edgeCycles(): number;
selfMoveStr(moveStr: string, isInv: boolean): number | undefined;
selfConj(conj?: number): void;
}
export declare function createPrun(prun: number[], init: number, size: number, maxd: number, doMove: any, N_MOVES?: number, N_POWER?: number, N_INV?: number): void;
declare type SolverState = number[];
export declare class Solver {
N_STATES: number;
N_MOVES: number;
N_POWER: number;
state_params: any;
inited: boolean;
prun: number[][];
move: any;
sol: number[][];
constructor(N_MOVES: number, N_POWER: number, state_params: any);
search(state: SolverState, minl: number, MAXL?: number): number[][] | null;
idaSearch(state: SolverState, maxl: number, lm: number): boolean;
toStr(sol: number[][], move_map: string, power_map: string): string;
}
export declare class gSolver {
prunDepth: number;
prevSize: number;
prunTableSize: number;
prunTable: Record;
cost: number;
MAX_PRUN_SIZE: number;
solvedStates: string[];
doMove: Function;
movesList: any[];
toUpdateArr: string[] | null;
state: string;
sol: any;
solArr: string[] | null;
prevSolStr: string | null;
subOpt: any;
visited: any;
maxl: any;
constructor(solvedStates: string[], doMove: Function, moves: Record);
updatePrun(targetDepth?: number): void;
updatePrunBFS(fromDepth: number): void;
search(state: string, minl: number, MAXL?: number): string[] | null;
searchNext(MAXL?: number, cost?: number): string[] | null;
getPruning(state: string): number;
idaSearch(state: string, maxl: number, lm: any, depth: number): boolean;
getSolArr(): any[];
}
export declare function rndEl(x: any[]): any;
export declare function rn(n: number): number;
export declare function rndPerm(n: number, isEven?: boolean): number[];
export declare function rndProb(plist: number[]): number;
export declare function time2str(unix: number, format: string): string;
export declare function str2time(val: string): number | null;
export declare function obj2str(val: object): string;
export declare function str2obj(val: any): object;
export declare function valuedArray(len: number, val: any): any[];
export declare function idxArray(arr: readonly any[], idx: number): any[];
export declare const minx: {
doMove: (state: number[], face: number, pow: number, wide: number) => void;
oppFace: number[];
adjFaces: number[][];
};
export declare const SOLVED_FACELET = "UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB";
export declare const getSeed: () => {
0: number;
1: string;
};
export declare const setSeed: (_rndCnt: number, _seedStr: string) => void;
export {};