Selamat datang di KnK Land. Mari menguasai dunia bersama kami. Disini kalian bisa menemukan ratusan postingan berbahaya dari penulis-penulis kami. Selamat menikmati situs yang hidup ini.

Thursday, September 6, 2018

Kunci Jawaban Soal URI Online Judge No. 2448 - Postman (Bahasa Phyton)

Hai hai semua . Ketemu lagi sama aing, Admin K yang kece juga cemerlang . Tentu saja, masih  di blog kesayangan qta yang penuh dengan keindahan ini, KnK Land. Kali ini aing bakal memposting tentang bahasa pemrograman, lebih tepatnya membuat program. Mulai sekarang, aing akan membuat lebih banyak post bahasa pemrograman Phyton. Yah, kebetulan, aing baru saja belajar Phyton dan sudah mulai membuat beberapa program khususnya program2 yang menjadi jawaban soal2 yang ada di URI Online Judge. Yang belum tau apa itu URI Online Judge, URI Online Judge adalah situs yang berisi soal2 pemrograman beserta penilaiannya. Untuk lebih jelas kalian bisa kunjungi langsung disini untuk login. Oke, langsung saja qta cekidoot dulu .




Kali ini, soal yang aing bakal selesaikan dengan menggunakan bahasa Phyton adalah soal Postman tepatnya soal No. 2448 kategori Ad-Hoc. Soalnya bisa kalian lihat langsung disini. Oh yah, mungkin ada sedikit perbedaan antara jawaban aing dengan jawaban yang seharusnya. Tapi itu tidak masalah, selama tujuan dari program tersebut tercapai. Oh yah, jawaban aing bisa kalian kembangkan kalau mau.

Mungkin kalian belum ngerti soalnya karena pake bahasa inggris. Jadi begini, intinya soal ini menghitung waktu tercepat seorang tukang pos atau postman mengantarkan orderan (surat atau barang) ke rumah-rumah yang ada di suatu kompleks. Rumah-rumah tersebut memiliki nomor dan rumah-rumah tersebut tersusun secara berurutan dari nomor yang paling kecil sampai yang paling besar. Setiap orderan harus diantar sesuai nomor yang tertera pada orderan. Adapun, ada juga aturan lain yakni si tukang pos harus mengirim orderan sesuai urutan orderan tersebut. Jadi, misalkan ada 3 rumah dengan nomor masing-masing 1, 3, 4. Trus, ada 10 surat yang harus dikirim dengan urutan 1, 3, 4, 4, 1, 3, 1, 3, 1, 4. Si tukang pos harus mengikuti urutan pemberian orderan tersebut. Jadi, dia pertama2 harus pergi ke rumah no. 1, lalu no. 3, lalu no. 4 dan memberikan dua surat, lalu balik lagi ke rumah no. 1, ke rumah no. 3 lagi, lalu ke rumah no. 1 lagi, lalu balik lagi ke rumah no. 4. Misalkan saja sekali berpindah dari satu rumah ke rumah lain membutuhkan waktu sebesar satu satuan. Nah, setelah itu dihitunglah waktu totalnya si tukang pos menyelesaikan pekerjaanya. Kira-kira seperti itu. Yah, kalo yu ngerti englisy, silahkan baca saja soalnya di situs aslinya.

Okey langsung saja qta ke kunci jawabannya. Jawaban ini adalah jawaban versi aing. Silahkan dijadikan bahan pembelajaran atau bahkan dikembangkan. Oh yah, bahasa pemrograman yang aing gunakan adalah Phyton 3.

print("""Program tukang pos
Uri No. 2448, yay~!!"""
)

print()

def bacamn(q, ba, bb):
    b = -1
    while (b < ba) or (b > bb):
        try:
            b = int(input(q))
        except ValueError:
            print("Harap Masukkan dengan bener!")
            continue
        else:
            if (b < ba) or (b > bb):
                print("Harap Masukkan dengan bener!")
    return(b)


def emulagi(pek,p,r,r2):
    emu = bacamn(r2 + str(a+1) + " : ", 0, 10**9)
    temu = 0
    for q in ListM:
        if emu == q:
            temu = 1
    if temu == p :
        pek.append(emu)
    else:
        print(r)
        emulagi(pek,p,r,r2)




M = bacamn("Masukkan jumlah rumah : ", 1, 45000)
N = bacamn("Masukkan jumlah orderan : ", 1, 45000)

print()

ListM = []
ListN = []

for a in range(0,M):
    emulagi(ListM,0,"Harap masukkan nomor rumah yang berbeda!","Masukkan nomor rumah ke-")

ListM = sorted(ListM)
print("Nomor rumah yang tersedia : " + str(ListM))
print()

for a in range(0,N):
    emulagi(ListN,1,"Harap masukkan nomor orderan sesuai nomor rumah yang ada!","Masukkan nomor orderan ke-")

print("Urutan Orderan : " + str(ListN))
print()

DictM = {}

for diki in range(0, M):
    DictM[ListM[diki]]= diki + 1

Listbaru = []

for diki in range(0, N):
    Listbaru.append(DictM[ListN[diki]])

jumlah = Listbaru[0] - 1

for rumah in range(1, N):
    jumlah = jumlah + abs(Listbaru[rumah] - Listbaru[rumah - 1])

print("Waktu yang dibutuhkan : " + str(jumlah))



Selesai deh . Fyuh , capek juga ngewarnainnya. Semoga bermanfaat eaa. Kalo ada yang pen ditanyakan mohon tanyakan ke aing di kolom komentar. Semoga dengan sedikit ilmu tentang pemrograman ini bisa membuat kita semua mampu berfikir kreatif, efektif, dan efisien dalam menyelesaikan masalah. Sampai jumpa di postingan selanjutnya. Bye~

Jangan lupa juga
Baca web novel keren, Start Point
Ketahui apa itu The Little Red Book
Ketahui alasan kenapa bayi selalu menangis

No comments:

Post a Comment