-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Module-1: WIP - Pending handleUnderageCrewMembers method
- Loading branch information
1 parent
46633e2
commit afde51e
Showing
10 changed files
with
446 additions
and
278 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Dependency versions | ||
lombok_version=1.18.4 | ||
junit_version=5.10.2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package edu.spacexploration.udea; | ||
|
||
import edu.spacexploration.udea.entities.CrewMember; | ||
import edu.spacexploration.udea.module1.Spaceship; | ||
import edu.spacexploration.udea.utils.Reader; | ||
import java.util.List; | ||
|
||
public class Main { | ||
public static void main(String[] args) { | ||
Reader reader = new Reader(); | ||
List<CrewMember> crewMembers = reader.readCrewMembers("src/main/resources/generated_10000.json"); | ||
Spaceship spaceship = new Spaceship(1000,10); | ||
spaceship.saveMembers(crewMembers); | ||
spaceship.getCabins().display(); | ||
spaceship.getCabins().countCrewMembers(); | ||
} | ||
} |
62 changes: 62 additions & 0 deletions
62
src/main/java/edu/spacexploration/udea/entities/CrewMember.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package edu.spacexploration.udea.entities; | ||
|
||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||
import com.google.gson.annotations.SerializedName; | ||
|
||
@JsonIgnoreProperties(ignoreUnknown = true) | ||
public class CrewMember { | ||
|
||
@SerializedName("_id") | ||
private String id; | ||
|
||
@SerializedName("Name") | ||
private String name; | ||
|
||
@SerializedName("Surname") | ||
private String surname; | ||
|
||
@SerializedName("Age") | ||
private Integer age; | ||
|
||
@SerializedName("Gender") | ||
private String gender; | ||
|
||
@SerializedName("FamilyID") | ||
private Integer familyId; | ||
|
||
@SerializedName("CivilStatus") | ||
private String civilStatus; | ||
|
||
@SerializedName("Children") | ||
private Integer children; | ||
|
||
@SerializedName("TripsAchieved") | ||
private Integer tripsAchieved; | ||
|
||
@SerializedName("Salary") | ||
private Float salary; | ||
|
||
@Override | ||
public String toString() { | ||
return "CrewMember{" + | ||
"id='" + id + '\'' + | ||
", name='" + name + '\'' + | ||
", surname='" + surname + '\'' + | ||
", age=" + age + | ||
", gender='" + gender + '\'' + | ||
", familyId=" + familyId + | ||
", civilStatus='" + civilStatus + '\'' + | ||
", children=" + children + | ||
", tripsAchieved=" + tripsAchieved + | ||
", salary=" + salary + | ||
'}'; | ||
} | ||
|
||
public Integer getFamilyId() { | ||
return familyId; | ||
} | ||
|
||
public Integer getAge() { | ||
return age; | ||
} | ||
} |
91 changes: 91 additions & 0 deletions
91
src/main/java/edu/spacexploration/udea/module1/Spaceship.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
package edu.spacexploration.udea.module1; | ||
|
||
import edu.spacexploration.udea.entities.CrewMember; | ||
import edu.spacexploration.udea.utils.ChainedHashTable; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public class Spaceship { | ||
|
||
public static final int MIN_AGE = 18; | ||
private final Integer spaceshipMaxCabins; | ||
private final Integer cabinSize; | ||
private ChainedHashTable cabins; | ||
|
||
public Spaceship(Integer spaceshipMaxCabins, Integer cabinSize) { | ||
this.spaceshipMaxCabins = spaceshipMaxCabins; | ||
this.cabinSize = cabinSize; | ||
} | ||
|
||
public void saveMembers(List<CrewMember> crewMembers) { | ||
cabins = new ChainedHashTable(spaceshipMaxCabins); | ||
List<CrewMember> underageCrewMembers = new ArrayList<>(); | ||
// 1. Iterate all the crew members and assign them to the spaceship | ||
for (CrewMember crewMember : crewMembers) { | ||
Integer familyId = crewMember.getFamilyId(); | ||
List<Integer> hashValues; | ||
hashValues = cabins.getHashValues(familyId); | ||
int counter = 0; | ||
for (Integer cabinId : hashValues) { | ||
if (crewMember.getAge() < MIN_AGE) { | ||
underageCrewMembers.add(crewMember); | ||
break; | ||
// crewMember = handleUnderageCrewMember(crewMember, cabinId); | ||
} | ||
if (insertCrewMember(crewMember, cabinId)) { | ||
break; | ||
} | ||
counter++; | ||
} | ||
if (counter == hashValues.size()) { | ||
insertCrewMemberInAvailableCabin(crewMember); | ||
} | ||
} | ||
handleUnderageCrewMembers(underageCrewMembers); | ||
} | ||
|
||
private void handleUnderageCrewMembers(List<CrewMember> underageCrewMembers) { | ||
for (CrewMember underageCrewMember : underageCrewMembers) { | ||
CrewMember adultCrewMember; | ||
Integer familyId = underageCrewMember.getFamilyId(); | ||
for (int cabinId = 0; cabinId < spaceshipMaxCabins; cabinId++) { | ||
//Tiene q haber un adulto de la misma familia, este es el unico requisito. Acá habria ese condicional | ||
//Hay que intercambiar a un familiar de distinta familia que no tenga menores a cargo. | ||
|
||
} | ||
} | ||
} | ||
|
||
private void insertCrewMemberInAvailableCabin(CrewMember crewMember) { | ||
Integer cabinId = cabins.findAvailableCabin(cabinSize); | ||
insertCrewMember(crewMember, cabinId); | ||
} | ||
|
||
// private CrewMember insertUnderageCrewMember(CrewMember underageCrewMember, Integer cabinId) { | ||
//// if(cabins.findFirstUnderageCrewMember(cabinId)!=null){ | ||
//// return underageCrewMember; | ||
//// } | ||
// // 1. Find one adult crew member in the cabin | ||
// CrewMember adultCrewMember = cabins.findFirstAdultCrewMember(cabinId); | ||
// cabins.getCrewMembers(cabinId).remove(adultCrewMember); | ||
// insertCrewMember(underageCrewMember, cabinId); | ||
// //2. If not adult is found, continue with next cabin with same underage crew member | ||
// return adultCrewMember; | ||
// } | ||
|
||
private boolean insertCrewMember(CrewMember crewMember, Integer cabinId) { | ||
Integer sizeCrewMembersInCabin = cabins.getCrewMembers(cabinId).size(); | ||
if (sizeCrewMembersInCabin >= cabinSize) { | ||
return false; | ||
} | ||
if (cabins.crewMemberExists(crewMember)) { | ||
return true; | ||
} | ||
cabins.add(crewMember, cabinId); | ||
return true; | ||
} | ||
|
||
public ChainedHashTable getCabins() { | ||
return cabins; | ||
} | ||
} |
Oops, something went wrong.