Help with random code...

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Virus

    Help with random code...

    Ok well what I am trying to do is have

    1.) the background color to change randomly with 5 different colors.(change
    on page load)

    2,) 10 different quotes randomly fadeing in and out in random spots on the
    webpage. with a delay timer on them, so they keep changing as the page is
    open. Not random each time the page is loaded.

    If anyone can help it would be greatly appreaciated, I have tried many of
    things and just cant seem to get what I am looking for.

    It seems so simple yet so complex...

    take the 00's out of email addy to send


  • Brian Genisio

    #2
    Re: Help with random code...

    Virus wrote:
    [color=blue]
    > Ok well what I am trying to do is have
    >
    > 1.) the background color to change randomly with 5 different colors.(change
    > on page load)
    >
    > 2,) 10 different quotes randomly fadeing in and out in random spots on the
    > webpage. with a delay timer on them, so they keep changing as the page is
    > open. Not random each time the page is loaded.
    >
    > If anyone can help it would be greatly appreaciated, I have tried many of
    > things and just cant seem to get what I am looking for.
    >
    > It seems so simple yet so complex...
    >
    > take the 00's out of email addy to send
    >
    >[/color]


    Put your values in an array...
    var quotes_array = new Array();

    You can populate the array...
    quotes_array[0] = "This is a quote";

    Now, you can get a random number, between 1 and 10:
    var rand = Math.floor(Math .random() * 10) + 1;

    You can use that random number as an index to the array:
    alert(quotes_ar ray[rand]);

    Does that help?
    Brian

    Comment

    • Lee

      #3
      Re: Help with random code...

      Brian Genisio said:[color=blue]
      >
      >Virus wrote:
      >[color=green]
      >> Ok well what I am trying to do is have
      >>
      >> 1.) the background color to change randomly with 5 different colors.(change
      >> on page load)
      >>
      >> 2,) 10 different quotes randomly fadeing in and out in random spots on the
      >> webpage. with a delay timer on them, so they keep changing as the page is
      >> open. Not random each time the page is loaded.
      >>
      >> If anyone can help it would be greatly appreaciated, I have tried many of
      >> things and just cant seem to get what I am looking for.
      >>
      >> It seems so simple yet so complex...
      >>
      >> take the 00's out of email addy to send
      >>
      >>[/color]
      >
      >
      >Put your values in an array...
      >var quotes_array = new Array();
      >
      >You can populate the array...
      >quotes_array[0] = "This is a quote";
      >
      >Now, you can get a random number, between 1 and 10:
      >var rand = Math.floor(Math .random() * 10) + 1;
      >
      >You can use that random number as an index to the array:
      >alert(quotes_a rray[rand]);[/color]

      You'll want the random number to range from zero up
      to one less than the number of elements in the array,
      which is simply:

      var rand = Math.floor(Math .random()*quote s_array.length) ;

      Comment

      • Richard Cornford

        #4
        Re: Help with random code...

        "Brian Genisio" <BrianGenisio@y ahoo.com> wrote in message
        news:402d2fcd$1 @10.10.0.241...
        <snip>[color=blue]
        > Put your values in an array...
        > var quotes_array = new Array();
        >
        > You can populate the array...
        > quotes_array[0] = "This is a quote";[/color]

        Or an Array literal:-

        var quotes_array = [
        "This is a quote",
        "This is quote 2",
        "This is quote 3",
        "This is quote 4"
        ];
        [color=blue]
        > Now, you can get a random number, between 1 and 10:
        > var rand = Math.floor(Math .random() * 10) + 1;[/color]

        Or:-

        var rand = Math.ceil(Math. random() * 9);

        But javascript arrays are zero based.
        [color=blue]
        > You can use that random number as an index to the array:
        > alert(quotes_ar ray[rand]);[/color]

        So basing the random number on the length of the array would save the
        two pieces of code getting out of step:-

        var rand = Math.floor(Math .random() * quotes_array.le ngth);

        Randomly selecting from an Array has a reasonable probability of
        repeatedly selecting the same element. It would probably be better to
        randomly shuffle the contents of the array and then loop through the
        results sequentially.

        Richard.


        Comment

        • Lasse Reichstein Nielsen

          #5
          Re: Help with random code...

          "Richard Cornford" <Richard@litote s.demon.co.uk> writes:
          [color=blue]
          > "Brian Genisio" <BrianGenisio@y ahoo.com> wrote in message[/color]
          [color=blue][color=green]
          >> var rand = Math.floor(Math .random() * 10) + 1;[/color]
          >
          > Or:-
          >
          > var rand = Math.ceil(Math. random() * 9);[/color]

          No, Math.random gives numbers in the range [0,1[, i.e., zero is
          inclusive. This can give the numbers 0-9 with a very low probability
          of 0.
          [color=blue]
          > var rand = Math.floor(Math .random() * quotes_array.le ngth);[/color]

          hich is much better, going on canonical.
          [color=blue]
          > Randomly selecting from an Array has a reasonable probability of
          > repeatedly selecting the same element. It would probably be better to
          > randomly shuffle the contents of the array and then loop through the
          > results sequentially.[/color]

          Probably simpler than avoiding repeats, yes. There is a trick to
          avoiding repeats, but I don't know if it's worth it:

          First choice (num choices):
          var selected = Math.floor(Math .random()*num);

          Later choice (num-1 choices to avoid repeat):
          var tmp = Math.floor(Math .random()*(num-1));
          selected = (tmp >= selected ? tmp+1 : tmp);

          /L
          --
          Lasse Reichstein Nielsen - lrn@hotpop.com
          DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleD OM.html>
          'Faith without judgement merely degrades the spirit divine.'

          Comment

          • Virus

            #6
            Re: Help with random code...

            Ok well i understand the background color completly and it works great.
            However I dont think i completly explained my problem. I want the background
            color to change on each page load ok- and that is done with the code below.
            Well then I want text- Plain white text to fade in and out. No, black boxes
            around it or anytype of colored boxes or images. Just plain white text to
            randomly appear and fade in and out. I saw that script below online and was
            trying to make it work but I just couldnt completly understand the language
            that well.

            So the image program below could work if i could get white text to appear
            as an image and have its background transparent or invisable. U understand
            what i mean? Thanks again for your time and patients with me :-)


            "Virus" <virus0017@cox. net> wrote in message
            news:fN8Xb.964$ hE.667@fed1read 07...[color=blue]
            > Ok well what I am trying to do is have
            >
            > 1.) the background color to change randomly with 5 different[/color]
            colors.(change[color=blue]
            > on page load)
            >
            > 2,) 10 different quotes randomly fadeing in and out in random spots on[/color]
            the[color=blue]
            > webpage. with a delay timer on them, so they keep changing as the page is
            > open. Not random each time the page is loaded.
            >
            > If anyone can help it would be greatly appreaciated, I have tried many of
            > things and just cant seem to get what I am looking for.
            >
            > It seems so simple yet so complex...
            >
            > take the 00's out of email addy to send
            >
            >[/color]


            Comment

            • Dr John Stockton

              #7
              Re: Help with random code...

              JRS: In article <bro2bjc4.fsf@h otpop.com>, seen in
              news:comp.lang. javascript, Lasse Reichstein Nielsen <lrn@hotpop.com >
              posted at Sat, 14 Feb 2004 01:22:51 :-[color=blue]
              >"Richard Cornford" <Richard@litote s.demon.co.uk> writes:[/color]
              [color=blue][color=green]
              >> var rand = Math.floor(Math .random() * quotes_array.le ngth);[/color]
              >
              >hich is much better, going on canonical.[/color]

              In at least one browser, |0 is a little faster than Math.floor. I was
              told that, in some Opera, Math.random can give 1, which Math.random()%1
              will fix.

              If javascript were better designed, Math.random(N) would give a random
              integer in 0..(N-1) - Random in Pascal gives 0 <= X < 1 but Random(N)
              gives 0 <= n < N.
              [color=blue][color=green]
              >> Randomly selecting from an Array has a reasonable probability of
              >> repeatedly selecting the same element. It would probably be better to
              >> randomly shuffle the contents of the array and then loop through the
              >> results sequentially.[/color]
              >
              >Probably simpler than avoiding repeats, yes. There is a trick to
              >avoiding repeats, but I don't know if it's worth it:
              >
              >First choice (num choices):
              > var selected = Math.floor(Math .random()*num);
              >
              >Later choice (num-1 choices to avoid repeat):
              > var tmp = Math.floor(Math .random()*(num-1));
              > selected = (tmp >= selected ? tmp+1 : tmp);[/color]

              ISTM that the probability on the second choice of getting the next
              higher number will be doubled, unless the first selected was the
              highest.



              n = -1 // untested
              for (j=0; j<2;) { t = Random(N) ; if (t != n) A[j++] = n = t }


              A = [] // untested
              for (j=0 ; j<K;) { t = Random(N) ; if (!A[t]) { A[t]=t ; j++ }


              But the easy general solution is to do a partial shuffle.

              <URL:http://www.merlyn.demo n.co.uk/js-randm.htm>.

              --
              © John Stockton, Surrey, UK. ?@merlyn.demon. co.uk Turnpike v4.00 IE 4 ©
              <URL:http://jibbering.com/faq/> Jim Ley's FAQ for news:comp.lang. javascript
              <URL:http://www.merlyn.demo n.co.uk/js-index.htm> jscr maths, dates, sources.
              <URL:http://www.merlyn.demo n.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.

              Comment

              • Lasse Reichstein Nielsen

                #8
                Re: Help with random code...

                Dr John Stockton <spam@merlyn.de mon.co.uk> writes:
                [color=blue][color=green]
                >>which is much better, going on canonical.[/color]
                >
                > In at least one browser, |0 is a little faster than Math.floor.[/color]

                But it only works for numbers less than 2^32. For most practical
                purposes that is not a problem, but it needs to be said, so doesn't
                qualify as canonical :)
                [color=blue]
                > I was told that, in some Opera, Math.random can give 1, which
                > Math.random()%1 will fix.[/color]

                Correct. I have forgotten the version, but I think it was O5.
                That is an error in Opera, though, and shouldn't be used to
                complicate the general solution.

                To find a random number in the range 0..n-1, this is the most direct
                version and, barring implementation errors of the primitives, it
                works correctly for all numbers that can be represented:
                Math.floor(Math .random()*n);

                (Interesting observation: In Opera 7,
                Math.random()*M ath.pow(2,32)
                is always an integer. That means that the random floating point number
                is simply a 32-bit random integer divided by 2^32. Multiplying
                by only Math.pow(2,31) gave numbers ending in ".5" half the time.
                I.e, at most 32 bits worth of randomness in each random number.

                In IE and MozFireFox, there are decimals on the result :)

                [color=blue]
                > If javascript were better designed, Math.random(N) would give a random
                > integer in 0..(N-1) - Random in Pascal gives 0 <= X < 1 but Random(N)
                > gives 0 <= n < N.[/color]

                I agree. It is the most common use of random number generation, and
                should be supported directly.
                [color=blue][color=green]
                >>First choice (num choices):
                >> var selected = Math.floor(Math .random()*num);
                >>
                >>Later choice (num-1 choices to avoid repeat):
                >> var tmp = Math.floor(Math .random()*(num-1));
                >> selected = (tmp >= selected ? tmp+1 : tmp);[/color]
                >
                > ISTM that the probability on the second choice of getting the next
                > higher number will be doubled, unless the first selected was the
                > highest.[/color]

                No, all elements that were not the previous choice have an equal
                chance. It has no memeory about choices before that, all it prevents
                is that the same element is chosen twice in a row.

                If the first choice picks number 5 out of 0..7, the second choice
                picks a random number between 0 and 6. If it is 5 or above, it adds
                one, so the possible outcomes become 0, 1, 2, 3, 4, 6 and 7.
                [color=blue]
                > n = -1 // untested
                > for (j=0; j<2;) { t = Random(N) ; if (t != n) A[j++] = n = t }[/color]

                This rerolls until it gets a new result. It has expected execution
                time O(2 * N/(N-1)), but in the hypothetical worst case, it never
                terminates because it keeps rolling the same number.

                It won't diverge when using a pseudo-random number generator, because
                it won't generate the same number every time and will eventually
                (depending on its period) hit the entire phase space. It still makes
                analysis a little harder :)
                [color=blue]
                > A = [] // untested
                > for (j=0 ; j<K;) { t = Random(N) ; if (!A[t]) { A[t]=t ; j++ }[/color]
                change to "true", or 0 can never be marked ^

                Picks K out of N random numbers, no element twice. Execution time
                can be bad. If K>N, it always diverges, but that would be stupid :)

                You should store the result somewhere (e.g., B[j++]=t) or use it.

                If N=K, it finds a permutation. The expected time for that is
                O[n*ln(N)] (not as bad as I feared, although it can be done
                in linear time)
                [color=blue]
                > But the easy general solution is to do a partial shuffle.[/color]

                Yes. Finding a random permutation and keep cycling that is often
                better than completely random switching (with no immediate repeates).

                This problem seems to often come up for people permuting advertisment
                banners :)

                /L
                --
                Lasse Reichstein Nielsen - lrn@hotpop.com
                DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleD OM.html>
                'Faith without judgement merely degrades the spirit divine.'

                Comment

                • Dr John Stockton

                  #9
                  Re: Help with random code...

                  JRS: In article <ad3l41qc.fsf@h otpop.com>, seen in
                  news:comp.lang. javascript, Lasse Reichstein Nielsen <lrn@hotpop.com >
                  posted at Sun, 15 Feb 2004 01:37:15 :-[color=blue]
                  >Dr John Stockton <spam@merlyn.de mon.co.uk> writes:[/color]
                  [color=blue][color=green]
                  >> In at least one browser, |0 is a little faster than Math.floor.[/color]
                  >
                  >But it only works for numbers less than 2^32.[/color]

                  2^31.

                  [color=blue][color=green]
                  >> I was told that, in some Opera, Math.random can give 1, which
                  >> Math.random()%1 will fix.[/color]
                  >
                  >Correct. I have forgotten the version, but I think it was O5.[/color]

                  (5.02..6.01 at least), I have read; and "LRN 20030804 : Opera 4, 5, not
                  6.05."

                  [color=blue]
                  >(Interesting observation: In Opera 7,
                  > Math.random()*M ath.pow(2,32)
                  >is always an integer. That means that the random floating point number
                  >is simply a 32-bit random integer divided by 2^32. Multiplying
                  >by only Math.pow(2,31) gave numbers ending in ".5" half the time.
                  >I.e, at most 32 bits worth of randomness in each random number.[/color]

                  MSIE4 gives, apparently, 53 bits, but I've not checked the cycle length
                  - 2^53 would take too long. But it might be practical to see whether,
                  in Opera 7, the cycle length is 2^32 or thereabouts.

                  --
                  © John Stockton, Surrey, UK. ?@merlyn.demon. co.uk Turnpike v4.00 IE 4 ©
                  <URL:http://jibbering.com/faq/> Jim Ley's FAQ for news:comp.lang. javascript
                  <URL:http://www.merlyn.demo n.co.uk/js-index.htm> jscr maths, dates, sources.
                  <URL:http://www.merlyn.demo n.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.

                  Comment

                  • Lasse Reichstein Nielsen

                    #10
                    Re: Help with random code...

                    Dr John Stockton <spam@merlyn.de mon.co.uk> writes:
                    [color=blue]
                    > MSIE4 gives, apparently, 53 bits, but I've not checked the cycle length
                    > - 2^53 would take too long. But it might be practical to see whether,
                    > in Opera 7, the cycle length is 2^32 or thereabouts.[/color]

                    It seems to be. It does repeat after 2^32 steps (Opera 7.5
                    preview). Ofcourse, it could have a shorter period that divides 2^32,
                    but that'll be another test.

                    /L
                    --
                    Lasse Reichstein Nielsen - lrn@hotpop.com
                    DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleD OM.html>
                    'Faith without judgement merely degrades the spirit divine.'

                    Comment

                    • Dr John Stockton

                      #11
                      Re: Help with random code...

                      JRS: In article <ptcf4gzx.fsf@h otpop.com>, seen in
                      news:comp.lang. javascript, Lasse Reichstein Nielsen <lrn@hotpop.com >
                      posted at Mon, 16 Feb 2004 08:32:02 :-[color=blue]
                      >Dr John Stockton <spam@merlyn.de mon.co.uk> writes:
                      >[color=green]
                      >> MSIE4 gives, apparently, 53 bits, but I've not checked the cycle length
                      >> - 2^53 would take too long. But it might be practical to see whether,
                      >> in Opera 7, the cycle length is 2^32 or thereabouts.[/color]
                      >
                      >It seems to be. It does repeat after 2^32 steps (Opera 7.5
                      >preview). Ofcourse, it could have a shorter period that divides 2^32,
                      >but that'll be another test.[/color]

                      Since my PC is 300 MHz and its cycle length is probably at least 2^53,
                      I'll not be testing that myself.

                      But just before <URL:http://www.merlyn.demo n.co.uk/js-randm.htm#AfR> the
                      resolution of Math.random is determined :-

                      function Resol() { var j, X, T, M = 0
                      for (j = 0 ; j < 100 ; j++) { X = Math.random()
                      T = 0 ; while ((X*=2)%1 > 0) T++ ; if (T>M) M = T }
                      document.write( "to be<tt> ", M, " <\/tt>bits") }

                      One day, it may be useful to know the resolution and cycle length.

                      --
                      © John Stockton, Surrey, UK. ?@merlyn.demon. co.uk Turnpike v4.00 IE 4 ©
                      <URL:http://jibbering.com/faq/> Jim Ley's FAQ for news:comp.lang. javascript
                      <URL:http://www.merlyn.demo n.co.uk/js-index.htm> jscr maths, dates, sources.
                      <URL:http://www.merlyn.demo n.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.

                      Comment

                      Working...