Initial release
This commit is contained in:
135
Voyage en Fangorn.py
Normal file
135
Voyage en Fangorn.py
Normal file
@@ -0,0 +1,135 @@
|
||||
import requests
|
||||
|
||||
GET = "https://pydefis.callicode.fr/defis/Fangorn/get/Cavogrenier/bd0c2"
|
||||
POST = "https://pydefis.callicode.fr/defis/Fangorn/post/Cavogrenier/bd0c2"
|
||||
|
||||
|
||||
res = requests.get(GET)
|
||||
contents = res.text.splitlines()
|
||||
|
||||
print(res.text)
|
||||
print("***")
|
||||
|
||||
sig = contents[0]
|
||||
input = contents[1:]
|
||||
|
||||
# input = """.......#..
|
||||
# ..#..#....
|
||||
# ...#...#..
|
||||
# ..........
|
||||
# ..#....#..
|
||||
# ....#.....
|
||||
# .#.....#..
|
||||
# .....#...#
|
||||
# ....#.....
|
||||
# .#....#..."""
|
||||
|
||||
if isinstance(input, str):
|
||||
input = input.splitlines()
|
||||
|
||||
for i in range(len(input)):
|
||||
input[i] = [input[i][j] for j in range(len(input[i]))]
|
||||
|
||||
for i, line in enumerate(input):
|
||||
print(i, line)
|
||||
print("")
|
||||
|
||||
direction = 1 #0=N; 1=E, 2=S, 3=O
|
||||
|
||||
x_max = len(input[0])-1
|
||||
y_max = len(input)-1
|
||||
|
||||
def check_gauche(table, direction, x, y, x_max, y_max):
|
||||
if direction == 0:
|
||||
if x <= 0:
|
||||
return False
|
||||
if table[y][x-1] == "#":
|
||||
return False
|
||||
elif direction == 1:
|
||||
if y <= 0:
|
||||
return False
|
||||
if table[y-1][x] == "#":
|
||||
return False
|
||||
elif direction == 2:
|
||||
if x >= x_max:
|
||||
return False
|
||||
if table[y][x+1] == "#":
|
||||
return False
|
||||
elif direction == 3:
|
||||
if y >= y_max:
|
||||
return False
|
||||
if table[y+1][x] == "#":
|
||||
return False
|
||||
return True
|
||||
|
||||
def check_devant(table, direction, x, y, x_max, y_max):
|
||||
if direction == 0:
|
||||
if y <= 0:
|
||||
return False
|
||||
if table[y-1][x] == "#":
|
||||
return False
|
||||
elif direction == 1:
|
||||
if x >= x_max:
|
||||
return False
|
||||
if table[y][x+1] == "#":
|
||||
return False
|
||||
elif direction == 2:
|
||||
if y >= y_max:
|
||||
return False
|
||||
if table[y+1][x] == "#":
|
||||
return False
|
||||
elif direction == 3:
|
||||
if x <= 0:
|
||||
return False
|
||||
if table[y][x-1] == "#":
|
||||
return False
|
||||
return True
|
||||
|
||||
def tourne_gauche(direction):
|
||||
return (direction-1)%4
|
||||
|
||||
def tourne_droite(direction):
|
||||
return (direction+1)%4
|
||||
|
||||
def avance(direction, x, y):
|
||||
directions = ('N', 'E', 'S', 'O')
|
||||
|
||||
if direction == 0:
|
||||
y=y-1
|
||||
elif direction == 1:
|
||||
x=x+1
|
||||
elif direction == 2:
|
||||
y=y+1
|
||||
elif direction == 3:
|
||||
x=x-1
|
||||
return x, y, directions[direction]
|
||||
|
||||
x = 0
|
||||
y = 0
|
||||
solution = ""
|
||||
while x!=x_max or y!=y_max:
|
||||
input[y][x] = "X"
|
||||
if check_gauche(input, direction, x, y, x_max, y_max):
|
||||
direction = tourne_gauche(direction)
|
||||
x, y, d = avance(direction, x, y)
|
||||
solution=solution+d
|
||||
input[y][x] = "X"
|
||||
elif check_devant(input, direction, x, y, x_max, y_max):
|
||||
x, y, d = avance(direction, x, y)
|
||||
solution=solution+d
|
||||
input[y][x] = "X"
|
||||
else:
|
||||
direction = tourne_droite(direction)
|
||||
# print("({}, {})".format(x,y), direction)
|
||||
|
||||
for i, line in enumerate(input):
|
||||
print(line)
|
||||
print("")
|
||||
|
||||
print(solution)
|
||||
|
||||
param = {'sig':sig, 'rep':solution}
|
||||
res = requests.post(POST, verify=False, data=param)
|
||||
|
||||
print(res)
|
||||
print(res.text)
|
||||
Reference in New Issue
Block a user