Advertisement
Guest User

juegp

a guest
May 20th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3.  
  4. # In[9]:
  5.  
  6.  
  7. def find(s, a):
  8. i = a
  9. while s[i] >= 0:
  10. i = s[i]
  11. return i
  12.  
  13.  
  14. # In[10]:
  15.  
  16.  
  17. def union(s, a, b):
  18. pa = find(s, a)
  19. pb = find(s, b)
  20. if pa == pb: return
  21.  
  22. if s[pa] <= s[pb]:
  23. s[pa] += s[pb]
  24. s[pb] = pa
  25. elif s[pb] < s[pa]:
  26. s[pb] += s[pa]
  27. s[pa] = pb
  28.  
  29.  
  30. # In[11]:
  31.  
  32.  
  33. def makeDS(tab, piece):
  34.  
  35. def ij2i(i, j):
  36. return i*n + j
  37.  
  38. def checkVecinos(i, j):
  39.  
  40. def check1Vecino(i0, j0):
  41. if i0 < 0 or i0 >= n or j0 < 0 or j0 >= n: return
  42.  
  43. if tab[i0][j0] == piece:
  44. I = ij2i(i, j)
  45. I0 = ij2i(i0, j0)
  46. union(ds, I, I0)
  47.  
  48. check1Vecino(i - 1, j)
  49. check1Vecino(i - 1, j + 1)
  50. check1Vecino(i, j - 1)
  51. check1Vecino(i, j + 1)
  52. check1Vecino(i + 1, j - 1)
  53. check1Vecino(i + 1, j)
  54.  
  55. n = len(tab)
  56. ds = [-1]*(n*n)
  57. for i in range(n):
  58. for j in range(n):
  59. if tab[i][j] == piece:
  60. checkVecinos(i, j)
  61.  
  62. return ds
  63.  
  64.  
  65. # In[19]:
  66.  
  67.  
  68. tab = [[1, 1, 0],
  69. [0, 1, 1],
  70. [0, 0, 1]]
  71. print(makeDS(tab, 1))
  72.  
  73.  
  74. # In[14]:
  75.  
  76.  
  77. def findWinner(tab, ds):
  78. n = len(tab)
  79.  
  80. def ij2i(i, j):
  81. return i*n + j
  82.  
  83. for i in range(n):
  84. Ii = ij2i(0, i)
  85. for j in range(n):
  86. If = ij2i(n-1, j)
  87. if find(ds, Ii) == find(ds, If):
  88. return "Winner!"
  89.  
  90. return ":("
  91.  
  92.  
  93. # In[20]:
  94.  
  95.  
  96. ds = makeDS(tab, 1)
  97. findWinner(tab, ds)
  98.  
  99.  
  100. # In[22]:
  101.  
  102.  
  103. import graphviz as gv
  104.  
  105.  
  106. # In[23]:
  107.  
  108.  
  109. def makeDot(a):
  110. nodes = '\n '.join(['%d;'%(i)
  111. for i in range(len(a))])
  112. edges = '\n '.join(['%d %d;'%(i, a[i])
  113. for i in range(len(a))
  114. if a[i] >= 0])
  115. dot = """
  116. digraph "test" {
  117. rankdir = BT;
  118. %s
  119. %s
  120. }
  121. """%(nodes, edges)
  122. return dot
  123.  
  124.  
  125. # In[ ]:
  126.  
  127.  
  128. gv.Source(makeDot(ds))
  129.  
  130.  
  131. # In[ ]:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement