Показать сообщение отдельно
  #40 (permalink)  
Старый 21.11.2022, 10:55
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

Тапочек, скрипт для вас. Полагаю, что такая псевдослучайность для вашей задачи приемлема.
function getDayOfYear() {
  var now = new Date();
  var start = new Date(now.getFullYear(), 0, 0);
  var diff = (now - start) + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);
  var oneDay = 1000 * 60 * 60 * 24;
  return Math.floor(diff / oneDay);
}
function random(day) {
  var r0 = day * 33 + 85017801 + (new Date()).getFullYear();
  var left = ((parseInt('01111111110000000000000000000000', 2) & r0) >>> 23);
  var r1 = (r0 << 9 >>> 1) | left;
  var right = ((parseInt('111111111', 2)) & r0) << 24 >>> 1;
  var r2 = (r0 >>> 8) | right;
  r0 = r1 + r2;
  return 1 + ((Math.floor(r0 / 99) + day) % 56);
}

var pic = random(getDayOfYear());
document.write('<a href="'+pic+'.htm"><img src="'+pic+'.jpg"></a>');


Проверка работоспособности (результат в консоли):
<body>
<div>Номер года:
<input id="checkyear" type="number" value="2022"></div>
<div>День года (число от 1 до 366):
<input id="checkday" type="number">
<button onclick="testday();">Проверить дату</button></div>
<button onclick="testyear();">Вся статистка за год</button>
(результат в консоли браузера)

<script>
var inp = document.getElementById("checkday");
inp.value = getDayOfYear();
function testday(){
  console.log("Проверка " + inp.value + ":", random(+inp.value));
}
function testyear(){
  var o = {};
  for( var i=1; i<=56; i++ ) o[i] = NaN;
  for( var i=1; i<=366; i++){
    var pic = random(i);
    o[pic] = o[pic] ? o[pic] + 1 : 1;
    console.log("День "+i+": картинка "+pic);
  }
  console.log( "Сколько раз в "+document.getElementById("checkyear").value+" году каждая картинка будет появляться:", o );
}

function getDayOfYear() {
  var now = new Date();
  var start = new Date(now.getFullYear(), 0, 0);
  var diff = (now - start) + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);
  var oneDay = 1000 * 60 * 60 * 24;
  return Math.floor(diff / oneDay);
}
console.log('Day of year: ' + getDayOfYear());

function random(day) {
  var year = +document.getElementById("checkyear").value;
  var r0 = day * 33 + 85017801 + year;
  var left = ((parseInt('01111111110000000000000000000000', 2) & r0) >>> 23);
  var r1 = (r0 << 9 >>> 1) | left;
  var right = ((parseInt('111111111', 2)) & r0) << 24 >>> 1;
  var r2 = (r0 >>> 8) | right;
  r0 = r1 + r2;
  return 1 + ((Math.floor(r0 / 99) + day) % 56);
}
</script>
</body>

Последний раз редактировалось Белый шум, 21.11.2022 в 14:51.
Ответить с цитированием