deranged method

List<T> deranged()

Implementation

List<T> deranged() {
  final random = Random();
  List<T> result = List.from(this);

  for (int i = 0; i < result.length; i++) {
    int j = i;
    while (j == i) {
      j = random.nextInt(result.length);
    }
    T temp = result[i];
    result[i] = result[j];
    result[j] = temp;
  }

  for (int i = 0; i < result.length; i++) {
    if (result[i] == this[i]) {
      return deranged();
    }
  }

  return result;
}