import java.util.*;
import java.util.stream.Collectors;
// implementasi kelas "Klasemen"
// jika ingin debug, bisa un-komen print yang di-komen
class Klasemen {
private Map
<String, Integer
> dataKlasemen
;
public Klasemen(List<String> daftarKlub) {
this.dataKlasemen = new HashMap<>();
for (String klub
: daftarKlub
) { this.dataKlasemen.put(klub, 0);
// System.out.println(dataKlasemen);
}
}
// Parsing dulu skornya dengan ":" sebagai parser
String[] skorSplit
= skor.
split(":"); int skorHome
= Integer.
parseInt(skorSplit
[0]); int skorAway
= Integer.
parseInt(skorSplit
[1]);
if (skorHome > skorAway) {
int poinSaatIni = dataKlasemen.get(klubHome);
dataKlasemen.put(klubHome, poinSaatIni + 3);
// System.out.println(dataKlasemen);
} else if (skorAway > skorHome) {
int poinSaatIni = dataKlasemen.get(klubAway);
dataKlasemen.put(klubAway, poinSaatIni + 3);
// System.out.println(dataKlasemen);
} else {
dataKlasemen.put(klubHome, dataKlasemen.get(klubHome) + 1);
dataKlasemen.put(klubAway, dataKlasemen.get(klubAway) + 1);
// System.out.println(dataKlasemen);
}
}
public Map
<String, Integer
> cetakKlasemen
() { return dataKlasemen.entrySet()
.stream()
.collect(Collectors.toMap(
(e1, e2) -> e1,
LinkedHashMap::new
));
}
public String ambilPeringkat
(int rank
) { if (rank <= 0 || rank > dataKlasemen.size()) {
return "Peringkat tidak valid. Mungkin bisa dicoba peringkat 1 sampai " + dataKlasemen.size();
}
List<String> daftarPeringkat = new ArrayList<>(cetakKlasemen().keySet());
return daftarPeringkat.get(rank - 1);
}
}
// Testcase sesuai dengan soal test
public class Main {
public static void main
(String[] args
) { List
<String
> daftarKlub
= Arrays.
asList("Liverpool",
"Chelsea",
"Arsenal");
Klasemen klasemen = new Klasemen(daftarKlub);
klasemen.catatPermainan("Arsenal", "Liverpool", "2:1");
klasemen.catatPermainan("Arsenal", "Chelsea", "1:1");
klasemen.catatPermainan("Chelsea", "Arsenal", "0:3");
klasemen.catatPermainan("Chelsea", "Liverpool", "3:2");
klasemen.catatPermainan("Liverpool", "Arsenal", "2:2");
klasemen.catatPermainan("Liverpool", "Chelsea", "0:0");
System.
out.
println("HASIL TES\n");
Map
<String, Integer
> hasilKlasemen
= klasemen.
cetakKlasemen(); System.
out.
println("Hasil cetakKlasemen():");
// sesuai dengan soal, hasilnya seharusnya {Arsenal=8, Chelsea=5, Liverpool=2}
System.
out.
println(hasilKlasemen
);
System.
out.
println("------------------------------------");
String peringkatDua
= klasemen.
ambilPeringkat(2); System.
out.
println("Hasil ambilPeringkat(2):");
// sesuai dengan soal, hasilnya seharusnya "Chelsea"
System.
out.
println(peringkatDua
); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwoKLy8gaW1wbGVtZW50YXNpIGtlbGFzICJLbGFzZW1lbiIKLy8gamlrYSBpbmdpbiBkZWJ1ZywgYmlzYSB1bi1rb21lbiBwcmludCB5YW5nIGRpLWtvbWVuCmNsYXNzIEtsYXNlbWVuIHsKICAgIHByaXZhdGUgTWFwPFN0cmluZywgSW50ZWdlcj4gZGF0YUtsYXNlbWVuOwoKICAgIHB1YmxpYyBLbGFzZW1lbihMaXN0PFN0cmluZz4gZGFmdGFyS2x1YikgewogICAgICAgIHRoaXMuZGF0YUtsYXNlbWVuID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgIGZvciAoU3RyaW5nIGtsdWIgOiBkYWZ0YXJLbHViKSB7CiAgICAgICAgICAgIHRoaXMuZGF0YUtsYXNlbWVuLnB1dChrbHViLCAwKTsKICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKGRhdGFLbGFzZW1lbik7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyB2b2lkIGNhdGF0UGVybWFpbmFuKFN0cmluZyBrbHViSG9tZSwgU3RyaW5nIGtsdWJBd2F5LCBTdHJpbmcgc2tvcikgewogICAgICAgIC8vIFBhcnNpbmcgZHVsdSBza29ybnlhIGRlbmdhbiAiOiIgc2ViYWdhaSBwYXJzZXIKICAgICAgICBTdHJpbmdbXSBza29yU3BsaXQgPSBza29yLnNwbGl0KCI6Iik7CiAgICAgICAgaW50IHNrb3JIb21lID0gSW50ZWdlci5wYXJzZUludChza29yU3BsaXRbMF0pOwogICAgICAgIGludCBza29yQXdheSA9IEludGVnZXIucGFyc2VJbnQoc2tvclNwbGl0WzFdKTsKCiAgICAgICAgaWYgKHNrb3JIb21lID4gc2tvckF3YXkpIHsKICAgICAgICAgICAgaW50IHBvaW5TYWF0SW5pID0gZGF0YUtsYXNlbWVuLmdldChrbHViSG9tZSk7CiAgICAgICAgICAgIGRhdGFLbGFzZW1lbi5wdXQoa2x1YkhvbWUsIHBvaW5TYWF0SW5pICsgMyk7CiAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbihkYXRhS2xhc2VtZW4pOwogICAgICAgIH0gZWxzZSBpZiAoc2tvckF3YXkgPiBza29ySG9tZSkgewogICAgICAgICAgICBpbnQgcG9pblNhYXRJbmkgPSBkYXRhS2xhc2VtZW4uZ2V0KGtsdWJBd2F5KTsKICAgICAgICAgICAgZGF0YUtsYXNlbWVuLnB1dChrbHViQXdheSwgcG9pblNhYXRJbmkgKyAzKTsKICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKGRhdGFLbGFzZW1lbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGF0YUtsYXNlbWVuLnB1dChrbHViSG9tZSwgZGF0YUtsYXNlbWVuLmdldChrbHViSG9tZSkgKyAxKTsKICAgICAgICAgICAgZGF0YUtsYXNlbWVuLnB1dChrbHViQXdheSwgZGF0YUtsYXNlbWVuLmdldChrbHViQXdheSkgKyAxKTsKICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKGRhdGFLbGFzZW1lbik7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBjZXRha0tsYXNlbWVuKCkgewogICAgICAgIHJldHVybiBkYXRhS2xhc2VtZW4uZW50cnlTZXQoKQogICAgICAgICAgICAuc3RyZWFtKCkKICAgICAgICAgICAgLnNvcnRlZChNYXAuRW50cnkuPFN0cmluZywgSW50ZWdlcj5jb21wYXJpbmdCeVZhbHVlKCkucmV2ZXJzZWQoKSkKICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy50b01hcCgKICAgICAgICAgICAgICAgIE1hcC5FbnRyeTo6Z2V0S2V5LAogICAgICAgICAgICAgICAgTWFwLkVudHJ5OjpnZXRWYWx1ZSwKICAgICAgICAgICAgICAgIChlMSwgZTIpIC0+IGUxLAogICAgICAgICAgICAgICAgTGlua2VkSGFzaE1hcDo6bmV3CiAgICAgICAgICAgICkpOwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgYW1iaWxQZXJpbmdrYXQoaW50IHJhbmspIHsKICAgICAgICBpZiAocmFuayA8PSAwIHx8IHJhbmsgPiBkYXRhS2xhc2VtZW4uc2l6ZSgpKSB7CiAgICAgICAgICAgIHJldHVybiAiUGVyaW5na2F0IHRpZGFrIHZhbGlkLiBNdW5na2luIGJpc2EgZGljb2JhIHBlcmluZ2thdCAxIHNhbXBhaSAiICsgZGF0YUtsYXNlbWVuLnNpemUoKTsKICAgICAgICB9CiAgICAgICAgTGlzdDxTdHJpbmc+IGRhZnRhclBlcmluZ2thdCA9IG5ldyBBcnJheUxpc3Q8PihjZXRha0tsYXNlbWVuKCkua2V5U2V0KCkpOwogICAgICAgIHJldHVybiBkYWZ0YXJQZXJpbmdrYXQuZ2V0KHJhbmsgLSAxKTsKICAgIH0KfQoKLy8gVGVzdGNhc2Ugc2VzdWFpIGRlbmdhbiBzb2FsIHRlc3QKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIExpc3Q8U3RyaW5nPiBkYWZ0YXJLbHViID0gQXJyYXlzLmFzTGlzdCgiTGl2ZXJwb29sIiwgIkNoZWxzZWEiLCAiQXJzZW5hbCIpOwoKICAgICAgICBLbGFzZW1lbiBrbGFzZW1lbiA9IG5ldyBLbGFzZW1lbihkYWZ0YXJLbHViKTsKCiAgICAgICAga2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oIkFyc2VuYWwiLCAiTGl2ZXJwb29sIiwgIjI6MSIpOwogICAgICAgIGtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCJBcnNlbmFsIiwgIkNoZWxzZWEiLCAiMToxIik7CiAgICAgICAga2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oIkNoZWxzZWEiLCAiQXJzZW5hbCIsICIwOjMiKTsKICAgICAgICBrbGFzZW1lbi5jYXRhdFBlcm1haW5hbigiQ2hlbHNlYSIsICJMaXZlcnBvb2wiLCAiMzoyIik7CiAgICAgICAga2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oIkxpdmVycG9vbCIsICJBcnNlbmFsIiwgIjI6MiIpOwogICAgICAgIGtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCJMaXZlcnBvb2wiLCAiQ2hlbHNlYSIsICIwOjAiKTsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIQVNJTCBURVNcbiIpOwoKICAgICAgICBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBoYXNpbEtsYXNlbWVuID0ga2xhc2VtZW4uY2V0YWtLbGFzZW1lbigpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFzaWwgY2V0YWtLbGFzZW1lbigpOiIpOwogICAgICAgIAogICAgICAgIC8vIHNlc3VhaSBkZW5nYW4gc29hbCwgaGFzaWxueWEgc2VoYXJ1c255YSB7QXJzZW5hbD04LCBDaGVsc2VhPTUsIExpdmVycG9vbD0yfQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoYXNpbEtsYXNlbWVuKTsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKCiAgICAgICAgU3RyaW5nIHBlcmluZ2thdER1YSA9IGtsYXNlbWVuLmFtYmlsUGVyaW5na2F0KDIpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFzaWwgYW1iaWxQZXJpbmdrYXQoMik6Iik7CiAgICAgICAgCiAgICAgICAgLy8gc2VzdWFpIGRlbmdhbiBzb2FsLCBoYXNpbG55YSBzZWhhcnVzbnlhICJDaGVsc2VhIgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwZXJpbmdrYXREdWEpOwogICAgfQp9