Creative Communities of the World Forums

The peer to peer support community for media production professionals.

Activity Forums Adobe After Effects Expressions Range of Numbers without Repeating

  • Range of Numbers without Repeating

    Posted by Dustin Wilson on November 16, 2018 at 2:24 pm

    I’m trying to generate a random whole number between 0 and 64 without repeating. I’ve seen a few other threads with somewhat similar goals, but I can’t quite get there. Here’s what I have so far, but they’re still repeating…

    var holdTime = 10;
    seedRandom(Math.floor(time/holdTime), timeless = true);
    var nums = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],
    ranNums = [],
    i = nums.length,
    j = 0;

    while (i--) {
    j = Math.floor(random() * (i+1));
    ranNums.push(nums[j]);
    nums.splice(j,1);
    }

    Dustin Wilson replied 7 years, 8 months ago 2 Members · 2 Replies
  • 2 Replies
  • Dan Ebberts

    November 16, 2018 at 4:46 pm

    I’m not sure this is exactly what you’re after, but it should give a sequence without repeats:


    var holdTime = 10;
    seedRandom(index+Math.floor(time/(holdTime*65)),true);
    nums = [];
    for (i = 0; i <= 64; i++) nums.push(i);
    for (i = 0; i < nums.length; i++){
    idx = i + Math.floor(random(nums.length - i));
    temp = nums[i];
    nums[i] = nums[idx];
    nums[idx] = temp;
    }
    idx = Math.floor(time/holdTime)%nums.length;
    nums[idx];

    If you go beyond the first sequence (65 numbers), you should get a different, non-repeating sequence, so it’s possible the 66th number could match the 65th. If that’s a problem, you could make a slight modification so that the first sequence just repeats.

    Dan

    Dan

  • Dustin Wilson

    November 16, 2018 at 5:23 pm

    Dan the man!

    I can’t thank you enough, this is exactly what I was trying to accomplish!

    Thanks again for you time and help!

We use anonymous cookies to give you the best experience we can.
Our Privacy policy | GDPR Policy