fork download
  1. E=enumerate
  2. def U(j,k,J,K,b,n,m):
  3. try:return b[j][k]==b[J][K]
  4. except:return 0
  5. def f(b):
  6. M=min(n:=len(b),m:=len(b[0]));q,r=[i for x,u in E(b)for y,_ in E(u)for i in[(x,y,0,0,x,y)]*(x+2>M<=m-y)+[(x,y,1,0,x,y)]*(x>M-2<y)],[]
  7. while q:
  8. x,y,d,c,X,Y=q.pop(0);D=1-d-d
  9. if~abs(X-x)+min(n,m):q+=(x,y,d,c+U(X+1,Y+D,X-1,Y-D,b,n,m)+U(X,Y+D,X-D,Y,b,n,m),X-1,Y+D),
  10. else:r+=(*[[x,y],[X,Y]][d],d,c),
  11. return max(r,key=lambda x:x[-1])
  12.  
  13. s1="""
  14. 4 1 3 2 4 2
  15. 1 2 4 2 1 3
  16. 4 3 2 1 4 4
  17. """
  18. s2="""
  19. 3 6
  20. 4 7
  21. 5 8
  22. 1 2
  23. 2 1
  24. """
  25. s3="""
  26. 2 7 4 10 7 8 9 5 6 4 2 4 10 2 1 7 10 7 2 4 10 10 8 7
  27. 6 5 6 2 2 3 6 1 6 9 7 2 10 3 4 7 8 8 3 7 1 8 4 2
  28. 3 3 7 6 10 1 7 9 10 10 2 6 4 7 5 6 9 1 1 5 7 6 2 7
  29. 7 10 3 9 8 10 9 3 6 1 6 10 3 8 9 6 3 6 2 10 1 2 8 1
  30. 7 7 8 1 1 6 4 8 10 3 10 4 9 3 1 9 5 9 10 4 6 7 10 4
  31. 1 10 9 7 7 10 3 3 7 8 2 2 4 2 4 7 1 7 7 1 9 9 8 7
  32. 5 9 5 3 8 6 5 7 6 7 2 7 9 9 7 10 8 8 7 3 5 9 9 10
  33. 9 3 8 2 9 2 1 3 6 3 8 5 7 10 10 9 1 1 10 2 5 1 6 9
  34. 8 7 6 2 3 2 9 9 9 7 9 5 8 3 8 2 2 5 2 2 10 10 3 5
  35. 7 1 1 2 3 2 10 1 2 10 3 3 2 1 4 2 5 6 10 9 6 5 3 8
  36. 8 9 5 2 1 4 10 6 8 6 9 10 10 8 1 6 10 6 4 8 7 9 3 5
  37. 8 1 5 7 1 8 7 5 8 6 4 5 10 1 6 1 4 4 10 7 6 3 3 6
  38. """
  39. def to_board(s):
  40. return [[*map(int,i.split())]for i in filter(None, s.split('\n'))]
  41.  
  42. print(f(to_board(s1)))
  43. print(f(to_board(s2)))
  44. print(f(to_board(s3)))
Success #stdin #stdout 0.09s 14112KB
stdin
Standard input is empty
stdout
(2, 1, 0, 2)
(2, 0, 1, 1)
(11, 7, 0, 5)