Advertisement
Guest User

Exame Época Normal 2019

a guest
Jul 18th, 2019
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 4.17 KB | None | 0 0
  1.  
  2. object Main  extends App {
  3.   val saSet1 = Set(Aircraft("1",1), Aircraft("2",2), Aircraft("3",3), Aircraft("4",4), Aircraft("5",5))
  4.   val srSet1 = Set(Runway("1",Set(1,2)), Runway("2",Set(1,2)), Runway("3",Set(1,2)), Runway("4",Set(1,2)),
  5.     Runway("5",Set(1,2)))
  6.  
  7.   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))
  8.   val srSet2NotPossible = Set(Runway("1",Set(1,2)), Runway("2",Set(1,2)), Runway("3",Set(1,2)), Runway("4",Set(1,2)),
  9.     Runway("5",Set(1,2)))
  10.   val srSet2Possible = Set(Runway("1",Set(1,2)), Runway("2",Set(3,4)), Runway("3",Set(10,11)), Runway("4",Set(5)),
  11.     Runway("5",Set(1,2)))
  12.  
  13.   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),
  14.     (x, b) => b.classes.contains(x.class_))
  15.  
  16.   // ex1
  17.   def possibleRunways(sa: Set[Aircraft], sr: Set[Runway]): Set[Runway] = {
  18.     // o set elimina resultados de lista vazia e ficamos so com os resultados corretos sem duplicados
  19.     sa.flatMap(aircraft => {
  20.       sr.filter(runway => runway.classes.contains(aircraft.class_))
  21.     }).toSet
  22.   }
  23.   // 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)))
  24.   println("ex1 = " + possibleRunways(saSet1, srSet1))
  25.  
  26.  
  27.   // ex2
  28.   def possibleRunwaysComplete(sa: Set[Aircraft], sr: Set[Runway]): Option[Set[Runway]] = {
  29.     // retrieve a list of all available classes on runways
  30.     val availableClassesOnRunways = sr.flatMap(_.classes).toSet
  31.  
  32.     // for all check if a condition is true for all elements within a collection
  33.     val allAircraftHaveAPossibleRunway = sa.forall(aircraft => {
  34.       availableClassesOnRunways.contains(aircraft.class_)
  35.     })
  36.  
  37.     if(allAircraftHaveAPossibleRunway){
  38.       Some(possibleRunways(sa,sr))
  39.     }else{
  40.       None
  41.     }
  42.   }
  43.  
  44.   // Impossible because there's no runways for all aircraft classes expected NONE
  45.   println("ex2 Impossible example = " + possibleRunwaysComplete(saSet2, srSet2NotPossible))
  46.   // Possible because there's runways for all aircraft classes expected Ser[Runways]
  47.   // Some(Set(Runway(5,Set(1, 2)), Runway(1,Set(1, 2)), Runway(4,Set(5)), Runway(2,Set(3, 4))))
  48.   println("ex2 Possible example = " + possibleRunwaysComplete(saSet2, srSet2Possible))
  49.  
  50.  
  51.   // ex3
  52.   def possibleRunwaysParam(sa: Set[Aircraft], sr: Set[Runway])(lr: List[(Aircraft, Runway) => Boolean]): Option[Set[Runway]] = {
  53.     val validation = sa.forall(aircraft => {
  54.       !sr.filter(runway => {
  55.         lr.exists(x => x(aircraft,runway))
  56.       }).isEmpty
  57.     })
  58.  
  59.     if(validation){
  60.       possibleRunwaysComplete(sa,sr)
  61.     } else {
  62.       None
  63.     }
  64.   }
  65.  
  66.   // Impossible because there's no runways for all aircraft classes expected NONE
  67.   println("ex3 Impossible example = " + possibleRunwaysParam(saSet2, srSet2NotPossible)(lr))
  68.   // Possible because there's runways for all aircraft classes expected Ser[Runways]
  69.   // Some(Set(Runway(5,Set(1, 2)), Runway(1,Set(1, 2)), Runway(4,Set(5)), Runway(2,Set(3, 4))))
  70.   println("ex3 Possible example = " + possibleRunwaysParam(saSet2, srSet2Possible)(lr))
  71.  
  72.  
  73.   // ex4
  74.   def possibleSets[A,B](sa: Set[A], sr: Set[B])(lr: List[(A, B) => Boolean]): Option[Set[B]] = {
  75.     val validation = sa.forall(aircraft => {
  76.       !sr.filter(runway => {
  77.         lr.exists(x => x(aircraft,runway))
  78.       }).isEmpty
  79.     })
  80.  
  81.     if(validation){
  82.       Some(sa.flatMap(aircraft => {
  83.         sr.filter(runway => {
  84.           lr.exists(x => x(aircraft,runway))
  85.         }).toSet
  86.       }))
  87.     }else {
  88.       None
  89.     }
  90.   }
  91.  
  92.   // Impossible because there's no runways for all aircraft classes expected NONE
  93.   println("ex4 Impossible example = " + possibleSets(saSet2, srSet2NotPossible)(lr))
  94.   // Possible because there's runways for all aircraft classes expected Ser[Runways]
  95.   // Some(Set(Runway(5,Set(1, 2)), Runway(1,Set(1, 2)), Runway(4,Set(5)), Runway(2,Set(3, 4))))
  96.   println("ex4 Possible example = " + possibleSets(saSet2, srSet2Possible)(lr))
  97.  
  98. }
  99.  
  100. case class Aircraft(id: String, class_ : Int)
  101. case class Runway(id: String, classes: Set[Int])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement