【问题标题】:Experimenting with Random Number Generation试验随机数生成
【发布时间】:2017-01-06 22:31:43
【问题描述】:

我在这里遇到的问题是:“如何将 DTG 中的值分隔为日、月、年等 9 作为整数)然后分隔这些数字的数字以进行计算?”

这个问题现在已经回答了。谢谢。

我正在寻找有关如何使用以下条件生成计算的信息:

  1. 该模块必须使用 HTML 和 JavaScript 运行,
  2. 模块必须以整数形式获取当前日期和时间,
  3. 计算完成后,模块需要对生成的数字进行计算,得到一个1位或2位的整数,
  4. 且日期和时间必须具备以下条件;
    • 日期必须分成单独的年、月、日数字
    • 并且时间必须分为小时、分钟、秒和毫秒的单独数字

每个号码的长度为 2 位或 4 位。例如:

该模块将用 HTML 和 JavaScript 编写。

我调用日期和时间来获取 int day 作为 dd,int month 作为 mm,int year 作为 yyyy,int hour 作为 hh,int minute 作为 mm,int second 作为 ss,int ms 作为 ssss。

展示

日期为00,月为00,年为0000,小时为00,分钟为00,秒为00,毫秒为0000

然后我需要模块使用这些数字执行计算:

数字 1 来自日期的第一位 + 日期的第二位,数字 2 来自月份的第一位 + 月份的第二位,等等。

本模块的目的是将日期和时间中的每个数字相加,得到一个 1 位或 2 位数字。如果结果 = 100,我需要进一步减少它。

这个概念是取一系列数字并将它们减少到一个数字的命理方法,但我可以处理这个实验的两个数字。

实验:

我正在测试一种随机数生成方法,方法是使用精确到毫秒的当前日期和时间,每毫秒生成一个当前的 1 或 2 位数字。出于测试目的,我们可以使用秒来查看每 1 秒返回一次较慢的结果。

实验的目的是得到一个随机数,绕过传统的 RNG 方法,该方法创建的数字不是很随机。每次运行模块时,传统方法都会重复相同的数字。

该方法会每隔1毫秒根据当前DTG创建一个新的随机数,每次模块运行时都会产生一个新的随机数,并且没有pass可以创建相同的随机数,除非DTG来完全一样的计算(这比大多数软件中内置的 RNG 系统更随机,尽管数字是有条不紊地创建的,而不是随机创建的)。

对这个项目的意图:

我想利用 RNG 系统创建一个 1 或 2 位数字,可以在 0-9 或 00-99 的滑动范围内使用,我的想法是使用此 RNG 引擎生成随机数在其他组件中使用 RNG 的游戏每 1 毫秒编号一次。

例如:

RNG 引擎每 1 毫秒生成一个数字 0-9 或 00-99。该数字现在可用于确定命中或未命中、关键命中的机会、基于机会的机制中成功行动的机会等。

过去,构建一个像当前游戏引擎所使用的复杂系统对我来说已经证明是非常复杂和有问题的,所以我现在想避免这些。这个系统,据我所知,没用过或者以前没用过。如果有,那太好了,这应该更容易。如果不是这样,系统可以快速创建随机数,并且这种方法无法被人们使用定时尝试在特定时间点击按钮准确欺骗(就像在许多游戏中所做的那样)。这种方法对于任何此类物理尝试来说都太快了,并且需要一台计算机来执行此操作并且知道系统正在使用。

就像我说的,这是一个实验。可能有更好的 RNG 工具这一事实是无关紧要的。我可以在以后根据需要处理这些。现在,我想制作这个模块,因为我只是为了测试目的而展示的。我需要先在 HTML 中运行它,然后我需要在 JavaScript 中运行它。一旦我测试了多次迭代,我就可以在 PHP 上工作了。

所以,我应该看到的是这样的:(这里开始伪伪代码)

<code>
    //NOTE: "~" and "..." represents repetitive iteration over the array, i.e. - I skip stuff.

    //var set
    int number_1(day);
    ~
    ~
    int number_7(millisecond);

    //Gets the DTG and returns the values.
    get DTG();

    //Gets the values from DTG and makes them individual integer values.
    set Perform(){
        number_1 = DTG(dd);
        number_2 = DTG(mm);
        ~
        ~
        number_7 = DTG(ssss);
    }

    //Conducts a calculation on those values.
    calc1(){
        number_1 = number_1(digit1) + number_1(digit2);
        number_2 = number_2(digit1) + number_2(digit2);
        ~
        ~
        number_7 = number_7(digit1) + number_7(digit2) + number_7(digit3) + number_7(digit4);
    }

    //Calculates the returned values [number_1-number_7].
    calc2(){
        int someNum = number_1 + number_2 + ... + number_7;
        if(someNum >= 100; reduce to a num < 100){
            code
        }
        return someNum(where someNum must be a number between 0-9 or 00-99);
    }

    //I use the calcs to get the numbers I need.
    int iNeedTheseNumbers perform calc1(get [number_1, ... , number_7]);
    int theseNumbersToOneNum perform calc2(get someNum);

    if(theseNumbersToOneNumber >= 100; reduce to num < 100){
        code;
    }

    //Return the 1 or 2 digit number.
    return theseNumbersToOneNumber;
</code>

是的,我知道这个伪伪代码不是很好,我已经好几年没有做这些东西了。对此我深表歉意,尤其是当它引起混乱时。我尝试使用我在学生时代记得的术语和方法,以一种易于理解的方式来实现它。

我相信您会有问题,请随时提问。

再次,我正在尝试分别使用 HTML 和 JavaScript 制作一个 RNG 引擎,通过对当前 DTG 的值执行加法到毫秒(DTG 中使用的数字)来生成 1 或 2 位数字被缩减为 1 位或 2 位数字。

有关命理参考的说明,请参阅https://en.wikipedia.org/wiki/Numerology 并向下滚动到拉丁字母系统条目。

【问题讨论】:

  • 我有一个问题:你的问题是什么?
  • 你是在找人给你写这个吗?
  • 每次运行模块时,传统方法都会重复相同的数字。 你们中没有人更改 RNG 的种子。一种常见的方法是使用当前时间作为种子。
  • “我只需要知道如何将日期和时间转换为单个数字以及如何将数字的第一位添加到第二位。我可以解决剩下的问题。” - 所以你可以edit你的问题来删除你95%的巨大文字墙,然后专门询问这个问题。
  • @Kenneth - 您可以通过选择答案作为答案(答案顶部附近的复选标记)来关闭问题。

标签: javascript html random


【解决方案1】:

把日期分成几块

var now = new Date();
var d = now.getDate();
var m = now.getMonth();
var y = now.getFullYear();
var h = now.getHours();
var mm = now.getMinutes();
var s = now.getSeconds();
var ms = now.getMilliseconds();

要将数字拆分为数字,您可以执行以下操作

var digits = new Array();
var sNumber = number.toString();

for (var i = 0, len = sNumber.length; i < len; i += 1) {
    digits.push(sNumber.charAt(i));
}

【讨论】:

    【解决方案2】:

    你描述的不是RNG,它是时间的哈希函数。

    RNG 就像 Crypto:除非您拥有数学学位和/或详细研究过这个问题,否则永远不要“自己动手”。即使是实施不佳的 RNG 或 Crypto 算法也可能比您自己想出的任何东西都要好。当然,请仔细遵循算法的说明:例如,选择适合您使用的算法(对于 Crypto 来说是安全的,对于模拟来说是更快的长期算法),并正确地播种它(例如从 time-but仅一次,否则您将回到哈希函数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 2011-10-24
      • 1970-01-01
      相关资源
      最近更新 更多