19日に更新してた

アフィリエイトはないよ

易占を javascript で組んでみた

以前、python で書いた易占を javascript で書き直してみました。

かなり適当 & 力技になっている感じですが、javascript でまともにプログラム組むのが初めてなのでこんなもんかなという感じです。

ke_list4 はソートしましたので、table 周りをネストしたかったのですが、取りあえず動くのでいいかなと。

jupyter-notebookを立ち上げなくて良くなったので楽になりました。*1

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>易占</title>
</head>

<body>
<center>
    <h1>コイン3枚法で占う易占</h1>
<p>
    <input type="button" value="占う" onclick='main()'>
    <input type="button" value="reload" onclick='window.location.reload()'>
</p>

    <div id="edit_area"></div>
    
</center>
<script>

function array_equal(a, b) {
  if (!Array.isArray(a))    return false;
  if (!Array.isArray(b))    return false;
  if (a.length != b.length) return false;
  for (var i = 0, n = a.length; i < n; ++i) {
    if (a[i] !== b[i]) return false;
  }
  return true;
}

function sum(arr) {
    let sum = 0;
    arr.forEach(function(elm) {
        sum += elm;
    });
    return sum;
};

function hatike_decision(arr){
let ue
let sita
let hatike=[[1, 1, 1],
         [1, 1, 0],
         [1, 0, 1],
         [1, 0, 0],
         [0, 1, 1],
         [0, 1, 0],
         [0, 0, 1],
         [0, 0, 0]];
for (let i=0;i<hatike.length;i++){
    if (array_equal(hatike[i],arr.slice(0,3))){sita=i}
    if (array_equal(hatike[i],arr.slice(3,6))){ue=i}
}
return [ue,sita]
}

function main(){
let list=[];

for (let j=0;j<6;j++){
    let list_i=[];
for  (let i = 0; i < 3; i++) {
let random = Math.floor( Math.random() * 2);
list_i.push(random);
}
    list.push(list_i);
}

let kou=[];
let honka=[];
for (let i=0;i<list.length;i++){
if(sum(list[i])==3){
    kou.push(i);
    honka.push(1);
}else if (sum(list[i])==0){
    kou.push(i);
    honka.push(0);
}else if (sum(list[i])==1){
    honka.push(0);
}else if (sum(list[i])==2){
    honka.push(1);
}
    
}

let sika=[];
if(kou.length>0){
    for(let i=0;i<list.length;i++){
        if (kou.includes(i)){
            sika.push(Math.abs(honka[i]-1))
        }else{
            sika.push(honka[i])
        }
    }
}

let goka = honka.slice(1,4).concat(honka.slice(2,5));

let hinka = [];
for (let i=honka.length-1;i>=0;i--){
    hinka.push(honka[i]);
}

let rika=[];
for (let i=0;i<honka.length;i++){
    rika.push(Math.abs(honka[i]-1))
}

let str=""

document.getElementById('edit_area').innerHTML = str ;

let ke_list = [['01', '43', '14', '34', '09', '05', '26', '11'],
          ['10', '58', '38', '54', '61', '60', '41', '19'],
          ['13', '49', '30', '55', '37', '63', '22', '36'],
          ['25', '17', '21', '51', '42', '03', '27', '24'],
          ['44', '28', '50', '32', '57', '48', '18', '46'],
          ['06', '47', '64', '40', '59', '29', '04', '07'],
          ['33', '31', '56', '62', '53', '39', '52', '15'],
          ['12', '45', '35', '16', '20', '08', '23', '02']];
let ke_list2 = [['乾為天', '沢天夬', '火天大有', '雷天大壮', '風天小畜', '水天需', '山天大畜', '地天泰'],
          ['天沢履', '兌為沢', '火沢睽', '雷沢帰妹', '風沢中孚', '水沢節', '山沢損', '地沢臨'],
          ['天火同人', '沢火革', '離為火', '雷火豊', '風火家人', '水火既済', '山火賁', '地火明夷'],
          ['天雷无妄', '沢雷随', '火雷噬嗑', '震為雷', '風雷益', '水雷屯', '山雷頤', '地雷復'],
          ['天風姤', '沢風大過', '火風鼎', '雷風恒', '巽為風', '水風井', '山風蠱', '地風升'],
          ['天水訟', '沢水困', '火水未済', '雷水解', '風水渙', '坎為水', '山水蒙', '地水師'],
          ['天山遯', '沢山咸', '火山旅', '雷山小過', '風山漸', '水山蹇', '艮為山', '地山謙'],
          ['天地否', '沢地萃', '火地晋', '雷地豫', '風地観', '水地比', '山地剥', '坤為地']];
let ke_list3 = ['keniten',
 'koniti',
 'suiraityun',
 'sansuimou',
 'suitenzyu',
 'tensuisyou',
 'tisuisi',
 'suitihi',
 'fuutensyoutiku',
 'tentakuri',
 'titentai',
 'tentihi',
 'tenkadouzin',
 'katentaiyuu',
 'tizanken',
 'raitiyo',
 'takuraizui',
 'sanpuuko',
 'titakurin',
 'fuutikan',
 'karaizeigou',
 'sankahi',
 'santihaku',
 'tiraifuku',
 'tenraimumou',
 'santentaitiku',
 'sanraii',
 'takufuutaika',
 'kanisui',
 'riika',
 'takuzankan',
 'raifuukou',
 'tenzanton',
 'raitentaisou',
 'katisin',
 'tikameii',
 'fuukakazin',
 'katakukei',
 'suizanken',
 'raisuikai',
 'santakuson',
 'fuuraieki',
 'takutenkai',
 'tenpuukou',
 'takutisui',
 'tifuusyou',
 'takusuikon',
 'suifuusei',
 'takkakaku',
 'kafuutei',
 'sinirai',
 'gonisan',
 'fuuzanzen',
 'raitakukimai',
 'raikahou',
 'kazanryo',
 'sonifuu',
 'daitaku',
 'fuusuikan',
 'suitakusetu',
 'fuutakutyuufu',
 'raizansyouka',
 'suikakisei',
 'kasuibisei'];
let ke_list4 = ['1_ken',
 '2_kon',
 '3_chun',
 '4_mou',
 '5_ju',
 '6_shou',
 '7_shi',
 '8_hi',
 '9_shouchiku',
 '10_ri',
 '11_tai',
 '12_hi',
 '13_doujin',
 '14_taiyu',
 '15_ken',
 '16_yo',
 '17_zui',
 '18_ko',
 '19_rin',
 '20_kan',
 '21_zeigou',
 '22_hi',
 '23_haku',
 '24_fuku',
 '25_mubo',
 '26_taichiku',
 '27_i',
 '28_taika',
 '29_kan',
 '30_ri',
 '31_kan',
 '32_kou',
 '33_ton',
 '34_taiso',
 '35_shin',
 '36_meii',
 '37_kajin',
 '38_kei',
 '39_ken',
 '40_kai',
 '41_son',
 '42_eki',
 '43_kai',
 '44_kou',
 '45_sui',
 '46_shou',
 '47_kon',
 '48_sei',
 '49_kaku',
 '50_tei',
 '51_shin',
 '52_gon',
 '53_zen',
 '54_kimai',
 '55_hou',
 '56_ryo',
 '57_son',
 '58_da',
 '59_kan',
 '60_setsu',
 '61_chufu',
 '62_shoka',
 '63_kisei',
 '64_bisei'];
let kou_dic=["初","二","三","四","五","上"];

let kou_text=""
if (kou.length>0){
for (let i=0;i<kou.length;i++){
    kou_text=kou_text+" "+kou_dic[kou[i]]
}
kou_text=kou_text+ " 爻変"
}else{kou_text="爻変 無 "}

let table = document.createElement('table');
let thead = document.createElement('thead');
let tbody = document.createElement('tbody');

table.appendChild(thead);
table.appendChild(tbody);

document.getElementById('edit_area').appendChild(table);

let row_1 = document.createElement('tr');
let heading_1 = document.createElement('th');
heading_1.innerHTML = kou_text ;
let heading_2 = document.createElement('th');
heading_2.innerHTML = "易占探究";
let heading_3 = document.createElement('th');
heading_3.innerHTML = "四大都好";
let heading_4 = document.createElement('th');
heading_4.innerHTML = "易経ネット";
let heading_5 = document.createElement('th');
heading_5.innerHTML = "易経独学";

row_1.appendChild(heading_1);
row_1.appendChild(heading_2);
row_1.appendChild(heading_3);
row_1.appendChild(heading_4);
row_1.appendChild(heading_5);
thead.appendChild(row_1);

let h_ue=hatike_decision(honka)[0]
let h_sita=hatike_decision(honka)[1]


let row_2 = document.createElement('tr');
let row_2_data_1 = document.createElement('td');
row_2_data_1.innerHTML = "本卦";
let row_2_data_2 = document.createElement('td');
row_2_data_2.innerHTML = '<a href="https://tankyuu.net/eki/iching'+parseInt(ke_list[h_sita][h_ue])+'.html"target="_blank">'+ke_list2[h_sita][h_ue]+'</a>';
let row_2_data_3 = document.createElement('td');
row_2_data_3.innerHTML = '<a href="https://1percent-better.com/oriental_wisdom/iching/hexagram/'+ke_list4[ke_list[h_sita][h_ue]-1]+'/"target="_blank">'+ke_list2[h_sita][h_ue]+'</a>';
let row_2_data_4 = document.createElement('td');
row_2_data_4.innerHTML = '<a href="https://ekikyo.net/64ka/'+ke_list[h_sita][h_ue]+'.html"target="_blank">'+ke_list2[h_sita][h_ue]+'</a>';
let row_2_data_5 = document.createElement('td');
if (kou.length==1){
row_2_data_5.innerHTML = '<a href="https://ekikyou-dokugaku.com/'+ke_list3[parseInt(ke_list[h_sita][h_ue])-1]+(kou[0]+1)+'.html"target="_blank">'+ke_list2[h_sita][h_ue]+kou_text+'</a>' 
}else{
row_2_data_5.innerHTML = '<a href="https://ekikyou-dokugaku.com/'+ke_list3[parseInt(ke_list[h_sita][h_ue])-1]+'.html"target="_blank">'+ke_list2[h_sita][h_ue]+'</a>';
}

row_2.appendChild(row_2_data_1);
row_2.appendChild(row_2_data_2);
row_2.appendChild(row_2_data_3);
row_2.appendChild(row_2_data_4);
row_2.appendChild(row_2_data_5);
tbody.appendChild(row_2);

let s_ue=hatike_decision(sika)[0]
let s_sita=hatike_decision(sika)[1]

let row_3 = document.createElement('tr');

let row_3_data_1 = document.createElement('td');
row_3_data_1.innerHTML = "之卦";

let row_3_data_2 = document.createElement('td');
let row_3_data_3 = document.createElement('td');
let row_3_data_4 = document.createElement('td');
let row_3_data_5 = document.createElement('td');
if (kou.length>0){
row_3_data_2.innerHTML = '<a href="https://tankyuu.net/eki/iching'+parseInt(ke_list[s_sita][s_ue])+'.html"target="_blank">'+ke_list2[s_sita][s_ue]+'</a>';
row_3_data_3.innerHTML = '<a href="https://1percent-better.com/oriental_wisdom/iching/hexagram/'+ke_list4[ke_list[s_sita][s_ue]-1]+'/"target="_blank">'+ke_list2[s_sita][s_ue]+'</a>';
row_3_data_4.innerHTML = '<a href="https://ekikyo.net/64ka/'+ke_list[s_sita][s_ue]+'.html"target="_blank">'+ke_list2[s_sita][s_ue]+'</a>';
row_3_data_5.innerHTML = '<a href="https://ekikyou-dokugaku.com/'+ke_list3[parseInt(ke_list[s_sita][s_ue])-1]+'.html"target="_blank">'+ke_list2[s_sita][s_ue]+'</a>';
}else{
row_3_data_2.innerHTML = "";
row_3_data_3.innerHTML = "";
row_3_data_4.innerHTML = "";
row_3_data_5.innerHTML = "";
}

row_3.appendChild(row_3_data_1);
row_3.appendChild(row_3_data_2);
row_3.appendChild(row_3_data_3);
row_3.appendChild(row_3_data_4);
row_3.appendChild(row_3_data_5);
tbody.appendChild(row_3);

let g_ue=hatike_decision(goka)[0]
let g_sita=hatike_decision(goka)[1]

let row_4 = document.createElement('tr');
let row_4_data_1 = document.createElement('td');
row_4_data_1.innerHTML = "互卦";
let row_4_data_2 = document.createElement('td');
row_4_data_2.innerHTML = '<a href="https://tankyuu.net/eki/iching'+parseInt(ke_list[g_sita][g_ue])+'.html"target="_blank">'+ke_list2[g_sita][g_ue]+'</a>';
let row_4_data_3 = document.createElement('td');
row_4_data_3.innerHTML = '<a href="https://1percent-better.com/oriental_wisdom/iching/hexagram/'+ke_list4[ke_list[g_sita][g_ue]-1]+'/"target="_blank">'+ke_list2[g_sita][g_ue]+'</a>';
let row_4_data_4 = document.createElement('td');
row_4_data_4.innerHTML = '<a href="https://ekikyo.net/64ka/'+ke_list[g_sita][g_ue]+'.html"target="_blank">'+ke_list2[g_sita][g_ue]+'</a>';
let row_4_data_5 = document.createElement('td');
row_4_data_5.innerHTML = '<a href="https://ekikyou-dokugaku.com/'+ke_list3[parseInt(ke_list[g_sita][g_ue])-1]+'.html"target="_blank">'+ke_list2[g_sita][g_ue]+'</a>';

row_4.appendChild(row_4_data_1);
row_4.appendChild(row_4_data_2);
row_4.appendChild(row_4_data_3);
row_4.appendChild(row_4_data_4);
row_4.appendChild(row_4_data_5);
tbody.appendChild(row_4);

let hi_ue=hatike_decision(hinka)[0]
let hi_sita=hatike_decision(hinka)[1]

let row_5 = document.createElement('tr');
let row_5_data_1 = document.createElement('td');
row_5_data_1.innerHTML = "賓卦";
let row_5_data_2 = document.createElement('td');
row_5_data_2.innerHTML = '<a href="https://tankyuu.net/eki/iching'+parseInt(ke_list[hi_sita][hi_ue])+'.html"target="_blank">'+ke_list2[hi_sita][hi_ue]+'</a>';
let row_5_data_3 = document.createElement('td');
row_5_data_3.innerHTML = '<a href="https://1percent-better.com/oriental_wisdom/iching/hexagram/'+ke_list4[ke_list[hi_sita][hi_ue]-1]+'/"target="_blank">'+ke_list2[hi_sita][hi_ue]+'</a>';
let row_5_data_4 = document.createElement('td');
row_5_data_4.innerHTML = '<a href="https://ekikyo.net/64ka/'+ke_list[hi_sita][hi_ue]+'.html"target="_blank">'+ke_list2[hi_sita][hi_ue]+'</a>';
let row_5_data_5 = document.createElement('td');
row_5_data_5.innerHTML = '<a href="https://ekikyou-dokugaku.com/'+ke_list3[parseInt(ke_list[hi_sita][hi_ue])-1]+'.html"target="_blank">'+ke_list2[hi_sita][hi_ue]+'</a>';

row_5.appendChild(row_5_data_1);
row_5.appendChild(row_5_data_2);
row_5.appendChild(row_5_data_3);
row_5.appendChild(row_5_data_4);
row_5.appendChild(row_5_data_5);
tbody.appendChild(row_5);


let r_ue=hatike_decision(rika)[0]
let r_sita=hatike_decision(rika)[1]

let row_6 = document.createElement('tr');
let row_6_data_1 = document.createElement('td');
row_6_data_1.innerHTML = "裏卦";
let row_6_data_2 = document.createElement('td');
row_6_data_2.innerHTML = '<a href="https://tankyuu.net/eki/iching'+parseInt(ke_list[r_sita][r_ue])+'.html"target="_blank">'+ke_list2[r_sita][r_ue]+'</a>';
let row_6_data_3 = document.createElement('td');
row_6_data_3.innerHTML = '<a href="https://1percent-better.com/oriental_wisdom/iching/hexagram/'+ke_list4[ke_list[r_sita][r_ue]-1]+'/"target="_blank">'+ke_list2[r_sita][r_ue]+'</a>';
let row_6_data_4 = document.createElement('td');
row_6_data_4.innerHTML = '<a href="https://ekikyo.net/64ka/'+ke_list[r_sita][r_ue]+'.html"target="_blank">'+ke_list2[r_sita][r_ue]+'</a>';
let row_6_data_5 = document.createElement('td');
row_6_data_5.innerHTML = '<a href="https://ekikyou-dokugaku.com/'+ke_list3[parseInt(ke_list[r_sita][r_ue])-1]+'.html"target="_blank">'+ke_list2[r_sita][r_ue]+'</a>';

row_6.appendChild(row_6_data_1);
row_6.appendChild(row_6_data_2);
row_6.appendChild(row_6_data_3);
row_6.appendChild(row_6_data_4);
row_6.appendChild(row_6_data_5);
tbody.appendChild(row_6);

// main
}
</script>

</body>
</html>

*1:こういうのは本来どこかで動くように公開するべきなのだろうけれど、スマホ対応とか面倒だからローカル使用