def get_O_coordinate(r, c, grid):
for i in range(r):
for j in range(c):
if grid[i][j] == 'o':
return [i, j]
def get_symbol(grid, position):
# . / x / > / < / ^ / v
return grid[position[0]][position[1]]
def where_to_move(position_symbol):
if position_symbol == '.':
return 'STOP'
elif position_symbol == 'x':
return 'DONE'
elif position_symbol == '^':
return 'UP'
elif position_symbol == 'v':
return 'DOWN'
elif position_symbol == '>':
return 'RIGHT'
else:
return 'LEFT'
def update_position(direction, start_position):
if direction == 'E' or direction == 'RIGHT':
start_position[1] += 1
elif direction == 'W' or direction == 'LEFT':
start_position[1] += -1
elif direction == 'N' or direction == 'UP':
start_position[0] += -1
elif direction == 'S' or direction == 'DOWN':
start_position[0] += 1
return start_position
def count_step(position, grid):
"""
return count for each step if possible
return -1 if not possible
"""
count = 0
symbol = get_symbol(grid, position)
moving = where_to_move(symbol) # up down left right
while True:
count += 1
if moving == 'STOP':
return -1
elif moving == 'DONE':
return count
else:
position = update_position(moving, position)
symbol = get_symbol(grid, position)
moving = where_to_move(symbol)
r, c = map(int, input().split())
grid = []
for _ in range(r):
grid.append(list(input()))
start_coordinatex = get_O_coordinate(r, c, grid)
start_coordinatey = get_O_coordinate(r, c, grid)
start_coordinatez = get_O_coordinate(r, c, grid)
start_coordinateq = get_O_coordinate(r, c, grid)
count_up = count_step(update_position('N', start_coordinatex), grid)
count_down = count_step(update_position('S', start_coordinatey), grid)
count_right = count_step(update_position('E', start_coordinatez), grid)
count_left = count_step(update_position('W', start_coordinateq), grid)
lst = [[count_right, 'E'], [count_up, 'N'], [count_down, 'S'], [count_left, 'W']]
if count_up == -1 and count_down == -1 and count_right == -1 and count_left == -1:
print(':(')
else:
print(':)')
minimum_value = max(count_down, count_left, count_right, count_up)
for step, wind in lst:
if step < minimum_value and step != -1:
minimum_value = step
# alphabetically --> E N S W
for val, wind in lst:
if val == minimum_value:
print(wind)
break
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
3164 KB |
Output is correct |
2 |
Execution timed out |
1061 ms |
3208 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
3164 KB |
Output is correct |
2 |
Correct |
12 ms |
3164 KB |
Output is correct |
3 |
Execution timed out |
1004 ms |
3164 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |