From 993c994e21d934390c6a7c644eff8ef73f7100d9 Mon Sep 17 00:00:00 2001 From: lifeadventurer Date: Mon, 6 Nov 2023 21:36:00 +0800 Subject: [PATCH] update hash function --- fortune_generator/fortune.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/fortune_generator/fortune.js b/fortune_generator/fortune.js index 73a8c51..808bb1d 100644 --- a/fortune_generator/fortune.js +++ b/fortune_generator/fortune.js @@ -33,26 +33,30 @@ function Appear() { } let d = new Date(); - let date = d.getDate() + 4; - let seed = (num[0] >> 3) * (num[1] >> 2) + (num[2] << 1) * (num[3] >> 3) + (date << 3) * ((d.getMonth() + 1) << 5) + d.getFullYear(); + let date = d.getDate(); + let month = d.getMonth() + 1; + let year = d.getFullYear(); + let hashDate = Math.round(Math.log10(year * ((month << 3) ^ (date << 1)))); + let seed1 = (num[0] >> hashDate) * (num[1] >> Math.min(hashDate, 2)) + (num[2] << 1) * (num[3] >> 3) + (date << 3) * (month << hashDate) + year; + let seed2 = (num[0] << (hashDate + 2)) * (num[1] << hashDate) + (num[2] << 1) * (num[3] << 3) + (date << (hashDate - 1)) * (month << 4) + year >> hashDate; const goodLen = goodFortunes.length; const badLen = badFortunes.length; - let status = `§ ${fortuneStatus[seed % 7]} §`; + let status = `§ ${fortuneStatus[seed1 % 7]} §`; $('#ip-to-fortune').html(status); let l_1_event, l_1_desc, l_2_event, l_2_desc, r_1_event, r_1_desc, r_2_event, r_2_desc; let l1, l2, r1, r2; let set = new Set(); - l1 = seed % goodLen; + l1 = seed1 % goodLen; set.add(goodFortunes[l1].event); - l2 = ((seed << 1) + date) % goodLen; + l2 = ((seed1 << 1) + date) % goodLen; while(set.has(goodFortunes[l2].event)) l2 = (l2 + 1) % goodLen; set.add(goodFortunes[l2].event); - r1 = ((seed >> 1) + (d.getMonth() << 3)) % badLen; + r1 = ((seed1 >> 1) + (d.getMonth() << 3)) % badLen; while(set.has(badFortunes[r1].event)) r1 = (r1 + 2) % badLen; set.add(badFortunes[r1].event); - r2 = ((seed << 3 ) + (d.getFullYear() >> 5) * (date << 2)) % badLen; + r2 = (((((seed1 << 3 ) + (d.getFullYear() >> 5) * (date << 2)) % badLen) * seed2) >> 6) % badLen; while(set.has(badFortunes[r2].event)) r2 = (r2 + 1) % badLen; l_1_event = `宜: ${goodFortunes[l1].event}`; l_1_desc = `${goodFortunes[l1].description}`; @@ -62,14 +66,14 @@ function Appear() { r_1_desc = `${badFortunes[r1].description}`; r_2_event = `忌: ${badFortunes[r2].event}`; r_2_desc = `${badFortunes[r2].description}`; - if(seed % 7 == 0){ + if(seed1 % 7 == 0){ $('#r-1-event').html(allGood); $('#l-1-event').html(l_1_event); $('#l-1-desc').html(l_1_desc); $('#l-2-event').html(l_2_event); $('#l-2-desc').html(l_2_desc); } - else if(seed % 7 == 6){ + else if(seed1 % 7 == 6){ $('#l-1-event').html(allBad); $('#r-1-event').html(r_1_event); $('#r-1-desc').html(r_1_desc);