Skip to content

Commit

Permalink
Module-1: WIP - Pending handleUnderageCrewMembers method
Browse files Browse the repository at this point in the history
  • Loading branch information
parangos12 committed Oct 12, 2024
1 parent 46633e2 commit afde51e
Show file tree
Hide file tree
Showing 10 changed files with 446 additions and 278 deletions.
1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ repositories {
dependencies {
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'

implementation 'com.fasterxml.jackson.core:jackson-databind:2.0.1'

implementation 'com.google.code.gson:gson:2.9.1'


}

test {
Expand Down
3 changes: 3 additions & 0 deletions gradle.properties
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
17 changes: 17 additions & 0 deletions src/main/java/edu/spacexploration/udea/Main.java
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 src/main/java/edu/spacexploration/udea/entities/CrewMember.java
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 src/main/java/edu/spacexploration/udea/module1/Spaceship.java
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;
}
}
Loading

0 comments on commit afde51e

Please sign in to comment.