Advertisement
Guest User

Untitled

a guest
Feb 8th, 2020
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.19 KB | None | 0 0
  1. def A(n):
  2. verbose=0
  3. l=0
  4. if n==1:
  5. return 1
  6. elif n<1:
  7. return 0
  8. elif n%2==1:
  9. f=[-1 for x in range(n*n)]
  10. d=[0 for x in range(n*n+1)]
  11. dd=[0 for x in range(n*n+1)]
  12. way=[0 for x in range(n*n)]
  13. st=1
  14. d[0]=2
  15. f[1]=0
  16. f[n*n-1]=n
  17. f[n*n-1]=0
  18. d[1]=2
  19. way[0]=2
  20. dd[0]=2
  21. dd[1]=2
  22. i=1
  23. while st>=1:
  24. jjj=i
  25. if d[st]==1:
  26. if dd[st+1]==0 and i>=n and f[i-n]<0 and f[n*n-1-(i-n)]<0:
  27. st=st+1
  28. d[st]=1
  29. dd[st]=1
  30. f.pop(i-n)
  31. f.insert(i-n,i)
  32. f.pop(n*n-1-i+n)
  33. f.insert(n*n-1-i+n,i)
  34. i=i-n
  35. elif dd[st+1]!=4 and dd[st+1]!=2 and i%n<n-1 and f[i+1]<0 and f[n*n-1-(i+1)]<0:
  36. st=st+1
  37. d[st]=2
  38. dd[st]=2
  39. f.pop(i+1)
  40. f.insert(i+1,i)
  41. f.pop(n*n-2-i)
  42. f.insert(n*n-2-i,i)
  43. i=i+1
  44. elif dd[st+1]!=4 and i%n>0 and f[i-1]<0 and f[n*n-1-(i-1)]<0:
  45. st=st+1
  46. d[st]=4
  47. dd[st]=4
  48. f.pop(i-1)
  49. f.insert(i-1,i)
  50. f.pop(n*n-i)
  51. f.insert(n*n-i,i)
  52. i=i-1
  53. else:
  54. d[st]=0
  55. elif d[st]==2:
  56. if dd[st+1]==0 and i%n<n-1 and f[i+1]<0 and f[n*n-1-(i+1)]<0:
  57. st=st+1
  58. d[st]=2
  59. dd[st]=2
  60. f.pop(i+1)
  61. f.insert(i+1,i)
  62. f.pop(n*n-2-i)
  63. f.insert(n*n-2-i,i)
  64. i=i+1
  65. elif dd[st+1]%2!=1 and i<n*(n-1) and f[i+n]<0 and f[n*n-1-(i+n)]<0:
  66. st=st+1
  67. d[st]=3
  68. dd[st]=3
  69. f.pop(i+n)
  70. f.insert(i+n,i)
  71. f.pop(n*n-1-i-n)
  72. f.insert(n*n-1-i-n,i)
  73. i=i+n
  74. elif dd[st+1]!=1 and i>=n and f[i-n]<0 and f[n*n-1-(i-n)]<0:
  75. st=st+1
  76. d[st]=1
  77. dd[st]=1
  78. f.pop(i-n)
  79. f.insert(i-n,i)
  80. f.pop(n*n-1-i+n)
  81. f.insert(n*n-1-i+n,i)
  82. i=i-n
  83. else:
  84. d[st]=0
  85. elif d[st]==3:
  86. if dd[st+1]==0 and i<n*(n-1) and f[i+n]<0 and f[n*n-1-(i+n)]<0:
  87. st=st+1
  88. d[st]=3
  89. dd[st]=3
  90. f.pop(i+n)
  91. f.insert(i+n,i)
  92. f.pop(n*n-1-i-n)
  93. f.insert(n*n-1-i-n,i)
  94. i=i+n
  95. elif dd[st+1]!=4 and dd[st+1]!=2 and i%n>0 and f[i-1]<0 and f[n*n-1-(i-1)]<0:
  96. st=st+1
  97. d[st]=4
  98. dd[st]=4
  99. f.pop(i-1)
  100. f.insert(i-1,i)
  101. f.pop(n*n-i)
  102. f.insert(n*n-i,i)
  103. i=i-1
  104. elif dd[st+1]!=2 and i%n<n-1 and f[i+1]<0 and f[n*n-1-(i+1)]<0:
  105. st=st+1
  106. d[st]=2
  107. dd[st]=2
  108. f.pop(i+1)
  109. f.insert(i+1,i)
  110. f.pop(n*n-2-i)
  111. f.insert(n*n-2-i,i)
  112. i=i+1
  113. else:
  114. d[st]=0
  115. elif d[st]==4:
  116. if dd[st+1]==0 and i%n>0 and f[i-1]<0 and f[n*n-1-(i-1)]<0:
  117. st=st+1
  118. d[st]=4
  119. dd[st]=4
  120. f.pop(i-1)
  121. f.insert(i-1,i)
  122. f.pop(n*n-i)
  123. f.insert(n*n-i,i)
  124. i=i-1
  125. elif dd[st+1]%2!=1 and i>=n and f[i-n]<0 and f[n*n-1-(i-n)]<0:
  126. st=st+1
  127. d[st]=1
  128. dd[st]=1
  129. f.pop(i-n)
  130. f.insert(i-n,i)
  131. f.pop(n*n-1-i+n)
  132. f.insert(n*n-1-i+n,i)
  133. i=i-n
  134. elif dd[st+1]!=3 and i<n*(n-1) and f[i+n]<0 and f[n*n-1-(i+n)]<0:
  135. st=st+1
  136. d[st]=3
  137. dd[st]=3
  138. f.pop(i+n)
  139. f.insert(i+n,i)
  140. f.pop(n*n-1-i-n)
  141. f.insert(n*n-1-i-n,i)
  142. i=i+n
  143. else:
  144. d[st]=0
  145. way.pop(jjj)
  146. way.insert(jjj,d[st])
  147. if verbose==1:
  148. print(st,i)
  149. kk=1
  150. ww="→"
  151. while kk<n*n:
  152. if kk%n==0:
  153. ww=ww+"\n"
  154. if way[kk]==2:
  155. ww=ww+"→"
  156. elif way[kk]==3:
  157. ww=ww+"↓"
  158. elif way[kk]==4:
  159. ww=ww+"←"
  160. elif way[kk]==1:
  161. ww=ww+"↑"
  162. else:
  163. ww=ww+" "
  164. kk=kk+1
  165. print(ww)
  166. if i==(n*n-1)/2:
  167. if st==(n*n-1)/2:
  168. l=l+1
  169. print(n," ",l)
  170. kk=1
  171. ww="→"
  172. while kk<n*n-1:
  173. if kk%n==0:
  174. ww=ww+"\n"
  175. if way[kk]==2:
  176. ww=ww+"→"
  177. elif way[kk]==3:
  178. ww=ww+"↓"
  179. elif way[kk]==4:
  180. ww=ww+"←"
  181. elif way[kk]==1 or way[f[n*n-kk-1]]==1:
  182. ww=ww+"↑"
  183. elif way[f[n*n-kk-1]]==2:
  184. ww=ww+"→"
  185. elif way[f[n*n-kk-1]]==3:
  186. ww=ww+"↓"
  187. elif way[f[n*n-kk-1]]==4:
  188. ww=ww+"←"
  189. else:
  190. ww=ww+" "
  191. kk=kk+1
  192. ww=ww+" "
  193. print(ww)
  194. way.pop(i)
  195. way.insert(i,0)
  196. jj=i
  197. i=f[i]*1
  198. f.pop(jj)
  199. f.insert(jj,-1)
  200. f.pop(n*n-1-jj)
  201. f.insert(n*n-1-jj,-1)
  202. d[st]=0
  203. st=st-1
  204. d[st]=0
  205. if d[st]==0:
  206. way.pop(i)
  207. way.insert(i,0)
  208. dd[st+1]=0
  209. jj=i
  210. i=f[i]*1
  211. f.pop(jj)
  212. f.insert(jj,-1)
  213. f.pop(n*n-1-jj)
  214. f.insert(n*n-1-jj,-1)
  215. st=st-1
  216. elif n%2==0:
  217. bo=int(n*n/2)
  218. f=[-1 for x in range(n*n)]
  219. d=[0 for x in range(bo+1)]
  220. dd=[0 for x in range(bo+1)]
  221. way=[0 for x in range(n*n)]
  222. st=1
  223. d[0]=2
  224. f[1]=0
  225. d[1]=2
  226. dd[0]=2
  227. dd[1]=2
  228. i=1
  229. down=0
  230. while st>=0:
  231. if st==0:
  232. down=1
  233. jjj=i
  234. if d[st]==1:
  235. if dd[st+1]==0 and i>=n and f[i-n]<0:
  236. st=st+1
  237. d[st]=1
  238. dd[st]=1
  239. f.pop(i-n)
  240. f.insert(i-n,i)
  241. i=i-n
  242. elif dd[st+1]!=4 and dd[st+1]!=2 and i%n<n-1 and f[i+1]<0:
  243. st=st+1
  244. d[st]=2
  245. dd[st]=2
  246. f.pop(i+1)
  247. f.insert(i+1,i)
  248. i=i+1
  249. elif dd[st+1]!=4 and i%n>0 and f[i-1]<0:
  250. st=st+1
  251. d[st]=4
  252. dd[st]=4
  253. f.pop(i-1)
  254. f.insert(i-1,i)
  255. i=i-1
  256. else:
  257. d[st]=0
  258. elif d[st]==2:
  259. if dd[st+1]==0 and i%n<n-1 and f[i+1]<0:
  260. st=st+1
  261. d[st]=2
  262. dd[st]=2
  263. f.pop(i+1)
  264. f.insert(i+1,i)
  265. i=i+1
  266. elif dd[st+1]%2!=1 and i<bo-n and f[i+n]<0:
  267. st=st+1
  268. d[st]=3
  269. dd[st]=3
  270. f.pop(i+n)
  271. f.insert(i+n,i)
  272. i=i+n
  273. elif dd[st+1]!=1 and i>=n and f[i-n]<0:
  274. st=st+1
  275. d[st]=1
  276. dd[st]=1
  277. f.pop(i-n)
  278. f.insert(i-n,i)
  279. i=i-n
  280. else:
  281. d[st]=0
  282. elif d[st]==3:
  283. if dd[st+1]==0 and i<bo-n and f[i+n]<0:
  284. st=st+1
  285. d[st]=3
  286. dd[st]=3
  287. f.pop(i+n)
  288. f.insert(i+n,i)
  289. i=i+n
  290. elif dd[st+1]!=4 and dd[st+1]!=2 and i%n>0 and f[i-1]<0:
  291. st=st+1
  292. d[st]=4
  293. dd[st]=4
  294. f.pop(i-1)
  295. f.insert(i-1,i)
  296. i=i-1
  297. elif dd[st+1]!=2 and i%n<n-1 and f[i+1]<0:
  298. st=st+1
  299. d[st]=2
  300. dd[st]=2
  301. f.pop(i+1)
  302. f.insert(i+1,i)
  303. i=i+1
  304. else:
  305. d[st]=0
  306. elif d[st]==4:
  307. if dd[st+1]==0 and i%n>0 and f[i-1]<0:
  308. st=st+1
  309. d[st]=4
  310. dd[st]=4
  311. f.pop(i-1)
  312. f.insert(i-1,i)
  313. i=i-1
  314. elif dd[st+1]%2!=1 and i>=n and f[i-n]<0:
  315. st=st+1
  316. d[st]=1
  317. dd[st]=1
  318. f.pop(i-n)
  319. f.insert(i-n,i)
  320. i=i-n
  321. elif dd[st+1]!=3 and i<bo-n and f[i+n]<0:
  322. st=st+1
  323. d[st]=3
  324. dd[st]=3
  325. f.pop(i+n)
  326. f.insert(i+n,i)
  327. i=i+n
  328. else:
  329. d[st]=0
  330. way.pop(jjj)
  331. way.insert(jjj,d[st])
  332. if verbose==1:
  333. print(st,i)
  334. si=1
  335. if si==1:
  336. kk=1
  337. if down==0:
  338. ww="→"
  339. else:
  340. ww="↓"
  341. while kk<bo:
  342. if kk%n==0:
  343. ww=ww+"\n"
  344. if way[kk]==2:
  345. ww=ww+"→"
  346. elif way[kk]==3:
  347. ww=ww+"↓"
  348. elif way[kk]==4:
  349. ww=ww+"←"
  350. elif way[kk]==1:
  351. ww=ww+"↑"
  352. else:
  353. ww=ww+" "
  354. kk=kk+1
  355. print(ww)
  356. if st==bo-1:
  357. if i>=bo-n:
  358. l=l+1
  359. print(n," ",l)
  360. kk=1
  361. if down==0:
  362. way[0]=2
  363. else:
  364. way[0]=3
  365. way[i]=3
  366. ww=""
  367. while kk<n*n:
  368. if kk%n==0:
  369. ww=ww+"\n"
  370. if down==0:
  371. if way[kk]==2 or way[f[(n-1-int(kk/n))*n+kk%n]]==4:
  372. ww=ww+"→"
  373. elif way[kk]==3 or way[f[(n-1-int(kk/n))*n+kk%n]]==3:
  374. ww=ww+"↓"
  375. elif way[kk]==4 or way[f[(n-1-int(kk/n))*n+kk%n]]==2:
  376. ww=ww+"←"
  377. elif way[kk]==1 or way[f[(n-1-int(kk/n))*n+kk%n]]==1:
  378. ww=ww+"↑"
  379. else:
  380. ww=ww+" "
  381. else:
  382. kl=(kk%n)*n+int(kk/n)
  383. ll=(n-int(kl/n)-1)*n+kl%n
  384. if way[kl]==3 or way[f[ll]]==3:
  385. ww=ww+"→"
  386. elif way[kl]==2 or way[f[ll]]==4:
  387. ww=ww+"↓"
  388. elif way[kl]==1 or way[f[ll]]==1:
  389. ww=ww+"←"
  390. elif way[kl]==4 or way[f[ll]]==2:
  391. ww=ww+"↑"
  392. else:
  393. ww=ww+" "
  394. kk=kk+1
  395. ww="→"+ww
  396. print(ww)
  397. way.pop(i)
  398. way.insert(i,0)
  399. jj=i
  400. i=f[i]*1
  401. f.pop(jj)
  402. f.insert(jj,-1)
  403. d[st]=0
  404. st=st-1
  405. d[st]=0
  406. if d[st]==0:
  407. way.pop(i)
  408. way.insert(i,0)
  409. dd[st+1]=0
  410. jj=i
  411. i=f[i]*1
  412. f.pop(jj)
  413. f.insert(jj,-1)
  414. st=st-1
  415. return l
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement