[新着] Webテンプレートを仮オープンしました
//引数の配列の中身をランダムで入れ替える
function randomSort(list)
{
var iCount = list.length;
var iIndex;
var obj;
for(var i=0; i<list.length; i++)
{
iIndex = Math.floor(Math.random()*iCount);
obj = list[iIndex];
iCount--;
list[iIndex] = list[iCount];
list[iCount]= obj;
}
}
//random sort test.
var list_test = [0,1,2,3,4,5,6,7,8,9];
randomSort(list_test);
for(var i=0;i<list_test.length; i++)
alert(list_test[i]);<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript">
<!--
//亀用の多次元配列を生成し返す
function createKameList()
{
var list = new Array();
for(var i=0; i<9; i++)
list.push(createRandom9NumberList());
return list;
}
//一つのランダム9番号配列を生成し返す
function createRandom9NumberList()
{
var list = [1,2,3,4,5,6,7,8,9];
randomSort(list);
return list;
}
//引数の配列の中身をランダムで入れ替える
function randomSort(list)
{
var iCount = list.length;
var iIndex;
var obj;
for(var i=0; i<list.length; i++)
{
iIndex = Math.floor(Math.random()*iCount);
obj = list[iIndex];
iCount--;
list[iIndex] = list[iCount];
list[iCount]= obj;
}
}
//配列内の数字が記述された9マステーブルを出力する.
function output9CellTable(node_parent, list)
{
while(node_parent.hasChildNodes())
node_parent.removeChild(node_parent.lastChild);
var document = node_parent.ownerDocument;
var tbl = document.createElement("table");
var row;
for(var i=0; i<list.length; i++)
{
if(i % 3 == 0)
row = tbl.appendChild(document.createElement("tr"));
row.appendChild(document.createElement("td")).appendChild(document.createTextNode(list[i]));
}
node_parent.appendChild(tbl);
}
//亀再構築
function initialize_kame()
{
var list_kame = createKameList();
var div_kame = document.getElementById("layer_kame");
output9CellTable(div_kame, createRandom9NumberList());
var row;
for(var i=0; i<div_kame.firstChild.childNodes.length; i++)
{
row = div_kame.firstChild.childNodes[i];
for(var j=0; j<row.childNodes.length; j++)
{
output9CellTable(row.childNodes[j], list_kame[(i*3)+j]);
}
}
if(document.all)
div_kame.innerHTML = div_kame.innerHTML;
}
//-->
</script>
<style type="text/css">
td
{
border-style:solid;
}
</style>
</head>
<body onload="initialize_kame();">
<div id="layer_kame"></div>
<a href="#" onclick="javascript:initialize_kame();">再構築</a>
</body>
</html>//亀用の多次元配列を生成し返す
function createKameList()
{
var list = new Array();
while(true)
{
list.length = 0;
for(var i=0; i<9; i++)
list.push(createRandom9NumberList());
if(!Random9NumberListSort(list[0], null, null, null, list[3]))
continue;
if(!Random9NumberListSort(list[0], list[3], null, null, list[6]))
continue;
if(!Random9NumberListSort(null, null, list[0], null, list[1]))
continue;
if(!Random9NumberListSort(list[1], null, list[3], null, list[4]))
continue;
if(!Random9NumberListSort(list[1], list[4], list[6], null, list[7]))
continue;
if(!Random9NumberListSort(null, null, list[0], list[1], list[2]))
continue;
if(!Random9NumberListSort(list[2], null, list[3], list[4], list[5]))
continue;
if(!Random9NumberListSort(list[2], list[5], list[6], list[7], list[8]))
continue;
break;
}
return list;
}
//隣接する配列と番号が重複しないようlist_sortを並べ替え成否を返す.
function Random9NumberListSort(list1, list2, list3, list4, list_sort)
{
var list_sorted = new Array();
var iBeforeCount;var iIndex_check;var iIndex_check2;
var iRemenberCount = 0;
while((iBeforeCount = list_sorted.length) < 9)
{
iIndex_check = list_sorted.length % 3;
iIndex_check2 = (list_sorted.length - iIndex_check) / 3;
for(var i=0; i<list_sort.length; i++)
{
if(list1 != null &&
(list_sort[i] == list1[iIndex_check] ||
list_sort[i] == list1[iIndex_check + 3] ||
list_sort[i] == list1[iIndex_check + 6]))
continue;
if(list2 != null &&
(list_sort[i] == list2[iIndex_check] ||
list_sort[i] == list2[iIndex_check + 3] ||
list_sort[i] == list2[iIndex_check + 6]))
continue;
if(list3 != null &&
(list_sort[i] == list3[iIndex_check2*3] ||
list_sort[i] == list3[iIndex_check2*3+1] ||
list_sort[i] == list3[iIndex_check2*3+2]))
continue;
if(list4 != null &&
(list_sort[i] == list4[iIndex_check2*3] ||
list_sort[i] == list4[iIndex_check2*3+1] ||
list_sort[i] == list4[iIndex_check2*3+2]))
continue;
list_sorted.push(list_sort[i]);
list_sort.splice(i, 1);
break;
}
if(iBeforeCount == list_sorted.length)
{
if(iRemenberCount > 50)
return false;
iRemenberCount++;
list_sorted.length = 0;
list_sort.length = 0;
var list_remenber = createRandom9NumberList();
for(var i=0; i<list_remenber.length; i++)
list_sort.push(list_remenber[i]);
}
}
for(var i=0; i<list_sorted.length; i++)
list_sort.push(list_sorted[i]);
return true;
}