尝试随机数生成

时间:2017-01-06 22:31:43

标签: javascript html random

我在这里的问题是:&#34;如何将DTG中的值分为日,月,年等9个整数)然后将这些数字的数字分开进行计算?&#34; < / p>

现在回答这个问题了。感谢。

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

  1. 必须使用HTML和JavaScript运行该模块,
  2. 模块必须以整数形式获取当前日期和时间,
  3. 模块需要计算生成的数字,以便在计算完成后得到1或2位整数,
  4. 且日期和时间必须符合以下条件;
    • 日期必须分为年,月和日的单独数字
    • 并且时间必须分为小时,分钟,秒和毫秒
    • 的单独数字
  5. 每个数字长度为2位数或4位数。例如:

    该模块将用HTML和JavaScript编写。

    我要求日期和时间以int为dd,int month为mm,int year为yyyy,int hour为hh,int minute为mm,int second为ss,int millisecond为ssss。

    显示

    日为00,月为0000,小时为00,分为00,秒为00,毫秒为0000

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

    从第一位数字到第二位数字的数字1,从月份的第一位数字到月份的第二位数字的数字2等等。

    此模块的目的是在日期和时间中添加每个数字以获得1或2位数字。如果结果&lt; = 2位数,我可以使用2位数字。如果结果&gt; = 100,我需要进一步减少它。

    这个概念是采用一系列数字并将它们减少到1位数的数字命理方法,但我可以处理2个数字用于此实验。

    实验:

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

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

    此方法将每1毫秒基于当前DTG创建一个新的随机数,每次模块运行时生成一个新的随机数,除非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的值添加到毫秒来生成1或2位数字,其中DTG中使用的数字缩小为1位或2位数。

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

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:0)

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

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