• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Untitled

a guest Dec 14th, 2019 72 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. import math
2. from pprint import *
3. filename = "input.txt"
4. file = open(filename)
6. class Ingredient:
7.     def __init__(self, material, amount):
8.         self.material = material
9.         self.amount = amount
10.
11.     def __str__(self):
12.         return self.material + ": " + str(self.amount)
13.
14.     def __repr__(self):
15.         return str(self)
16.
17. class Recipe:
18.     def __init__(self,array):
19.         ins = array[0]
20.         outs = array[1][0]
21.         self.materials = []
22.         for i in ins:
23.             self.materials.append(Ingredient(i[1],int(i[0])))
24.         self.output = Ingredient(outs[1],int(outs[0]))
25.
26.     def __str__(self):
27.         string = str(self.output)
28.         for material in self.materials:
29.             string = string + "\n   " + str(material)
30.         return string
31.
32.     def __repr__(self):
33.         return str(self)
34.
35. data = data.split("\n")
36. for i in range(len(data)):
37.     datam = data[i]
38.     datam = datam.split(" => ")
39.
40.     for o in range(len(datam)):
41.         part = datam[o]
42.         part = part.split(", ")
43.         for p in range(len(part)):
44.             part[p] = part[p].split(" ")
45.         datam[o] = part
46.     data[i] = datam
47.
48. recipes = []
49. index = 0
50. for datam in data:
51.     recipes.append(Recipe(datam))
52.     if recipes[-1].output.material == "FUEL":
53.         index = len(recipes)-1
54.
55. fuelRecipe = recipes[index]
56.
57. stuffGot = []
58.
59. for recipe in recipes:
60.     stuffGot.append(Ingredient(recipe.output.material,0))
61.     print(recipe)
62.     print()
63.
64.
65. def IndexOf(stuff):
66.     for got in stuffGot:
67.         if got.material == stuff:
68.             return stuffGot.index(got)
69.     return -1
70.
71. def AmountOf(stuff):
72.     index = IndexOf(stuff)
73.     if index == -1:
74.         return 0
75.     return stuffGot[index].amount
76.
77. def GetRecipe(stuff):
78.     for recipe in recipes:
79.         if recipe.output.material == stuff:
80.             return recipe
81.     return None
82.
83. usedOre = 0
84. def MakeMore(stuff):
85.     global usedOre
86.     global stuffGot
87.
88.     recipe = GetRecipe(stuff)
89.     for mat in recipe.materials:
90.         if mat.material == "ORE":
91.             usedOre = usedOre + mat.amount
92.             continue
93.         while AmountOf(mat.material) < mat.amount:
94.             MakeMore(mat.material)
95.
96.         index = IndexOf(mat.material)
97.         stuffGot[index].amount = stuffGot[index].amount - mat.amount
98.     mainIndex = IndexOf(recipe.output.material)
99.     stuffGot[mainIndex].amount = stuffGot[mainIndex].amount + recipe.output.amount
100.
101. fuelsNeeded = 1000
102. for i in range(fuelsNeeded):
103.     MakeMore("FUEL")
104. print("Ore used: " + str(usedOre))
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top