Buatlah program (Python/C++) yang memenuhi spesifikasi berikut ini. Menerima INPUT: 1. Kumpulan beberapa angka satuan 2. Banyak digit bilangan bulat yang akan dibentuk dari angka-angka satuan dari input. 3. Kriteria batas (lebih dari sebuah bilangan, atau kurang dari sebuah bilangan) sebanyak 1 kriteria saja. Menghasilkan OUTPUT: 1. Banyaknya bilangan bulat yang dapat dibentuk dari angka-angka yang berbeda (dari angka-angka satuan yang di-input-kan) sesuai kriteria batas. 2. Daftar bilangan-bilangan bulat yang dapat dibentuk. _______________ Mohon bantuannya.. terima kasih.
def parse_digit(kumpulan_digit: str) -> str: res = ''.join(n for n in kumpulan_digit if n.isdigit()) res = ''.join(list(set(map(str, res)))) return res
def ciptakan_bilangan(kumpulan_digit: str, n: int, kriteria: str) -> list: dig = parse_digit(kumpulan_digit) lst = [] for x in list(permutations(dig, n)): i = int(''.join(x)) if eval(f'{i} {kriteria}'): lst.append(i) lst.sort() return lst
### Program Utama if __name__ == '__main__': digit = input('\nDigit yang bisa digunakan: ').strip() n = int(input('Banyak digit bilangan yang dibentuk: ')) kriteria = input('Kriteria (dimulai dengan "<" atau ">"): ').strip() l = ciptakan_bilangan(digit, n, kriteria) print('===========================') print(f'Banyak bilangan {n}-digit {kriteria} yang dapat dibentuk = {len(l)}.') print(f'Bilangan-bilangan tersebut adalah: ') print(', '.join(str(x) for x in l)) ### Akhir Program Utama ________________
Pembahasan
Untuk persoalan ini, karena tidak ada batasan mengenai penggunaan fungsi/modul, maka kita dapat memanfaatkan modul "itertools" pada Python. Dari modul itertools, kita gunakan fungsi permutations(a, b), yang menghasilkan kumpulan hasil permutasi dari karakter individual pada string a (bukan hanya angka) dan berbeda, sepanjang b karakter.
Silahkan cermati fungsi ciptakan_bilangan() pada program di atas. Saya rasa algoritmenya tidak sulit.
Contoh Hasil Eksekusi Program
Diberikan 3 contoh kasus. Silahkan mencocokkan dengan gambar hasil eksekusi.
Kasus 1
Digit yang dapat digunakan: 0 hingga 9.
Banyak digit bilangan yang dibentuk: 3 (bilangan ratusan)
Kriteria: > 500
Perhitungan matematis:
Posisi ratusan: 5 cara
Posisi puluhan: 9 cara
Posisi satuan: 8 cara
⇒ Banyak bilangan 3-digit yang lebih dari 500 yang dapat dibentuk dari digit/angka 0 hingga 9 adalah: 5 × 9 × 8 = 40 × 9 = 360 bilangan.
Kasus 2
Digit yang dapat digunakan: 2, 3, 5, 7, 8, 9.
Banyak digit bilangan yang dibentuk: 2 (bilangan puluhan)
Kriteria: > 23
Perhitungan matematis:
Jika posisi puluhan diisi angka 2, maka banyaknya cara = 4 cara.
Selain itu: Posisi puluhan: 5 cara Posisi satuan: 5 cara
⇒ Banyak bilangan 2-digit yang lebih dari 23 yang dapat dibentuk dari digit/angka 2, 3, 5, 7, 8, dan 9. adalah: 4 + 5×5 = 29 bilangan.
Kasus 3
Digit yang dapat digunakan: 2, 5, 6, 7, 8, 9.
Banyak digit bilangan yang dibentuk: 4 (bilangan puluhan)
Kriteria: > 5500
Perhitungan matematis:
Posisi ribuan tidak dapat diisi angka 2.
Jika posisi ribuan diisi angka 5, maka: Posisi ratusan: 4 cara Posisi puluhan: 4 cara Posisi satuan: 3 cara ⇒ Subtotal: 48 cara
Selain itu: Posisi ribuan: 4 cara Posisi ratusan: 5 cara Posisi puluhan: 4 cara Posisi satuan: 3 cara ⇒ Subtotal: 240 cara
⇒ Banyak bilangan 4-digit yang lebih dari 5500 yang dapat dibentuk dari digit/angka 2, 5, 6, 7, 8, dan 9. adalah: 48 + 240 = 288 bilangan.
Kode Program (Python)
from itertools import permutations
def parse_digit(kumpulan_digit: str) -> str:
res = ''.join(n for n in kumpulan_digit if n.isdigit())
res = ''.join(list(set(map(str, res))))
return res
def ciptakan_bilangan(kumpulan_digit: str, n: int, kriteria: str) -> list:
dig = parse_digit(kumpulan_digit)
lst = []
for x in list(permutations(dig, n)):
i = int(''.join(x))
if eval(f'{i} {kriteria}'):
lst.append(i)
lst.sort()
return lst
### Program Utama
if __name__ == '__main__':
digit = input('\nDigit yang bisa digunakan: ').strip()
n = int(input('Banyak digit bilangan yang dibentuk: '))
kriteria = input('Kriteria (dimulai dengan "<" atau ">"): ').strip()
l = ciptakan_bilangan(digit, n, kriteria)
print('===========================')
print(f'Banyak bilangan {n}-digit {kriteria} yang dapat dibentuk = {len(l)}.')
print(f'Bilangan-bilangan tersebut adalah: ')
print(', '.join(str(x) for x in l))
### Akhir Program Utama
________________
Pembahasan
Untuk persoalan ini, karena tidak ada batasan mengenai penggunaan fungsi/modul, maka kita dapat memanfaatkan modul "itertools" pada Python. Dari modul itertools, kita gunakan fungsi permutations(a, b), yang menghasilkan kumpulan hasil permutasi dari karakter individual pada string a (bukan hanya angka) dan berbeda, sepanjang b karakter.
Silahkan cermati fungsi ciptakan_bilangan() pada program di atas. Saya rasa algoritmenya tidak sulit.
Contoh Hasil Eksekusi Program
Diberikan 3 contoh kasus. Silahkan mencocokkan dengan gambar hasil eksekusi.
Kasus 1
Perhitungan matematis:
5 × 9 × 8 = 40 × 9 = 360 bilangan.
Kasus 2
Perhitungan matematis:
Posisi puluhan: 5 cara
Posisi satuan: 5 cara
4 + 5×5 = 29 bilangan.
Kasus 3
Perhitungan matematis:
Posisi ratusan: 4 cara
Posisi puluhan: 4 cara
Posisi satuan: 3 cara
⇒ Subtotal: 48 cara
Posisi ribuan: 4 cara
Posisi ratusan: 5 cara
Posisi puluhan: 4 cara
Posisi satuan: 3 cara
⇒ Subtotal: 240 cara
48 + 240 = 288 bilangan.