Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import datetime
- def permutation(lst):
- #fungsi permutasi digunakan untuk menghasilkan list yang berisi semua kemungkinan permutasi dari keempat angka.
- #fungsi ini diimplementasikan secara rekursif
- if len(lst) == 0:
- return []
- if len(lst) == 1:
- return [lst]
- l = []
- for i in range(len(lst)):
- m = lst[i]
- remLst = lst[:i] + lst[i+1:]
- for p in permutation(remLst):
- l.append([m] + p)
- return l
- def searchsol(arr,idx,query) :
- #fungsi searchsol berguna mencari apakah suatu solusi sudah ada atau tidak dalam sebuah array
- if idx!=0 :
- i=0
- while (i<idx-1 and arr[i]!=query) :
- i=i+1
- return arr[i]==query
- else :
- return False
- # PROGRAM UTAMA
- # bagian I
- # meminta input dan persiapan variabel
- print("Masukkan 4 angka dengan spasi")
- fil = open("kombinasi.txt", "w")
- c = input().split(" ")
- b = ["+","-","*","/"]
- n = 24
- m = 4
- numbcoll = [[""] * m for i in range(n)]
- temp = ""
- temp1=""
- temp2=""
- temp3=""
- temp4=""
- count = 0
- #untuk menghitung waktu maka akan di print waktu di awal dan akhir
- print(datetime.datetime.now().time())
- # bagian II
- # enumerasi
- for p in permutation(c) :
- # perulangan ini berguna untuk menghasilkan permutasi dan disimpan dalam numbcoll
- numbcoll[count] = p
- count = count + 1
- for i in range(24):
- #perulangan ini berguna untuk menghasilkan kombinasi yang mungkin untuk format kurung "(w+(x+y))+z"
- temp1=temp
- temp = temp+"("+numbcoll[i][0]
- for y in range(4):
- temp2 = temp
- temp = temp+b[y]
- temp = temp+"("+numbcoll[i][1]
- for a in range(4) :
- temp3 = temp
- temp=temp+b[a]
- temp = temp+numbcoll[i][2]+"))"
- for e in range(4) :
- temp4 = temp
- temp=temp+b[e]
- temp = temp+numbcoll[i][3]
- fil.write(temp)
- fil.write("\n")
- temp= temp4
- temp=temp3
- temp=temp2
- temp = temp1
- for i in range(24):
- #perulangan ini berguna untuk menghasilkan kombinasi yang mungkin untuk format kurung "((w+x)+y)+z" lalu menuliskannya kedalam sebuah file bernama kombinasi.txt
- temp1 = temp
- temp = temp+"(("+numbcoll[i][0]
- for y in range(4):
- temp2 = temp
- temp = temp+b[y]
- temp = temp+numbcoll[i][1]+")"
- for a in range(4) :
- temp3 = temp
- temp=temp+b[a]
- temp = temp+numbcoll[i][2]+")"
- for e in range(4) :
- temp4 = temp
- temp=temp+b[e]
- temp = temp+numbcoll[i][3]
- fil.write(temp)
- fil.write("\n")
- temp= temp4
- temp=temp3
- temp=temp2
- temp = temp1
- for i in range(24):
- #perulangan ini berguna untuk menghasilkan kombinasi yang mungkin untuk format kurung "(w+x)+(y+z)" lalu menuliskannya kedalam sebuah file bernama kombinasi.txt
- temp1 = temp
- temp = temp+"("+numbcoll[i][0]
- for y in range(4):
- temp2 = temp
- temp = temp+b[y]
- temp = temp+numbcoll[i][1]+")"
- for a in range(4) :
- temp3 = temp
- temp=temp+b[a]
- temp = temp+"("+numbcoll[i][2]
- for e in range(4) :
- temp4 = temp
- temp=temp+b[e]
- temp = temp+numbcoll[i][3]+")"
- fil.write(temp)
- fil.write("\n")
- temp= temp4
- temp=temp3
- temp=temp2
- temp = temp1
- for i in range(24):
- #perulangan ini berguna untuk menghasilkan kombinasi yang mungkin untuk format kurung "w+((x+y)+z)" lalu menuliskannya kedalam sebuah file bernama kombinasi.txt
- temp1 = temp
- temp = temp+numbcoll[i][0]
- for y in range(4):
- temp2 = temp
- temp = temp+b[y]
- temp = temp+"(("+numbcoll[i][1]
- for a in range(4) :
- temp3 = temp
- temp=temp+b[a]
- temp = temp+numbcoll[i][2]+")"
- for e in range(4) :
- temp4 = temp
- temp=temp+b[e]
- temp = temp+numbcoll[i][3]+")"
- fil.write(temp)
- fil.write("\n")
- temp= temp4
- temp=temp3
- temp=temp2
- temp = temp1
- fil.close()
- # bagian III
- # evaluasi
- fil = open("kombinasi.txt", "r")
- count=0
- hasil=[]
- for x in fil:
- # perulangan ini berguna untuk mencari persamaan mana saja yang memenuhi ketentuan. dan menyimpannya kedalam sebuah array. solusi yang dicatat unik secara harfiah.
- try:
- eval(x)
- if eval(x)==24 :
- if not(searchsol(hasil,count,x)) :
- count=count+1
- hasil.append(x)
- except ZeroDivisionError:
- count=count
- # bagian IV
- # output
- lala = open("hasil.txt","w")
- for x in range(0,count) :
- lala.write(hasil[x])
- fil.close()
- lala.write("ada ")
- lala.write(str(count))
- lala.write(" solusi")
- lala.close()
- print(datetime.datetime.now().time())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement