Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class AirportsTest {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- Airports airports = new Airports();
- int n = scanner.nextInt();
- scanner.nextLine();
- String[] codes = new String[n];
- for (int i = 0; i < n; ++i) {
- String al = scanner.nextLine();
- String[] parts = al.split(";");
- airports.addAirport(parts[0], parts[1], parts[2], Integer.parseInt(parts[3]));
- codes[i] = parts[2];
- }
- int nn = scanner.nextInt();
- scanner.nextLine();
- for (int i = 0; i < nn; ++i) {
- String fl = scanner.nextLine();
- String[] parts = fl.split(";");
- airports.addFlights(parts[0], parts[1], Integer.parseInt(parts[2]), Integer.parseInt(parts[3]));
- }
- int f = scanner.nextInt();
- int t = scanner.nextInt();
- String from = codes[f];
- String to = codes[t];
- System.out.printf("===== FLIGHTS FROM %S =====\n", from);
- airports.showFlightsFromAirport(from);
- System.out.printf("===== DIRECT FLIGHTS FROM %S TO %S =====\n", from, to);
- airports.showDirectFlightsFromTo(from, to);
- t += 5;
- t = t % n;
- to = codes[t];
- System.out.printf("===== DIRECT FLIGHTS TO %S =====\n", to);
- airports.showDirectFlightsTo(to);
- }
- }
- class Flight implements Comparable<Flight> {
- String from;
- String to;
- int time;
- int duration;
- public Flight(String from, String to, int time, int duration) {
- this.from = from;
- this.to = to;
- this.time = time;
- this.duration = duration;
- }
- String startTime() {
- int hours = time / 60;
- int minutes = time % 60;
- return String.format("%02d:%02d", hours, minutes);
- }
- String endTime() {
- int hours = (time + duration) / 60;
- int minutes = (time + duration) % 60;
- if (hours >= 24)
- hours -= 24;
- return String.format("%02d:%02d", hours, minutes);
- }
- String duration() {
- int startHour = time / 60;
- int startMinute = time % 60;
- int endHour = (time + duration) / 60;
- int endMinute = (time + duration) % 60;
- boolean day = false;
- int durMinute = endMinute - startMinute;
- if (endHour >= 24) {
- day = true;
- }
- if (durMinute < 0) {
- durMinute += 60;
- endHour--;
- }
- int durHour = endHour - startHour;
- if (endHour >= 24) {
- day = true;
- }
- if (day)
- return String.format("+1d %dh%02dm", durHour, durMinute);
- else
- return String.format("%dh%02dm", durHour, durMinute);
- }
- @Override
- public String toString() {
- return String.format("%s-%s %s-%s %s", from, to, startTime(), endTime(), duration());
- }
- @Override
- public int compareTo(Flight that) {
- int difference = this.time - that.time;
- if (difference == 0) {
- return this.from.compareTo(that.from);
- }
- return difference;
- }
- }
- class Airport {
- String name;
- String country;
- String code;
- int passengers;
- Map<String, TreeSet<Flight>> flightsTo;
- public Airport(String name, String country, String code, int passengers) {
- this.name = name;
- this.country = country;
- this.code = code;
- this.passengers = passengers;
- this.flightsTo = new TreeMap<>();
- }
- public void addFlight(String to, Flight flight) {
- /* This doesn't work */
- /*TreeSet<Flight> flights = flightsTo.computeIfPresent(to, (code, Flights) -> Flights);
- flights.add(flight);
- flights = flightsTo.computeIfAbsent(to, code -> new TreeSet<>());
- flights.add(flight);*/
- /* Initial Scenario */
- flightsTo.computeIfAbsent(to, key -> {
- TreeSet<Flight> set = new TreeSet<>();
- set.add(flight);
- return set;
- });
- /* Running Scenario */
- flightsTo.computeIfPresent(to, (key,value) -> {
- value.add(flight);
- return value;
- });
- }
- @Override
- public String toString() {
- return String.format("%s (%s)\n%s\n%d", name, code, country, passengers);
- }
- }
- class Airports {
- /* Code of Airport -> Airport */
- Map<String, Airport> airports;
- public Airports() {
- this.airports = new HashMap<>();
- }
- public void addAirport(String name, String country, String code, int passengers) {
- //- метод за додавање нов аеродром (име, држава, код и број на патници кои ги превезува годишно)
- Airport airport = new Airport(name, country, code, passengers);
- airports.putIfAbsent(code, airport);
- }
- public void addFlights(String from, String to, int time, int duration) {
- /* - метод за додавање летови
- (код на аеродром за полетување, код на аеродром за слетување,
- време на тргнување во минути поминати од 0:00 часот, времетраење на летот во минути).
- Од аеродром А до аеродром Б може да има повеќе летови.
- */
- /* from & to are codes */
- Flight flight = new Flight(from, to, time, duration);
- airports.get(from).addFlight(to, flight);
- }
- public void showFlightsFromAirport(String code) {
- /*- метод кои ги прикажува сите летови од аеродромот со код code.
- Прво се печати името на аеродромот (формат во пример излезот),
- потоа се печатат сите летови (формат во пример излезот) подредени
- најпрво лексикографски според кодот на аеродромот дестинација,
- а потоа летовите кон тој аеродром според времето на полетување
- (целосно точна имплементација се смета без повикување на sort методи).*/
- Airport airport = airports.get(code);
- System.out.println(airport);
- int index = 1;
- for (String from : airport.flightsTo.keySet()) { // all flights starting from the airport
- for (Flight flight : airport.flightsTo.get(from)) {
- System.out.printf("%d. %s\n", index++, flight);
- }
- }
- }
- public void showDirectFlightsFromTo(String from, String to) {
- /*
- - метод кој ги прикажува сите директни летови од аеродромот со код from до аеродромот со код to.
- */
- TreeSet<Flight> set = new TreeSet<>(Comparator.comparingInt(flight -> flight.time));
- Airport airport = airports.get(from);
- if (airport.flightsTo.get(to) == null) {
- System.out.printf("No flights from %s to %s\n", from, to);
- return;
- }
- airport.flightsTo.get(to).stream()
- .forEach(each -> set.add(each));
- set.stream()
- .forEach(System.out::println);
- }
- public void showDirectFlightsTo(String to) {
- /*
- - метод кои ги прикажува сите директни летови до аеродромот со код to.
- */
- TreeSet<Flight> flightsTo = new TreeSet<>();
- airports.values().stream()
- .filter(each -> each.flightsTo.get(to) != null)
- .forEach(each -> each.flightsTo.get(to).stream()
- .forEach(flight -> flightsTo.add(flight)));
- flightsTo.stream()
- .forEach(System.out::println);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement