def hitungNomorBit(angka, nomorBit):
# Cek angka harus positif
if angka < 0:
return None
# Khusus buat angka 0, langsung cek
if angka == 0:
if nomorBit == 0:
return 1
else:
return None
# Konversi ke biner manual, menggunakan pembagian
biner = ""
temp_angka = angka
while temp_angka > 0:
sisa = temp_angka % 2
biner = str(sisa) + biner # tambahin di depan
temp_angka = temp_angka // 2
# Hitung berapa kali bit yang dicari muncul
jumlah = 0
bit_dicari = str(nomorBit)
for bit in biner:
if bit == bit_dicari:
jumlah += 1
# Kalo nggak ada sama sekali, maka akan mebalikan None
if jumlah == 0:
return None
return jumlah
def tampilkanProses(angka):
# Buat nampilin proses konversi (biar keliatan prosesnya)
print(f"\n=== PROSES KONVERSI {angka} KE BINER ===")
if angka == 0:
print("Angka 0 dalam biner: 0")
return "0"
temp_angka = angka
biner = ""
langkah = 1
print(f"Angka awal: {angka}")
print("Proses pembagian dengan 2:")
while temp_angka > 0:
sisa = temp_angka % 2
bagi = temp_angka // 2
print(f"Langkah {langkah}: {temp_angka} ÷ 2 = {bagi}, sisa = {sisa}")
biner = str(sisa) + biner
temp_angka = bagi
langkah += 1
print(f"Hasil biner: {biner}")
return biner
# Contoh testing
if __name__ == "__main__":
print("=== TEST CASE DARI SOAL ===")
angka_test = 13
# Liat proses konversinya
biner_result = tampilkanProses(angka_test)
print(f"\nAngka {angka_test} dalam biner: {biner_result}")
# Coba hitung bit
print(f"\nhitungNomorBit({angka_test}, 0) = {hitungNomorBit(angka_test, 0)}")
print(f"hitungNomorBit({angka_test}, 1) = {hitungNomorBit(angka_test, 1)}")
print(f"hitungNomorBit({angka_test}, 2) = {hitungNomorBit(angka_test, 2)}")
print("\n=== TEST CASE TAMBAHAN ===")
test_cases = [
(7, 0),
(7, 1),
(8, 0),
(8, 1),
(15, 0),
(15, 1),
(0, 0),
(0, 1),
]
for angka, bit in test_cases:
biner = tampilkanProses(angka)
hasil = hitungNomorBit(angka, bit)
print(f"hitungNomorBit({angka}, {bit}) = {hasil}")
print(f"Penjelasan: Angka {angka} = {biner} (biner), bit {bit} muncul {hasil if hasil else 0} kali\n")
ZGVmIGhpdHVuZ05vbW9yQml0KGFuZ2thLCBub21vckJpdCk6CiAgICAjIENlayBhbmdrYSBoYXJ1cyBwb3NpdGlmCiAgICBpZiBhbmdrYSA8IDA6CiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICAjIEtodXN1cyBidWF0IGFuZ2thIDAsIGxhbmdzdW5nIGNlawogICAgaWYgYW5na2EgPT0gMDoKICAgICAgICBpZiBub21vckJpdCA9PSAwOgogICAgICAgICAgICByZXR1cm4gMQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgIyBLb252ZXJzaSBrZSBiaW5lciBtYW51YWwsIG1lbmdndW5ha2FuIHBlbWJhZ2lhbgogICAgYmluZXIgPSAiIgogICAgdGVtcF9hbmdrYSA9IGFuZ2thCgogICAgd2hpbGUgdGVtcF9hbmdrYSA+IDA6CiAgICAgICAgc2lzYSA9IHRlbXBfYW5na2EgJSAyCiAgICAgICAgYmluZXIgPSBzdHIoc2lzYSkgKyBiaW5lciAgIyB0YW1iYWhpbiBkaSBkZXBhbgogICAgICAgIHRlbXBfYW5na2EgPSB0ZW1wX2FuZ2thIC8vIDIKCiAgICAjIEhpdHVuZyBiZXJhcGEga2FsaSBiaXQgeWFuZyBkaWNhcmkgbXVuY3VsCiAgICBqdW1sYWggPSAwCiAgICBiaXRfZGljYXJpID0gc3RyKG5vbW9yQml0KQoKICAgIGZvciBiaXQgaW4gYmluZXI6CiAgICAgICAgaWYgYml0ID09IGJpdF9kaWNhcmk6CiAgICAgICAgICAgIGp1bWxhaCArPSAxCgogICAgIyBLYWxvIG5nZ2FrIGFkYSBzYW1hIHNla2FsaSwgbWFrYSBha2FuIG1lYmFsaWthbiBOb25lCiAgICBpZiBqdW1sYWggPT0gMDoKICAgICAgICByZXR1cm4gTm9uZQoKICAgIHJldHVybiBqdW1sYWgKCmRlZiB0YW1waWxrYW5Qcm9zZXMoYW5na2EpOgogICAgIyBCdWF0IG5hbXBpbGluIHByb3NlcyBrb252ZXJzaSAoYmlhciBrZWxpYXRhbiBwcm9zZXNueWEpCiAgICBwcmludChmIlxuPT09IFBST1NFUyBLT05WRVJTSSB7YW5na2F9IEtFIEJJTkVSID09PSIpCgogICAgaWYgYW5na2EgPT0gMDoKICAgICAgICBwcmludCgiQW5na2EgMCBkYWxhbSBiaW5lcjogMCIpCiAgICAgICAgcmV0dXJuICIwIgoKICAgIHRlbXBfYW5na2EgPSBhbmdrYQogICAgYmluZXIgPSAiIgogICAgbGFuZ2thaCA9IDEKCiAgICBwcmludChmIkFuZ2thIGF3YWw6IHthbmdrYX0iKQogICAgcHJpbnQoIlByb3NlcyBwZW1iYWdpYW4gZGVuZ2FuIDI6IikKCiAgICB3aGlsZSB0ZW1wX2FuZ2thID4gMDoKICAgICAgICBzaXNhID0gdGVtcF9hbmdrYSAlIDIKICAgICAgICBiYWdpID0gdGVtcF9hbmdrYSAvLyAyCiAgICAgICAgcHJpbnQoZiJMYW5na2FoIHtsYW5na2FofToge3RlbXBfYW5na2F9IMO3IDIgPSB7YmFnaX0sIHNpc2EgPSB7c2lzYX0iKQogICAgICAgIGJpbmVyID0gc3RyKHNpc2EpICsgYmluZXIKICAgICAgICB0ZW1wX2FuZ2thID0gYmFnaQogICAgICAgIGxhbmdrYWggKz0gMQoKICAgIHByaW50KGYiSGFzaWwgYmluZXI6IHtiaW5lcn0iKQogICAgcmV0dXJuIGJpbmVyCgojIENvbnRvaCB0ZXN0aW5nCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwcmludCgiPT09IFRFU1QgQ0FTRSBEQVJJIFNPQUwgPT09IikKICAgIGFuZ2thX3Rlc3QgPSAxMwoKICAgICMgTGlhdCBwcm9zZXMga29udmVyc2lueWEKICAgIGJpbmVyX3Jlc3VsdCA9IHRhbXBpbGthblByb3NlcyhhbmdrYV90ZXN0KQoKICAgIHByaW50KGYiXG5BbmdrYSB7YW5na2FfdGVzdH0gZGFsYW0gYmluZXI6IHtiaW5lcl9yZXN1bHR9IikKCiAgICAjIENvYmEgaGl0dW5nIGJpdAogICAgcHJpbnQoZiJcbmhpdHVuZ05vbW9yQml0KHthbmdrYV90ZXN0fSwgMCkgPSB7aGl0dW5nTm9tb3JCaXQoYW5na2FfdGVzdCwgMCl9IikKICAgIHByaW50KGYiaGl0dW5nTm9tb3JCaXQoe2FuZ2thX3Rlc3R9LCAxKSA9IHtoaXR1bmdOb21vckJpdChhbmdrYV90ZXN0LCAxKX0iKQogICAgcHJpbnQoZiJoaXR1bmdOb21vckJpdCh7YW5na2FfdGVzdH0sIDIpID0ge2hpdHVuZ05vbW9yQml0KGFuZ2thX3Rlc3QsIDIpfSIpCgogICAgcHJpbnQoIlxuPT09IFRFU1QgQ0FTRSBUQU1CQUhBTiA9PT0iKQoKICAgIHRlc3RfY2FzZXMgPSBbCiAgICAgICAgKDcsIDApLAogICAgICAgICg3LCAxKSwKICAgICAgICAoOCwgMCksCiAgICAgICAgKDgsIDEpLAogICAgICAgICgxNSwgMCksCiAgICAgICAgKDE1LCAxKSwKICAgICAgICAoMCwgMCksCiAgICAgICAgKDAsIDEpLAogICAgXQoKICAgIGZvciBhbmdrYSwgYml0IGluIHRlc3RfY2FzZXM6CiAgICAgICAgYmluZXIgPSB0YW1waWxrYW5Qcm9zZXMoYW5na2EpCiAgICAgICAgaGFzaWwgPSBoaXR1bmdOb21vckJpdChhbmdrYSwgYml0KQogICAgICAgIHByaW50KGYiaGl0dW5nTm9tb3JCaXQoe2FuZ2thfSwge2JpdH0pID0ge2hhc2lsfSIpCiAgICAgICAgcHJpbnQoZiJQZW5qZWxhc2FuOiBBbmdrYSB7YW5na2F9ID0ge2JpbmVyfSAoYmluZXIpLCBiaXQge2JpdH0gbXVuY3VsIHtoYXNpbCBpZiBoYXNpbCBlbHNlIDB9IGthbGlcbiIpCg==
=== TEST CASE DARI SOAL ===
=== PROSES KONVERSI 13 KE BINER ===
Angka awal: 13
Proses pembagian dengan 2:
Langkah 1: 13 ÷ 2 = 6, sisa = 1
Langkah 2: 6 ÷ 2 = 3, sisa = 0
Langkah 3: 3 ÷ 2 = 1, sisa = 1
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1101
Angka 13 dalam biner: 1101
hitungNomorBit(13, 0) = 1
hitungNomorBit(13, 1) = 3
hitungNomorBit(13, 2) = None
=== TEST CASE TAMBAHAN ===
=== PROSES KONVERSI 7 KE BINER ===
Angka awal: 7
Proses pembagian dengan 2:
Langkah 1: 7 ÷ 2 = 3, sisa = 1
Langkah 2: 3 ÷ 2 = 1, sisa = 1
Langkah 3: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 111
hitungNomorBit(7, 0) = None
Penjelasan: Angka 7 = 111 (biner), bit 0 muncul 0 kali
=== PROSES KONVERSI 7 KE BINER ===
Angka awal: 7
Proses pembagian dengan 2:
Langkah 1: 7 ÷ 2 = 3, sisa = 1
Langkah 2: 3 ÷ 2 = 1, sisa = 1
Langkah 3: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 111
hitungNomorBit(7, 1) = 3
Penjelasan: Angka 7 = 111 (biner), bit 1 muncul 3 kali
=== PROSES KONVERSI 8 KE BINER ===
Angka awal: 8
Proses pembagian dengan 2:
Langkah 1: 8 ÷ 2 = 4, sisa = 0
Langkah 2: 4 ÷ 2 = 2, sisa = 0
Langkah 3: 2 ÷ 2 = 1, sisa = 0
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1000
hitungNomorBit(8, 0) = 3
Penjelasan: Angka 8 = 1000 (biner), bit 0 muncul 3 kali
=== PROSES KONVERSI 8 KE BINER ===
Angka awal: 8
Proses pembagian dengan 2:
Langkah 1: 8 ÷ 2 = 4, sisa = 0
Langkah 2: 4 ÷ 2 = 2, sisa = 0
Langkah 3: 2 ÷ 2 = 1, sisa = 0
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1000
hitungNomorBit(8, 1) = 1
Penjelasan: Angka 8 = 1000 (biner), bit 1 muncul 1 kali
=== PROSES KONVERSI 15 KE BINER ===
Angka awal: 15
Proses pembagian dengan 2:
Langkah 1: 15 ÷ 2 = 7, sisa = 1
Langkah 2: 7 ÷ 2 = 3, sisa = 1
Langkah 3: 3 ÷ 2 = 1, sisa = 1
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1111
hitungNomorBit(15, 0) = None
Penjelasan: Angka 15 = 1111 (biner), bit 0 muncul 0 kali
=== PROSES KONVERSI 15 KE BINER ===
Angka awal: 15
Proses pembagian dengan 2:
Langkah 1: 15 ÷ 2 = 7, sisa = 1
Langkah 2: 7 ÷ 2 = 3, sisa = 1
Langkah 3: 3 ÷ 2 = 1, sisa = 1
Langkah 4: 1 ÷ 2 = 0, sisa = 1
Hasil biner: 1111
hitungNomorBit(15, 1) = 4
Penjelasan: Angka 15 = 1111 (biner), bit 1 muncul 4 kali
=== PROSES KONVERSI 0 KE BINER ===
Angka 0 dalam biner: 0
hitungNomorBit(0, 0) = 1
Penjelasan: Angka 0 = 0 (biner), bit 0 muncul 1 kali
=== PROSES KONVERSI 0 KE BINER ===
Angka 0 dalam biner: 0
hitungNomorBit(0, 1) = None
Penjelasan: Angka 0 = 0 (biner), bit 1 muncul 0 kali