Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Main extends App {
- val saSet1 = Set(Aircraft("1",1), Aircraft("2",2), Aircraft("3",3), Aircraft("4",4), Aircraft("5",5))
- val srSet1 = Set(Runway("1",Set(1,2)), Runway("2",Set(1,2)), Runway("3",Set(1,2)), Runway("4",Set(1,2)),
- Runway("5",Set(1,2)))
- val saSet2 = Set(Aircraft("1",1), Aircraft("2",2), Aircraft("3",3), Aircraft("4",4), Aircraft("5",5), Aircraft("6",1),Aircraft("7",5), Aircraft("8",5),Aircraft("9",3))
- val srSet2NotPossible = Set(Runway("1",Set(1,2)), Runway("2",Set(1,2)), Runway("3",Set(1,2)), Runway("4",Set(1,2)),
- Runway("5",Set(1,2)))
- val srSet2Possible = Set(Runway("1",Set(1,2)), Runway("2",Set(3,4)), Runway("3",Set(10,11)), Runway("4",Set(5)),
- Runway("5",Set(1,2)))
- val lr:List[(Aircraft, Runway) => Boolean] = List(((x, b) => x.class_ < 6 && b.classes.size < 4), ((x, b) => x.class_ > -1 && b.classes.size > -1),
- (x, b) => b.classes.contains(x.class_))
- // ex1
- def possibleRunways(sa: Set[Aircraft], sr: Set[Runway]): Set[Runway] = {
- // o set elimina resultados de lista vazia e ficamos so com os resultados corretos sem duplicados
- sa.flatMap(aircraft => {
- sr.filter(runway => runway.classes.contains(aircraft.class_))
- }).toSet
- }
- // expected: Set(Runway(2,Set(1, 2)), Runway(5,Set(1, 2)), Runway(3,Set(1, 2)), Runway(4,Set(1, 2)), Runway(1,Set(1, 2)))
- println("ex1 = " + possibleRunways(saSet1, srSet1))
- // ex2
- def possibleRunwaysComplete(sa: Set[Aircraft], sr: Set[Runway]): Option[Set[Runway]] = {
- // retrieve a list of all available classes on runways
- val availableClassesOnRunways = sr.flatMap(_.classes).toSet
- // for all check if a condition is true for all elements within a collection
- val allAircraftHaveAPossibleRunway = sa.forall(aircraft => {
- availableClassesOnRunways.contains(aircraft.class_)
- })
- if(allAircraftHaveAPossibleRunway){
- Some(possibleRunways(sa,sr))
- }else{
- None
- }
- }
- // Impossible because there's no runways for all aircraft classes expected NONE
- println("ex2 Impossible example = " + possibleRunwaysComplete(saSet2, srSet2NotPossible))
- // Possible because there's runways for all aircraft classes expected Ser[Runways]
- // Some(Set(Runway(5,Set(1, 2)), Runway(1,Set(1, 2)), Runway(4,Set(5)), Runway(2,Set(3, 4))))
- println("ex2 Possible example = " + possibleRunwaysComplete(saSet2, srSet2Possible))
- // ex3
- def possibleRunwaysParam(sa: Set[Aircraft], sr: Set[Runway])(lr: List[(Aircraft, Runway) => Boolean]): Option[Set[Runway]] = {
- val validation = sa.forall(aircraft => {
- !sr.filter(runway => {
- lr.exists(x => x(aircraft,runway))
- }).isEmpty
- })
- if(validation){
- possibleRunwaysComplete(sa,sr)
- } else {
- None
- }
- }
- // Impossible because there's no runways for all aircraft classes expected NONE
- println("ex3 Impossible example = " + possibleRunwaysParam(saSet2, srSet2NotPossible)(lr))
- // Possible because there's runways for all aircraft classes expected Ser[Runways]
- // Some(Set(Runway(5,Set(1, 2)), Runway(1,Set(1, 2)), Runway(4,Set(5)), Runway(2,Set(3, 4))))
- println("ex3 Possible example = " + possibleRunwaysParam(saSet2, srSet2Possible)(lr))
- // ex4
- def possibleSets[A,B](sa: Set[A], sr: Set[B])(lr: List[(A, B) => Boolean]): Option[Set[B]] = {
- val validation = sa.forall(aircraft => {
- !sr.filter(runway => {
- lr.exists(x => x(aircraft,runway))
- }).isEmpty
- })
- if(validation){
- Some(sa.flatMap(aircraft => {
- sr.filter(runway => {
- lr.exists(x => x(aircraft,runway))
- }).toSet
- }))
- }else {
- None
- }
- }
- // Impossible because there's no runways for all aircraft classes expected NONE
- println("ex4 Impossible example = " + possibleSets(saSet2, srSet2NotPossible)(lr))
- // Possible because there's runways for all aircraft classes expected Ser[Runways]
- // Some(Set(Runway(5,Set(1, 2)), Runway(1,Set(1, 2)), Runway(4,Set(5)), Runway(2,Set(3, 4))))
- println("ex4 Possible example = " + possibleSets(saSet2, srSet2Possible)(lr))
- }
- case class Aircraft(id: String, class_ : Int)
- case class Runway(id: String, classes: Set[Int])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement