-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMinecraftBruteF.py
48 lines (40 loc) · 1.35 KB
/
MinecraftBruteF.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
import numpy as np
import math
def MinecraftBruteForce(swap,put,quit,wall):
minV = np.min(wall)
maxV = np.max(wall) + 1
sol = np.inf
h = np.inf
for i in range(minV,maxV):
temp = BestWall(swap, put, quit, wall, i)
if sol > temp:
sol = temp
h = i
return sol,h
def Check(height, wall):
for i in range(len(wall)):
if(wall[i] != height):
return False
return True
def BestWall(swap,put,quit,wall,height):
if(Check(height,wall) ):
return 0
quitCost = np.inf
putCost = np.inf
moveCost = np.inf
for i in range(len(wall)):
if(wall[i] > height):
nWall = [k for k in wall]
nWall[i] = nWall[i] - 1
quitCost = min(quitCost, quit + BestWall(swap, put, quit, nWall, height))
for j in range(len(wall)):
if(i != j and wall[j] < height):
nWall = [k for k in wall]
nWall[j] = nWall[j] + 1
nWall[i] = nWall[i] - 1
moveCost = min(moveCost, swap + BestWall(swap, put, quit, nWall, height))
if(wall[i] < height):
nWall = [k for k in wall]
nWall[i] = nWall[i] + 1
putCost = min(putCost, put + BestWall(swap, put, put, nWall, height))
return min(quitCost, moveCost, putCost)