class Amida { var N:Number, M:Number; // number of candidates (amida vertical lines) var S:Array; // each state var C:Array; function Amida () { this.N = _root.N; this.M = _root.M; } function create() { create_ptn(); calc_S(); } function create_ptn(){ // create conversion (amida vertical lines) C = new Array(); for(var i:Number = 0; i < M; i++){ C[i] = new Array(N); for(var j:Number = 0; j < N; j++) C[i][j] = 0; if(i == M-1) break; for(;;){ var p:Number = int((N-1) * Math.random()); if(C[i][p] != 0) break; if(C[i][p+1] != 0) break; C[i][p] = 1; C[i][p+1] = -1; } } } function calc_S(){ S = new Array(); S[0] = new Array(N); for(var i:Number = 0; i < N; i++) S[0][i] = i; for(var i:Number = 1; i < M; i++){ S[i] = new Array(); for(var j:Number = 0; j < N; j++) S[i][j] = S[i-1][j+ C[i-1][j]]; } } function get_s(i:Number, j:Number){ return S[i][j]; } function get_x(s:Number, t:Number){ /* returns cross ptn such as XR(1), XL(-1) and NX(0) */ if(C[s][t] == 0) return _root.TYPE_NX; if(C[s][t] == 1) return _root.TYPE_XR; if(C[s][t] == -1) return _root.TYPE_XL; } }