- コラッツ予想がとけたらいいな その2
247 :132人目の素数さん[sage]:2018/06/13(水) 22:05:18.39 ID:6aITicNF - JavaScript で実装してみた
たぶん新しめのブラウザでないと動かない 最上位の1は暗黙の存在とし、内部的には全部'_'になって止まる 第1引数は下位を先頭とする2進数の文字列 (※最上位の1は入力からは除外する) 第2引数は途中で止めたい時用に処理する最大桁数 出力は途中経過の配列(最上位の1は補完) function collatz(a,m){ const STT=[ ['___','___','___'], // 停止 ['10L','11L','6_R'], // 最下位まで戻る ['___','___','10L'], // 繰り上がり処理 ['30R','41R','11L'], // ×3+0 ['31R','50R','20R'], // ×3+1 ['40R','51R','21R'], // ×3+2 ['6_R','5_R','0_R'], // 割る2 ]; let s=6, i=0, r=[a+1]; a=[...a]; while(s>0&&i<m){ let c='01'[a[i]]||'2'; let n=STT[s][c]; s=n[0]; // 状態 a[i]=n[1]; // 文字 i+=(n[2]=='R')?1:-1; // 移動 if(s==6)r.push(a.join('')+1); } return r; }
|