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)
