zouzou b lebiane
zouzou b lebiane

Reputation: 205

Generate an array of random numbers not present in a list dart

so i have a list of predefined numbers where each number consists of 6 numbers like this {1,2,3,4,5,6 ; 34,52,3,76,12,4 ; 53,1,4,76,23,5 ; .... }

each individual number in the group of numbers range from 1 to 99,

import 'dart:math';

main() {
  var rng = new Random();
  var l = new List.generate(12, (_) => rng.nextInt(100));
}

i want to generate an array of 6 different random numbers using dart in a way that it is not already present in the list of numbers i already have.

Upvotes: 0

Views: 1692

Answers (1)

Durdu
Durdu

Reputation: 4849

import 'dart:math';

void main() {  
    var listOfSets = List<Set<int>>();

    final int nElementsWithMax = 99;  
    final int kTaken = 6;    
    final int requiredResults = 3;

    for (int i = 0; i < requiredResults; i++) {
      bool isInList = false;
      Set<int> anewSet;
      do {
        anewSet = Set.of(listRandom(nElementsWithMax, kTaken));
        isInList = listOfSets.firstWhere(
                (setInList) => anewSet.intersection(setInList).length == anewSet.length,
            orElse: () => null)
            != null;
      } while (isInList);
      listOfSets.add(anewSet);
    }
    print(listOfSets);
}

List<int> listRandom(int maxNumber, int numberOfGenerations) {

  final random = Random();
  var currentOptions = List<int>.generate(maxNumber, (i) => i);

  var list = List.generate(numberOfGenerations, (_) {
    final index = random.nextInt(currentOptions.length);
    final result = currentOptions[index];
    currentOptions.removeAt(index);    
    return result;
  });
  return list;
}

Keep in mind that you cannot exceed the combination limit defined here.

In your case, requiredResults cannot exceed (100!)/((6! * (100 - 6)!) ... some huge number

Upvotes: 1

Related Questions