-
Notifications
You must be signed in to change notification settings - Fork 0
/
FINAL_PROGRAM.py
418 lines (395 loc) · 23 KB
/
FINAL_PROGRAM.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
import array as arr
import operator
from collections import defaultdict
import pandas as pd
from itertools import permutations
operators = [('+', operator.add), ('-', operator.sub), ('*', operator.mul), ('/', operator.truediv)]
fix_set = [2345, 2534, 2453, 2543, 3245, 3524, 3452, 3542, 4235, 4523, 4352, 4532, 5234, 5423, 5342, 5432]
resultlist = []
ansnumber = 24
checklist = []
rawinput = arr.array("i")
for i in range(1111, 10000):
if "0" in str(i):
continue
else:
rawinput.append(i)
rawoperator = arr.array("i")
for i in range(111, 445):
if "0" in str(i):
continue
elif "5" in str(i):
continue
elif "6" in str(i):
continue
elif "7" in str(i):
continue
elif "8" in str(i):
continue
elif "9" in str(i):
continue
else:
rawoperator.append(i)
# print("---------- X X X X ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
if (operator1 == '+' or operator1 == '-') and (operator2 == '+' or operator2 == '-') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn3(fn2(fn1(listinput[0], listinput[1]), listinput[2]), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '+' or operator1 == '-') and (operator2 == '+' or operator2 == '-') and (operator3 == '*' or operator3 == '/'):
resultnumber = fn2(fn1(listinput[0], listinput[1]), fn3(listinput[2], listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '+' or operator1 == '-') and (operator2 == '*' or operator2 == '/') and (operator3 == '*' or operator3 == '/'):
resultnumber = fn1(listinput[0], fn3(fn2(listinput[1], listinput[2]), listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '*' or operator1 == '/') and (operator2 == '*' or operator2 == '/') and (operator3 == '*' or operator3 == '/'):
resultnumber = fn3(fn2(fn1(listinput[0], listinput[1]), listinput[2]), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '*' or operator1 == '/') and (operator2 == '*' or operator2 == '/') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn3(fn2(fn1(listinput[0], listinput[1]), listinput[2]), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '*' or operator1 == '/') and (operator2 == '+' or operator2 == '-') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn3(fn2(fn1(listinput[0], listinput[1]), listinput[2]), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '+' or operator1 == '-') and (operator2 == '*' or operator2 == '/') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn3(fn1(listinput[0], fn2(listinput[1], listinput[2])), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- ( X X ) X X ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
if (operator2 == '*' or operator2 == '/') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn3(fn2(fn1(listinput[0], listinput[1]), listinput[2]), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, listinput[1], ")", operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
elif (operator2 == '+' or operator2 == '-') and (operator3 == '*' or operator3 == '/'):
resultnumber = fn2(fn1(listinput[0], listinput[1]), fn3(listinput[2], listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, listinput[1], ")", operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
elif (operator2 == '+' or operator2 == '-') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn3(fn2(fn1(listinput[0], listinput[1]), listinput[2]), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, listinput[1], ")", operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
elif (operator2 == '*' or operator2 == '/') and (operator3 == '*' or operator3 == '/'):
resultnumber = fn3(fn2(fn1(listinput[0], listinput[1]), listinput[2]), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, listinput[1], ")", operator2, listinput[2], operator3, listinput[3])
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- X ( X X ) X ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
if (operator1 == '*' or operator1 == '/') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn3(fn1(listinput[0], fn2(listinput[1], listinput[2])), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", listinput[1], operator2, listinput[2], ")", operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '+' or operator1 == '-') and (operator3 == '*' or operator3 == '/'):
resultnumber = fn1(listinput[0], fn3(fn2(listinput[1], listinput[2]), listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", listinput[1], operator2, listinput[2], ")", operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '+' or operator1 == '-') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn3(fn1(listinput[0], fn2(listinput[1], listinput[2])), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", listinput[1], operator2, listinput[2], ")", operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '*' or operator1 == '/') and (operator3 == '*' or operator3 == '/'):
resultnumber = fn3(fn1(listinput[0], fn2(listinput[1], listinput[2])), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", listinput[1], operator2, listinput[2], ")", operator3, listinput[3])
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- X X ( X X ) ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
if (operator1 == '*' or operator1 == '/') and (operator2 == '+' or operator2 == '-'):
resultnumber = fn2(fn1(listinput[0], listinput[1]), fn3(listinput[2], listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, "(", listinput[2], operator3, listinput[3], ")")
checklist.append(listinput)
elif (operator1 == '+' or operator1 == '-') and (operator2 == '*' or operator2 == '/'):
resultnumber = fn1(listinput[0], fn2(listinput[1], fn3(listinput[2], listinput[3])))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, "(", listinput[2], operator3, listinput[3], ")")
checklist.append(listinput)
elif (operator1 == '+' or operator1 == '-') and (operator2 == '+' or operator2 == '-'):
resultnumber = fn2(fn1(listinput[0], listinput[1]), fn3(listinput[2], listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, "(", listinput[2], operator3, listinput[3], ")")
checklist.append(listinput)
elif (operator1 == '*' or operator1 == '/') and (operator2 == '*' or operator2 == '/'):
resultnumber = fn2(fn1(listinput[0], listinput[1]), fn3(listinput[2], listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, listinput[1], operator2, "(", listinput[2], operator3, listinput[3], ")")
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- ( X X ) ( X X ) ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
resultnumber = fn2(fn1(listinput[0], listinput[1]), fn3(listinput[2], listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, listinput[1], ")", operator2, "(", listinput[2], operator3, listinput[3], ")")
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- ( X X X ) X ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
if (operator1 == '*' or operator1 == '/') and (operator2 == '+' or operator2 == '-'):
resultnumber = fn3(fn2(fn1(listinput[0], listinput[1]), listinput[2]), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, listinput[1], operator2, listinput[2], ")", operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '+' or operator1 == '-') and (operator2 == '*' or operator2 == '/'):
resultnumber = fn3(fn1(listinput[0], fn2(listinput[1], listinput[2])), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, listinput[1], operator2, listinput[2], ")", operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '+' or operator1 == '-') and (operator2 == '+' or operator2 == '-'):
resultnumber = fn3(fn1(listinput[0], fn2(listinput[1], listinput[2])), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, listinput[1], operator2, listinput[2], ")", operator3, listinput[3])
checklist.append(listinput)
elif (operator1 == '*' or operator1 == '/') and (operator2 == '*' or operator2 == '/'):
resultnumber = fn3(fn1(listinput[0], fn2(listinput[1], listinput[2])), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, listinput[1], operator2, listinput[2], ")", operator3, listinput[3])
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- X ( X X X ) ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
if (operator2 == '*' or operator2 == '/') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn1(listinput[0], fn3(fn2(listinput[1], listinput[2]), listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", listinput[1], operator2, listinput[2], operator3, listinput[3], ")")
checklist.append(listinput)
elif (operator2 == '+' or operator2 == '-') and (operator3 == '*' or operator3 == '/'):
resultnumber = fn1(listinput[0], fn2(listinput[1], fn3(listinput[2], listinput[3])))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", listinput[1], operator2, listinput[2], operator3, listinput[3], ")")
checklist.append(listinput)
elif (operator2 == '+' or operator2 == '-') and (operator3 == '+' or operator3 == '-'):
resultnumber = fn1(listinput[0], fn3(fn2(listinput[1], listinput[2]), listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", listinput[1], operator2, listinput[2], operator3, listinput[3], ")")
checklist.append(listinput)
elif (operator2 == '*' or operator2 == '/') and (operator3 == '*' or operator3 == '/'):
resultnumber = fn1(listinput[0], fn3(fn2(listinput[1], listinput[2]), listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", listinput[1], operator2, listinput[2], operator3, listinput[3], ")")
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- ( ( X X ) X ) X ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
resultnumber = fn3(fn2(fn1(listinput[0], listinput[1]), listinput[2]), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", "(", listinput[0], operator1, listinput[1], ")", operator2, listinput[2], ")", operator3, listinput[3])
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- ( X ( X X ) ) X ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
resultnumber = fn3(fn1(listinput[0], fn2(listinput[1], listinput[2])), listinput[3])
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print("(", listinput[0], operator1, "(", listinput[1], operator2, listinput[2], ")", ")", operator3, listinput[3])
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- X ( ( X X ) X ) ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
resultnumber = fn1(listinput[0], fn3(fn2(listinput[1], listinput[2]), listinput[3]))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", "(", listinput[1], operator2, listinput[2], ")", operator3, listinput[3], ")")
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
# print("---------- X ( X ( X X ) ) ----------")
for i in range(0, 6561):
if rawinput[i] in fix_set:
listinput = [int(x) for x in str(rawinput[i])]
for j in range(0, 64):
listoperator = [int(x) for x in str(rawoperator[j])]
operator1, fn1 = operators[listoperator[0] - 1]
operator2, fn2 = operators[listoperator[1] - 1]
operator3, fn3 = operators[listoperator[2] - 1]
try:
resultnumber = fn1(listinput[0], fn2(listinput[1], fn3(listinput[2], listinput[3])))
# resultlist.append(resultnumber)
if resultnumber == ansnumber:
print(listinput[0], operator1, "(", listinput[1], operator2, "(", listinput[2], operator3, listinput[3], ")", ")")
checklist.append(listinput)
except ZeroDivisionError:
resultnumber = "N/A"
# resultlist.append(resultnumber)
result = []
for x in resultlist:
if x not in result:
result.append(x)
for i in checklist:
i.sort()
checklist.sort()
want_result = []
for x in checklist:
if x not in want_result:
want_result.append(x)
print("There are", len(want_result), "sets of number that can be", ansnumber)
for i in want_result:
print(i, end='\n')
# d = defaultdict(int)
# L = resultlist
# for i in L:
# d[i] += 1
#
# data_items = d.items()
# data_list = list(data_items)
# df = pd.DataFrame(data_list, columns=["Result", "Times"])
# df = df.sort_values(by=['Times'], ascending=False)
# print(df.to_string(index=False))
d = defaultdict(int)
L = tuple(map(tuple, checklist))
for i in L:
d[i] += 1
data_items = d.items()
data_list = list(data_items)
df = pd.DataFrame(data_list, columns=["Set", "Times"])
df = df.sort_values(by=['Times'], ascending=False)
print(df.to_string(index=False))