Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.30 KB | None | 0 0
  1. import datetime
  2. def permutation(lst):
  3. #fungsi permutasi digunakan untuk menghasilkan list yang berisi semua kemungkinan permutasi dari keempat angka.
  4. #fungsi ini diimplementasikan secara rekursif
  5.     if len(lst) == 0:
  6.         return []
  7.     if len(lst) == 1:
  8.         return [lst]
  9.     l = []
  10.     for i in range(len(lst)):
  11.        m = lst[i]
  12.        remLst = lst[:i] + lst[i+1:]
  13.        for p in permutation(remLst):
  14.            l.append([m] + p)
  15.     return l
  16.    
  17. def searchsol(arr,idx,query) :
  18. #fungsi searchsol berguna mencari apakah suatu solusi sudah ada atau tidak dalam sebuah array
  19.     if idx!=0 :
  20.         i=0
  21.         while (i<idx-1 and arr[i]!=query) :
  22.             i=i+1
  23.         return arr[i]==query
  24.     else :
  25.         return False
  26.  
  27. # PROGRAM UTAMA
  28. # bagian I
  29. # meminta input dan persiapan variabel
  30. print("Masukkan 4 angka dengan spasi")
  31. fil = open("kombinasi.txt", "w")
  32. c = input().split(" ")
  33. b = ["+","-","*","/"]
  34. n = 24
  35. m = 4
  36. numbcoll = [[""] * m for i in range(n)]
  37. temp = ""
  38. temp1=""
  39. temp2=""
  40. temp3=""
  41. temp4=""
  42. count = 0
  43. #untuk menghitung waktu maka akan di print waktu di awal dan akhir
  44. print(datetime.datetime.now().time())
  45.  
  46. # bagian II
  47. # enumerasi
  48. for p in permutation(c) :
  49. # perulangan ini berguna untuk menghasilkan permutasi dan disimpan dalam numbcoll
  50.     numbcoll[count] = p
  51.     count = count + 1
  52. for i in range(24):
  53. #perulangan ini berguna untuk menghasilkan kombinasi yang mungkin untuk format kurung "(w+(x+y))+z"
  54.     temp1=temp
  55.     temp = temp+"("+numbcoll[i][0]
  56.     for y in range(4):
  57.         temp2 = temp
  58.         temp = temp+b[y]
  59.         temp = temp+"("+numbcoll[i][1]
  60.         for a in range(4) :
  61.             temp3 = temp
  62.             temp=temp+b[a]
  63.             temp = temp+numbcoll[i][2]+"))"
  64.             for e in range(4) :
  65.                 temp4 = temp
  66.                 temp=temp+b[e]
  67.                 temp = temp+numbcoll[i][3]
  68.                 fil.write(temp)
  69.                 fil.write("\n")
  70.                 temp= temp4
  71.             temp=temp3
  72.         temp=temp2
  73.     temp = temp1
  74.    
  75. for i in range(24):
  76. #perulangan ini berguna untuk menghasilkan kombinasi yang mungkin untuk format kurung "((w+x)+y)+z" lalu menuliskannya kedalam sebuah file bernama kombinasi.txt
  77.     temp1 = temp
  78.     temp = temp+"(("+numbcoll[i][0]
  79.     for y in range(4):
  80.         temp2 = temp
  81.         temp = temp+b[y]
  82.         temp = temp+numbcoll[i][1]+")"
  83.         for a in range(4) :
  84.             temp3 = temp
  85.             temp=temp+b[a]
  86.             temp = temp+numbcoll[i][2]+")"
  87.             for e in range(4) :
  88.                 temp4 = temp
  89.                 temp=temp+b[e]
  90.                 temp = temp+numbcoll[i][3]
  91.                 fil.write(temp)
  92.                 fil.write("\n")
  93.                 temp= temp4
  94.             temp=temp3
  95.         temp=temp2
  96.     temp = temp1
  97.  
  98. for i in range(24):
  99. #perulangan ini berguna untuk menghasilkan kombinasi yang mungkin untuk format kurung "(w+x)+(y+z)" lalu menuliskannya kedalam sebuah file bernama kombinasi.txt
  100.     temp1 = temp
  101.     temp = temp+"("+numbcoll[i][0]
  102.     for y in range(4):
  103.         temp2 = temp
  104.         temp = temp+b[y]
  105.         temp = temp+numbcoll[i][1]+")"
  106.         for a in range(4) :
  107.             temp3 = temp
  108.             temp=temp+b[a]
  109.             temp = temp+"("+numbcoll[i][2]
  110.             for e in range(4) :
  111.                 temp4 = temp
  112.                 temp=temp+b[e]
  113.                 temp = temp+numbcoll[i][3]+")"
  114.                 fil.write(temp)
  115.                 fil.write("\n")
  116.                 temp= temp4
  117.             temp=temp3
  118.         temp=temp2
  119.     temp = temp1
  120.  
  121. for i in range(24):
  122. #perulangan ini berguna untuk menghasilkan kombinasi yang mungkin untuk format kurung "w+((x+y)+z)" lalu menuliskannya kedalam sebuah file bernama kombinasi.txt
  123.     temp1 = temp
  124.     temp = temp+numbcoll[i][0]
  125.     for y in range(4):
  126.         temp2 = temp
  127.         temp = temp+b[y]
  128.         temp = temp+"(("+numbcoll[i][1]
  129.         for a in range(4) :
  130.             temp3 = temp
  131.             temp=temp+b[a]
  132.             temp = temp+numbcoll[i][2]+")"
  133.             for e in range(4) :
  134.                 temp4 = temp
  135.                 temp=temp+b[e]
  136.                 temp = temp+numbcoll[i][3]+")"
  137.                 fil.write(temp)
  138.                 fil.write("\n")
  139.                 temp= temp4
  140.             temp=temp3
  141.         temp=temp2
  142.     temp = temp1
  143. fil.close()
  144.  
  145. # bagian III
  146. # evaluasi
  147. fil = open("kombinasi.txt", "r")
  148. count=0
  149. hasil=[]
  150. for x in fil:
  151. # perulangan ini berguna untuk mencari persamaan mana saja yang memenuhi ketentuan. dan menyimpannya kedalam sebuah array. solusi yang dicatat unik secara harfiah.
  152.     try:
  153.         eval(x)
  154.         if eval(x)==24 :
  155.             if not(searchsol(hasil,count,x)) :
  156.                 count=count+1
  157.                 hasil.append(x)
  158.     except ZeroDivisionError:
  159.         count=count
  160.  
  161. # bagian IV
  162. # output
  163. lala = open("hasil.txt","w")
  164. for x in range(0,count) :
  165.     lala.write(hasil[x])
  166. fil.close()
  167. lala.write("ada ")
  168. lala.write(str(count))
  169. lala.write(" solusi")
  170. lala.close()
  171. print(datetime.datetime.now().time())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement