Hi all,
So for this one, I think I've got the logic for getFriends correct. It passes the example, and make senses with other values for the index parameter. However, I can't this to verify requirement 4. I may be misinterpretting the meaning of the deep parameter.
Help please.
Thanks, Phil
package com.codegym.task.task36.task3611;
import java.util.*;
/*
How many potential friends does a person have?
*/
public class Solution {
private boolean[][] humanRelationships;
public static void main(String[] args) {
Solution solution = new Solution();
solution.humanRelationships = generateRelationships();
Set<Integer> allFriendsAndPotentialFriends = solution.getAllFriendsAndPotentialFriends(4, 2);
System.out.println(allFriendsAndPotentialFriends); // Expected: [0, 1, 2, 3, 5, 7]
Set<Integer> potentialFriends = solution.removeFriendsFromSet(allFriendsAndPotentialFriends, 4);
System.out.println(potentialFriends); // Expected: [2, 5, 7]
}
// Return test data
private static boolean[][] generateRelationships() {
return new boolean[][]{
{true}, //0
{true, true}, //1
{false, true, true}, //2
{false, false, false, true}, //3
{true, true, false, true, true}, //4
{true, false, true, false, false, true}, //5
{false, false, false, false, false, true, true}, //6
{false, false, false, true, false, false, false, true} //7
};
}
public Set<Integer> getAllFriendsAndPotentialFriends(int index, int deep) {
//write your code here
boolean[][] relationships = generateRelationships();
Set<Integer> friends = new HashSet<>();
friends.add(index);
Integer[] array;
int depth = 0;
while (depth++ < deep) {
array = new Integer[friends.size()];
friends.toArray(array);
for (int i : array) {
friends.addAll(getFriends(relationships, i));
}
}
friends.remove(index);
return friends;
}
public Set<Integer> getFriends(boolean[][] relationships, int index) {
Set<Integer> friends = new HashSet<>();
for (int i = 0; i < relationships[index].length; i++) {
if (relationships[index][i]) friends.add(i);
}
for (int i = index; i < relationships.length; i++) {
if (index < relationships[i].length && relationships[i][index]) friends.add(i);
}
return friends;
}
// Remove from the set the people with whom you already have a relationship
public Set<Integer> removeFriendsFromSet(Set<Integer> set, int index) {
for (int i = 0; i < humanRelationships.length; i++) {
if ((i < index) && (index < humanRelationships.length) && humanRelationships[index][i]) {
set.remove(i);
} else if ((i > index) && humanRelationships[i][index]) {
set.remove(i);
}
}
return set;
}
}