Merge branch 'prng-seed' into 'master'

Prng seed

See merge request panki/bingo!2
This commit is contained in:
Felix Pankratz 2022-11-30 18:58:52 +00:00
commit d3b5e97286
2 changed files with 54 additions and 3 deletions

View File

@ -43,7 +43,7 @@ let fields = [
'Aus Plastik Müll wird was gebaut', 'Aus Plastik Müll wird was gebaut',
'Es wird geschrien', 'Es wird geschrien',
'es wird gesungen', 'es wird gesungen',
'„ mir ist kalt“', '„mir ist kalt“',
'Dinge bekommen Namen', 'Dinge bekommen Namen',
'„das ist auf einem anderen Level"', '„das ist auf einem anderen Level"',
'kleine Krebse', 'kleine Krebse',
@ -52,14 +52,19 @@ let fields = [
const FREE_FIELD_TEXT = "Freies Parken" const FREE_FIELD_TEXT = "Freies Parken"
const seed = Date.now().toString();
var prng_hash_seed = cyrb128(seed);
let rand = sfc32(prng_hash_seed[0], prng_hash_seed[1], prng_hash_seed[2], prng_hash_seed[3]);
let shuffled = fields let shuffled = fields
.map(value => ({ value, sort: Math.random() })) .map(value => ({ value, sort: rand() }))
.sort((a, b) => a.sort - b.sort) .sort((a, b) => a.sort - b.sort)
.map(({ value }) => value) .map(({ value }) => value)
shuffled.splice(12, 0, FREE_FIELD_TEXT); shuffled.splice(12, 0, FREE_FIELD_TEXT);
function generateTable() { function generateTable() {
let table = document.querySelector("table"); let table = document.querySelector("table");
let thead = table.createTHead(); let thead = table.createTHead();
let row = null;//thead.insertRow(); let row = null;//thead.insertRow();
@ -94,7 +99,52 @@ function generateTable() {
}); });
} }
// hash function, thx stackoverflow :3
function cyrb128(str) {
let h1 = 1779033703, h2 = 3144134277,
h3 = 1013904242, h4 = 2773480762;
for (let i = 0, k; i < str.length; i++) {
k = str.charCodeAt(i);
h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
}
h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);
h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);
h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);
h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);
return [(h1^h2^h3^h4)>>>0, (h2^h1)>>>0, (h3^h1)>>>0, (h4^h1)>>>0];
}
function sfc32(a, b, c, d) {
return function() {
a >>>= 0; b >>>= 0; c >>>= 0; d >>>= 0;
var t = (a + b) | 0;
a = b ^ b >>> 9;
b = c + (c << 3) | 0;
c = (c << 21 | c >>> 11);
d = d + 1 | 0;
t = t + d | 0;
c = c + t | 0;
return (t >>> 0) / 4294967296;
}
}
function mulberry32(a) {
return function() {
var t = a += 0x6D2B79F5;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
}
}
generateTable(); generateTable();
const center_field = document.querySelector('#center-field'); const center_field = document.querySelector('#center-field');
center_field.innerHTML = '<img src="img/7-vs-wild-logo.svg" alt="7 vs. Wild Logo"></img>' center_field.innerHTML = '<img src="img/7-vs-wild-logo.svg" alt="7 vs. Wild Logo"></img>'
let seed_elem = document.createElement('p');
seed_elem.innerText = seed;
document.body.appendChild(seed_elem);

View File

@ -18,7 +18,8 @@ img {
width: 100%; width: 100%;
} }
h1 { h1, p {
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
text-align: center; text-align: center;
margin: 5px;
} }