fork download
  1. def change(d,c):
  2. dir_map = {1:{'a':4,'c':2},2:{'a':1,'c':3},3:{'a':2,'c':4},4:{'a':3,'c':1}}
  3. return dir_map[d][c]
  4.  
  5. mat = []
  6. for i in range(9):
  7. mat.append(list(input()))
  8. mat = mat[::-1]
  9. dir = {1:(1,1),2:(1,-1),3:(-1,-1),4:(-1,1)}
  10. cur_dir = 1
  11. hit = 0
  12. queue = [(0,0)]
  13. while(hit!=2):
  14. cord = tuple(map(sum, zip(queue[-1], dir[cur_dir])))
  15. if mat[cord[1]][cord[0]] in {'a','c'}:
  16. cur_dir = change(cur_dir,mat[cord[1]][cord[0]])
  17. if cord[1] in {0,8} or cord[0] in {0,20}:
  18. cur_dir = change(cur_dir,'a')
  19. hit+=1
  20. queue.append(cord)
  21.  
  22. inf,tot=0,0
  23. for row in mat:
  24. for i in row:
  25. if i in {'a','c'}:
  26. tot+=1
  27. for i in queue:
  28. if mat[i[1]][i[0]] in {'a','c'}:
  29. mat[i[1]][i[0]] = "-"
  30. inf+=1
  31. for i in queue:
  32. print(*i)
  33. for row in mat[::-1]:
  34. for i in row:
  35. print(i,end="")
  36. print()
  37. safe = tot-inf
  38. print(f"safe={safe}")
  39. print(f"infected={inf}")
Success #stdin #stdout 0.02s 9172KB
stdin
********************
*....c.............*
*...c..............*
*c.................*
*.............a....*
*c.c...............*
*.a................*
*...........c......*
********************
stdout
0 0
1 1
2 2
1 3
2 4
3 5
4 6
5 5
6 4
7 3
8 2
9 1
10 0
11 1
12 2
13 3
14 4
13 5
12 6
11 7
10 8
********************
*....c.............*
*...-..............*
*c.................*
*.............-....*
*-.c...............*
*.-................*
*...........c......*
********************
safe=4
infected=4