public class MediasiTerdekat {

    // Deklarasi langsung proyek dan versi json-lib yang diminta transitif.
    private static final String[][] DEKLARASI = {
        {"layanan-pembayaran", "1.4.2", "1.0.0"},   // dideklarasikan lebih dulu
        {"laporan-penjualan",  "2.1.0", "2.0.0"}
    };

    public static void main(String[] args) {
        System.out.println("pohon dependency:");
        System.out.println("  aplikasi-gudang");
        for (String[] d : DEKLARASI) {
            System.out.println("    +-- " + d[0] + ":" + d[1]);
            System.out.println("          +-- json-lib:" + d[2]);
        }
        System.out.println();
        System.out.println("konflik: json-lib diminta dalam dua versi");

        // Maven: nearest-wins; kedalaman sama -> deklarasi pertama menang.
        System.out.println();
        System.out.println("Maven (nearest-wins):");
        System.out.println("  kedalaman json-lib sama (2) pada kedua jalur");
        System.out.println("  pemenang: json-lib:" + DEKLARASI[0][2]
                + " (dideklarasikan lebih dulu)");

        // Gradle: versi tertinggi menang.
        String gradle = bandingkan(DEKLARASI[0][2], DEKLARASI[1][2]) >= 0
                ? DEKLARASI[0][2] : DEKLARASI[1][2];
        System.out.println();
        System.out.println("Gradle (versi tertinggi):");
        System.out.println("  pemenang: json-lib:" + gradle);
    }

    /** Bandingkan dua versi numerik per komponen, kiri ke kanan. */
    private static int bandingkan(String a, String b) {
        String[] pa = a.split("\\.");
        String[] pb = b.split("\\.");
        for (int i = 0; i < Math.min(pa.length, pb.length); i++) {
            int hasil = Integer.compare(Integer.parseInt(pa[i]), Integer.parseInt(pb[i]));
            if (hasil != 0) {
                return hasil;
            }
        }
        return 0;
    }
}
