Untitled

 avatar
unknown
plain_text
2 years ago
4.7 kB
5
Indexable
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class RideHailing2 {
    public static void main(String[] args) throws ParseException {
        String[] sendOrders = {
                "s_order1,1,2022-02-11 12:00:00, airport1",
                "s_order2,1,2022-02-11 12:30:00, airport1",
                "s_order3,1,2022-02-11 12:10:00, airport1",
                "s_order4,2,2022-02-12 12:30:00, airport2",
                "s_order5,2,2022-02-12 18:27:00, airport2",
                "s_order6,1,2022-02-12 19:30:00, airport2",
                "s_order7,2,2022-02-12 20:15:00, airport2"
        };
        String[] pickupOrders = {
                "p_order1,1,2022-02-11 12:20:00, airport1",
                "p_order2,2,2022-02-11 14:30:00, airport1",
                "p_order3,2,2022-02-12 12:45:00, airport2",
                "p_order4,2,2022-02-12 12:15:00, airport2",
                "p_order5,2,2022-02-12 19:20:00, airport2",
                "p_order6,2,2022-02-12 20:30:00, airport2",
                "p_order7,2,2022-02-12 20:00:00, airport2"
        };

        // parse the input strings and create Order objects
        List<Order> sendOrderList = new ArrayList<>();
        List<Order> pickupOrderList = new ArrayList<>();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        for (String orderStr : sendOrders) {
            String[] orderArr = orderStr.split(",");
            String id = orderArr[0];
            int carType = Integer.parseInt(orderArr[1]);
            Date bookTime = formatter.parse(orderArr[2]);
            String airport = orderArr[3];

            Order order = new Order(id, carType, bookTime, airport);
            sendOrderList.add(order);
        }

        for (String orderStr : pickupOrders) {
            String[] orderArr = orderStr.split(",");
            String id = orderArr[0];
            int carType = Integer.parseInt(orderArr[1]);
            Date bookTime = formatter.parse(orderArr[2]);
            String airport = orderArr[3];

            Order order = new Order(id, carType, bookTime, airport);
            pickupOrderList.add(order);
        }

        // match the send and pickup orders
        Map<String, String> matchedOrders = matchOrders(sendOrderList, pickupOrderList);
        // print the matched orders
        System.out.println("Matched orders:");
        for (Map.Entry<String, String> entry : matchedOrders.entrySet()) {
            System.out.println(entry.getKey() + "->" + entry.getValue());
        }

        // print the single orders
        System.out.println("Single orders:");
        Set<String> singleOrders = new HashSet<>();
        singleOrders.addAll(getSingleOrders(sendOrderList, matchedOrders.keySet()));
        singleOrders.addAll(getSingleOrders(pickupOrderList, new HashSet<>(matchedOrders.values())));
        for (String id : singleOrders) {
            System.out.println(id);
        }
    }

    public static Map<String, String> matchOrders(List<Order> sendOrders, List<Order> pickupOrders) {
        Map<String, String> matchedOrders = new HashMap<>();
        for (Order sendOrder : sendOrders) {
            int minIdleTime = Integer.MAX_VALUE;
            String matchedPickupId = null;
            for (Order pickupOrder : pickupOrders) {
                if (sendOrder.carType == pickupOrder.carType && sendOrder.airport.equals(pickupOrder.airport) &&
                        sendOrder.bookTime.before(pickupOrder.bookTime)) {
                    int idleTime = (int) (pickupOrder.bookTime.getTime() - sendOrder.bookTime.getTime()) / (60 * 1000);
                    if (idleTime < minIdleTime) {
                        minIdleTime = idleTime;
                        matchedPickupId = pickupOrder.id;
                    }
                }
            }
            if (matchedPickupId != null) {
                matchedOrders.put(sendOrder.id, matchedPickupId);
            }
        }

        return matchedOrders;
    }

    public static List<String> getSingleOrders(List<Order> orders, Set<String> matchedIds) {
        List<String> singleOrders = new ArrayList<>();
        for (Order order : orders) {
            if (!matchedIds.contains(order.id)) {
                singleOrders.add(order.id);
            }
        }
        return singleOrders;
    }

    public static class Order {
        String id;
        int carType;
        Date bookTime;
        String airport;

        public Order(String id, int carType, Date bookTime, String airport) {
            this.id = id;
            this.carType = carType;
            this.bookTime = bookTime;
            this.airport = airport;
        }
    }
}

Editor is loading...