class Klasemen:
def __init__(self, daftar_klub):
# Menyimpan total poin setiap klub.
self.poin_klub = {klub: 0 for klub in daftar_klub}
def catatPermainan(self, klubKandang, klubTandang, skor):
if klubKandang not in self.poin_klub or klubTandang not in self.poin_klub:
raise ValueError("Nama klub tidak terdaftar dalam klasemen.")
try:
skor_kandang_str, skor_tandang_str = skor.split(":")
skor_kandang = int(skor_kandang_str)
skor_tandang = int(skor_tandang_str)
except ValueError as exc:
raise ValueError("Format skor harus 'angka:angka'.") from exc
# Tambahkan poin berdasarkan hasil akhir pertandingan.
if skor_kandang > skor_tandang:
self.poin_klub[klubKandang] += 3
elif skor_kandang < skor_tandang:
self.poin_klub[klubTandang] += 3
else:
self.poin_klub[klubKandang] += 1
self.poin_klub[klubTandang] += 1
def cetakKlasemen(self):
# Urutkan dari poin tertinggi, lalu nama klub jika poin sama.
urutan = sorted(
self.poin_klub.items(),
key=lambda item: (-item[1], item[0])
)
return dict(urutan)
def ambilPeringkat(self, nomorPeringkat):
urutan_klub = list(self.cetakKlasemen().keys())
if nomorPeringkat < 1 or nomorPeringkat > len(urutan_klub):
raise IndexError("Nomor peringkat di luar jangkauan.")
return urutan_klub[nomorPeringkat - 1]
if __name__ == "__main__":
klasemen = Klasemen(["Liverpool", "Chelsea", "Arsenal"])
klasemen.catatPermainan("Arsenal", "Liverpool", "2:1")
klasemen.catatPermainan("Arsenal", "Chelsea", "1:2")
klasemen.catatPermainan("Chelsea", "Arsenal", "0:3")
klasemen.catatPermainan("Chelsea", "Liverpool", "3:2")
klasemen.catatPermainan("Liverpool", "Arsenal", "2:2")
klasemen.catatPermainan("Liverpool", "Chelsea", "0:0")
print(klasemen.cetakKlasemen())
print(klasemen.ambilPeringkat(2))
Y2xhc3MgS2xhc2VtZW46CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGFmdGFyX2tsdWIpOgogICAgICAgICMgTWVueWltcGFuIHRvdGFsIHBvaW4gc2V0aWFwIGtsdWIuCiAgICAgICAgc2VsZi5wb2luX2tsdWIgPSB7a2x1YjogMCBmb3Iga2x1YiBpbiBkYWZ0YXJfa2x1Yn0KCiAgICBkZWYgY2F0YXRQZXJtYWluYW4oc2VsZiwga2x1YkthbmRhbmcsIGtsdWJUYW5kYW5nLCBza29yKToKICAgICAgICBpZiBrbHViS2FuZGFuZyBub3QgaW4gc2VsZi5wb2luX2tsdWIgb3Iga2x1YlRhbmRhbmcgbm90IGluIHNlbGYucG9pbl9rbHViOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJOYW1hIGtsdWIgdGlkYWsgdGVyZGFmdGFyIGRhbGFtIGtsYXNlbWVuLiIpCgogICAgICAgIHRyeToKICAgICAgICAgICAgc2tvcl9rYW5kYW5nX3N0ciwgc2tvcl90YW5kYW5nX3N0ciA9IHNrb3Iuc3BsaXQoIjoiKQogICAgICAgICAgICBza29yX2thbmRhbmcgPSBpbnQoc2tvcl9rYW5kYW5nX3N0cikKICAgICAgICAgICAgc2tvcl90YW5kYW5nID0gaW50KHNrb3JfdGFuZGFuZ19zdHIpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXhjOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJGb3JtYXQgc2tvciBoYXJ1cyAnYW5na2E6YW5na2EnLiIpIGZyb20gZXhjCgogICAgICAgICMgVGFtYmFoa2FuIHBvaW4gYmVyZGFzYXJrYW4gaGFzaWwgYWtoaXIgcGVydGFuZGluZ2FuLgogICAgICAgIGlmIHNrb3Jfa2FuZGFuZyA+IHNrb3JfdGFuZGFuZzoKICAgICAgICAgICAgc2VsZi5wb2luX2tsdWJba2x1YkthbmRhbmddICs9IDMKICAgICAgICBlbGlmIHNrb3Jfa2FuZGFuZyA8IHNrb3JfdGFuZGFuZzoKICAgICAgICAgICAgc2VsZi5wb2luX2tsdWJba2x1YlRhbmRhbmddICs9IDMKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnBvaW5fa2x1YltrbHViS2FuZGFuZ10gKz0gMQogICAgICAgICAgICBzZWxmLnBvaW5fa2x1YltrbHViVGFuZGFuZ10gKz0gMQoKICAgIGRlZiBjZXRha0tsYXNlbWVuKHNlbGYpOgogICAgICAgICMgVXJ1dGthbiBkYXJpIHBvaW4gdGVydGluZ2dpLCBsYWx1IG5hbWEga2x1YiBqaWthIHBvaW4gc2FtYS4KICAgICAgICB1cnV0YW4gPSBzb3J0ZWQoCiAgICAgICAgICAgIHNlbGYucG9pbl9rbHViLml0ZW1zKCksCiAgICAgICAgICAgIGtleT1sYW1iZGEgaXRlbTogKC1pdGVtWzFdLCBpdGVtWzBdKQogICAgICAgICkKICAgICAgICByZXR1cm4gZGljdCh1cnV0YW4pCgogICAgZGVmIGFtYmlsUGVyaW5na2F0KHNlbGYsIG5vbW9yUGVyaW5na2F0KToKICAgICAgICB1cnV0YW5fa2x1YiA9IGxpc3Qoc2VsZi5jZXRha0tsYXNlbWVuKCkua2V5cygpKQoKICAgICAgICBpZiBub21vclBlcmluZ2thdCA8IDEgb3Igbm9tb3JQZXJpbmdrYXQgPiBsZW4odXJ1dGFuX2tsdWIpOgogICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKCJOb21vciBwZXJpbmdrYXQgZGkgbHVhciBqYW5na2F1YW4uIikKCiAgICAgICAgcmV0dXJuIHVydXRhbl9rbHViW25vbW9yUGVyaW5na2F0IC0gMV0KCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAga2xhc2VtZW4gPSBLbGFzZW1lbihbIkxpdmVycG9vbCIsICJDaGVsc2VhIiwgIkFyc2VuYWwiXSkKICAgIGtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCJBcnNlbmFsIiwgIkxpdmVycG9vbCIsICIyOjEiKQogICAga2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oIkFyc2VuYWwiLCAiQ2hlbHNlYSIsICIxOjIiKQogICAga2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oIkNoZWxzZWEiLCAiQXJzZW5hbCIsICIwOjMiKQogICAga2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oIkNoZWxzZWEiLCAiTGl2ZXJwb29sIiwgIjM6MiIpCiAgICBrbGFzZW1lbi5jYXRhdFBlcm1haW5hbigiTGl2ZXJwb29sIiwgIkFyc2VuYWwiLCAiMjoyIikKICAgIGtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCJMaXZlcnBvb2wiLCAiQ2hlbHNlYSIsICIwOjAiKQoKICAgIHByaW50KGtsYXNlbWVuLmNldGFrS2xhc2VtZW4oKSkKICAgIHByaW50KGtsYXNlbWVuLmFtYmlsUGVyaW5na2F0KDIpKQo=