Advertisement
Guest User

Untitled

a guest
Oct 24th, 2019
353
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. package taxipark
  2.  
  3. import java.util.*
  4.  
  5.  
  6. /*
  7. * Task #1. Find all the drivers who performed no trips.
  8. */
  9. fun TaxiPark.findFakeDrivers(): Set<Driver> {
  10.  
  11. var driverWithoutTrips = allDrivers.toMutableList()
  12. var driverWithTrips = ArrayList<Driver>()
  13.  
  14. val(trips, noTrips) = trips.partition { it.duration != 0 }
  15. trips.forEach {
  16. driverWithTrips.add(it.driver)
  17. }
  18.  
  19. driverWithTrips.forEach {
  20. if (allDrivers.contains(it))
  21. driverWithoutTrips.remove(it)
  22. }
  23.  
  24. return driverWithoutTrips.toSet()
  25. }
  26.  
  27.  
  28. /*
  29. * Task #2. Find all the clients who completed at least the given number of trips.
  30. */
  31. fun TaxiPark.findFaithfulPassengers(minTrips: Int): Set<Passenger> {
  32. var list = mutableSetOf<Passenger>()
  33. allPassengers.forEach {passenger ->
  34. var passengerTrips = 0
  35. trips.forEach { trips ->
  36. if (trips.passengers.contains(passenger)) {
  37. passengerTrips++
  38. }
  39. }
  40. if (minTrips <= passengerTrips) {
  41. list.add(passenger)
  42. }
  43. }
  44. return list
  45. }
  46.  
  47.  
  48. /*
  49. * Task #3. Find all the passengers, who were taken by a given driver more than once.
  50. */
  51. fun TaxiPark.findFrequentPassengers(driver: Driver): Set<Passenger> {
  52. var passengerList = ArrayList<Passenger>()
  53.  
  54. trips.forEach {
  55. if (it.driver.name == driver.name) {
  56. passengerList.addAll(it.passengers)
  57. }
  58. }
  59. return passengerList.groupingBy { it }.eachCount().filter { it.value > 1 }.keys
  60. }
  61.  
  62. /*
  63. * Task #4. Find the passengers who had a discount for majority of their trips.
  64. */
  65. fun TaxiPark.findSmartPassengers(): Set<Passenger> {
  66. var count = 0
  67. var list = allPassengers.associate { Pair(it, 0) }.toMutableMap()
  68.  
  69. trips.forEach { trip ->
  70. trip.passengers.forEach { passenger ->
  71. count = if (trip.cost < trip.distance + trip.duration) {
  72. list[passenger]!!.plus(1)
  73. } else {
  74. list[passenger]!!.minus(1)
  75. }
  76. list[passenger] = count
  77. }
  78. }
  79.  
  80. var result = mutableSetOf<Passenger>()
  81. list.forEach {
  82. if (it.value > 0) result.add(it.key)
  83. }
  84.  
  85. return result
  86. }
  87.  
  88.  
  89. /*
  90. * Task #5. Find the most frequent trip duration among minute periods 0..9, 10..19, 20..29, and so on.
  91. * Return any period if many are the most frequent, return `null` if there're no trips.
  92. */
  93. fun TaxiPark.findTheMostFrequentTripDurationPeriod(): IntRange? {
  94. return trips.map {
  95. it.duration - (it.duration%10)..(it.duration+9 - (it.duration%10))
  96. }.groupingBy { it }.eachCount().maxBy { it.value }?.key
  97. }
  98.  
  99. /*
  100. * Task #6.
  101. * Check whether 20% of the drivers contribute 80% of the income.
  102. */
  103. fun TaxiPark.checkParetoPrinciple(): Boolean {
  104. if (trips.isEmpty()) return false
  105.  
  106. var totalCost = 0.0
  107. var map = allDrivers.associateWith { 0.0 }.toMutableMap()
  108. trips.forEach {
  109. totalCost += it.cost
  110. map[it.driver] = map[it.driver]!!.plus(it.cost)
  111. }
  112.  
  113. val list = map.toList().sortedBy { it.second }
  114. var twenty: Int = (allDrivers.size * 0.2).toInt()
  115. var twentyTotalCost = 0.0
  116. for (i in list.lastIndex downTo (list.lastIndex - twenty + 1)) {
  117. twentyTotalCost += list[i].second
  118. }
  119.  
  120. return twentyTotalCost >= totalCost * 0.8
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement