Trafficsamples.pas

Un article de Wikipedia.

Solution minimale du jeu Traffic!

  1. function initplateau(n:byte):plistebloc;
  2. type tableau=array [1..18] of string;
  3. var s:tableau;
  4. i:byte;
  5. function conversion:plistebloc;
  6. var lb:plistebloc;
  7. k:byte;
  8. procedure ajoute(v:string);
  9. var t:taille;
  10. dir:direction;
  11. g:genre;
  12. x,y:byte;
  13. begin
  14. x:=StringToInt(v[1]);
  15. y:=StringToInt(v[2]);
  16. case v[3] of
  17. 'h': dir:=hori;
  18. 'v': dir:=verti;
  19. end;
  20. case v[4] of
  21. '2': t:=deux;
  22. '3': t:=trois;
  23. end;
  24. case v[5] of
  25. 'n': g:=normal;
  26. 'p': g:=principal;
  27. end;
  28. lb := ajouterbloc(lb,creerbloc(x,y,dir,t,g));
  29. end;
  30. begin
  31. lb:=nil;
  32. for k:=1 to 18 do
  33. begin
  34. if length(s[k]) <> 0 then
  35. begin
  36. if s[k][5] = 'n' then
  37. ajoute(s[k]);
  38. end;
  39. end;
  40. for k:=1 to 18 do
  41. begin
  42. if length(s[k]) <> 0 then
  43. begin
  44. if s[k][5] = 'p' then
  45. ajoute(s[k]);
  46. end;
  47. end;
  48. conversion:=lb;
  49. end;
  50. begin
  51.  
  52. for i:=1 to 18 do
  53. s[i]:='';
  54.  
  55. case n of
  56. 1:
  57. begin
  58. s[1]:='11v2n';
  59. s[2]:='31h3n';
  60. s[3]:='52h2n';
  61. s[4]:='13v3n';
  62. s[5]:='43v3n';
  63. s[6]:='24h2p';
  64. s[7]:='64v3n';
  65. s[8]:='16h2n';
  66. end;
  67. 2:
  68. begin
  69. s[1]:='11h2n';
  70. s[2]:='31v2n';
  71. s[3]:='41h2n';
  72. s[4]:='52h2n';
  73. s[5]:='13h3n';
  74. s[6]:='53v2n';
  75. s[7]:='63v3n';
  76. s[8]:='14h2p';
  77. s[9]:='44v2n';
  78. s[10]:='15v2n';
  79. s[11]:='46h3n';
  80. end;
  81. 3:
  82. begin
  83. s[1]:='21v2n';
  84. s[2]:='31h2n';
  85. s[3]:='61v3n';
  86. s[4]:='42v3n';
  87. s[5]:='23h2n';
  88. s[6]:='24h2p';
  89. end;
  90. 4:
  91. begin
  92. s[1]:='31h3n';
  93. s[2]:='61v2n';
  94. s[3]:='32v2n';
  95. s[4]:='43h3n';
  96. s[5]:='14v3n';
  97. s[6]:='24h2p';
  98. s[7]:='44v3n';
  99. end;
  100. 5:
  101. begin
  102. s[1]:='11v2n';
  103. s[2]:='51h2n';
  104. s[3]:='52h2n';
  105. s[4]:='13v3n';
  106. s[5]:='23h3n';
  107. s[6]:='53v3n';
  108. s[7]:='63v2n';
  109. s[8]:='24h2p';
  110. s[9]:='44v3n';
  111. s[10]:='65v2n';
  112. s[11]:='16h2n';
  113. end;
  114. 6:
  115. begin
  116. s[1]:='11v2n';
  117. s[2]:='41h3n';
  118. s[3]:='32v2n';
  119. s[4]:='42v3n';
  120. s[5]:='13h2n';
  121. s[6]:='53v3n';
  122. s[7]:='63v3n';
  123. s[8]:='24h2p';
  124. s[9]:='15h2n';
  125. s[10]:='45v2n';
  126. s[11]:='16h2n';
  127. end;
  128. 7:
  129. begin
  130. s[1]:='41v2n';
  131. s[2]:='33h2n';
  132. s[3]:='63v2n';
  133. s[4]:='24h2p';
  134. s[5]:='44v2n';
  135. s[6]:='25v2n';
  136. s[7]:='55v2n';
  137. s[8]:='65v2n';
  138. s[9]:='36h2n';
  139. end;
  140. 8:
  141. begin
  142. s[1]:='11h2n';
  143. s[2]:='31v2n';
  144. s[3]:='41h3n';
  145. s[4]:='12h2n';
  146. s[5]:='42h3n';
  147. s[6]:='13h2n';
  148. s[7]:='33v2n';
  149. s[8]:='43v2n';
  150. s[9]:='53h2n';
  151. s[10]:='14h2p';
  152. s[11]:='54v2n';
  153. s[12]:='64v3n';
  154. s[13]:='35h2n';
  155. s[14]:='46h2n';
  156. end;
  157. 9:
  158. begin
  159. s[1]:='11v3n';
  160. s[2]:='31v2n';
  161. s[3]:='61v2n';
  162. s[4]:='52v3n';
  163. s[5]:='23h3n';
  164. s[6]:='63v2n';
  165. s[7]:='14h2p';
  166. s[8]:='44v2n';
  167. s[9]:='25v2n';
  168. s[10]:='55h2n';
  169. s[11]:='36h2n';
  170. s[12]:='56h2n';
  171. end;
  172. 10:
  173. begin
  174. s[1]:='11h2n';
  175. s[2]:='41v2n';
  176. s[3]:='51h2n';
  177. s[4]:='12v3n';
  178. s[5]:='52h2n';
  179. s[6]:='23h3n';
  180. s[7]:='63v3n';
  181. s[8]:='24h2p';
  182. s[9]:='15h2n';
  183. s[10]:='35v2n';
  184. s[11]:='16h2n';
  185. s[12]:='56h2n';
  186. end;
  187. 11:
  188. begin
  189. s[1]:='31h3n';
  190. s[2]:='61v2n';
  191. s[3]:='32v2n';
  192. s[4]:='43h3n';
  193. s[5]:='14v3n';
  194. s[6]:='24h2p';
  195. s[7]:='44v3n';
  196. s[8]:='26h2n';
  197. end;
  198. 12:
  199. begin
  200. s[1]:='11h3n';
  201. s[2]:='51v2n';
  202. s[3]:='33v3n';
  203. s[4]:='43h3n';
  204. s[5]:='14h2p';
  205. s[6]:='64v3n';
  206. s[7]:='15v2n';
  207. s[8]:='26h2n';
  208. end;
  209. 13:
  210. begin
  211. s[1]:='11v3n';
  212. s[2]:='21h2n';
  213. s[3]:='41v2n';
  214. s[4]:='51h2n';
  215. s[5]:='52h2n';
  216. s[6]:='23v2n';
  217. s[7]:='43h2n';
  218. s[8]:='63v3n';
  219. s[9]:='34v2n';
  220. s[10]:='44h2p';
  221. s[11]:='55v2n';
  222. s[12]:='16h2n';
  223. s[13]:='36h2n';
  224. end;
  225. 14:
  226. begin
  227. s[1]:='11h2n';
  228. s[2]:='31v2n';
  229. s[3]:='52h2n';
  230. s[4]:='13v2n';
  231. s[5]:='23v2n';
  232. s[6]:='33h2n';
  233. s[7]:='53v2n';
  234. s[8]:='63v2n';
  235. s[9]:='34h2p';
  236. s[10]:='35v2n';
  237. s[11]:='55h2n';
  238. s[12]:='16h2n';
  239. end;
  240. 15:
  241. begin
  242. s[1]:='21h2n';
  243. s[2]:='41h2n';
  244. s[3]:='12v3n';
  245. s[4]:='22v3n';
  246. s[5]:='32v2n';
  247. s[6]:='42v2n';
  248. s[7]:='52h2n';
  249. s[8]:='53v3n';
  250. s[9]:='63v3n';
  251. s[10]:='34h2p';
  252. s[11]:='15h2n';
  253. s[12]:='35h2n';
  254. s[13]:='26h2n';
  255. s[14]:='46h2n';
  256. end;
  257. 16:
  258. begin
  259. s[1]:='11h2n';
  260. s[2]:='32v3n';
  261. s[3]:='23v2n';
  262. s[4]:='43h3n';
  263. s[5]:='14v2n';
  264. s[6]:='44h2p';
  265. s[7]:='64v3n';
  266. s[8]:='35h2n';
  267. s[9]:='55v2n';
  268. s[10]:='16h2n';
  269. s[11]:='36h2n';
  270. end;
  271. 17:
  272. begin
  273. s[1]:='11h3n';
  274. s[2]:='41v3n';
  275. s[3]:='51v2n';
  276. s[4]:='61v2n';
  277. s[5]:='12h3n';
  278. s[6]:='13h2n';
  279. s[7]:='33v2n';
  280. s[8]:='14h2p';
  281. s[9]:='15v2n';
  282. s[10]:='35h2n';
  283. s[11]:='55h2n';
  284. s[12]:='26h3n';
  285. end;
  286. 18:
  287. begin
  288. s[1]:='11h3n';
  289. s[2]:='12v3n';
  290. s[3]:='22h2n';
  291. s[4]:='23h3n';
  292. s[5]:='24h2p';
  293. s[6]:='44v3n';
  294. s[7]:='15h2n';
  295. s[8]:='35v2n';
  296. s[9]:='16h2n';
  297. end;
  298. 19:
  299. begin
  300. s[1]:='12h3n';
  301. s[2]:='52v2n';
  302. s[3]:='23v2n';
  303. s[4]:='33h2n';
  304. s[5]:='34h2p';
  305. s[6]:='54v2n';
  306. s[7]:='35v2n';
  307. s[8]:='46h2n';
  308. end;
  309. 20:
  310. begin
  311. s[1]:='31v2n';
  312. s[2]:='41h3n';
  313. s[3]:='42h2n';
  314. s[4]:='62v3n';
  315. s[5]:='14h2p';
  316. s[6]:='44v2n';
  317. s[7]:='15v2n';
  318. s[8]:='25h2n';
  319. s[9]:='46h3n';
  320. end;
  321. 21:
  322. begin
  323. s[1]:='41h3n';
  324. s[2]:='13v3n';
  325. s[3]:='23h3n';
  326. s[4]:='24h2p';
  327. s[5]:='44v3n';
  328. s[6]:='35v2n';
  329. s[7]:='16h2n';
  330. end;
  331. 22:
  332. begin
  333. s[1]:='11v2n';
  334. s[2]:='21h3n';
  335. s[3]:='61v2n';
  336. s[4]:='22v2n';
  337. s[5]:='32h2n';
  338. s[6]:='43v3n';
  339. s[7]:='53h2n';
  340. s[8]:='14v2n';
  341. s[9]:='24h2p';
  342. s[10]:='35v2n';
  343. s[11]:='55h2n';
  344. s[12]:='46h3n';
  345. end;
  346. 23:
  347. begin
  348. s[1]:='31h3n';
  349. s[2]:='32v2n';
  350. s[3]:='42v2n';
  351. s[4]:='52h3n';
  352. s[5]:='53h3n';
  353. s[6]:='34v2n';
  354. s[7]:='44h2p';
  355. s[8]:='64v3n';
  356. s[9]:='45h2n';
  357. s[10]:='36h3n';
  358. end;
  359. 24:
  360. begin
  361. s[1]:='11h2n';
  362. s[2]:='51v2n';
  363. s[3]:='12h3n';
  364. s[4]:='13v2n';
  365. s[5]:='23h2n';
  366. s[6]:='53v2n';
  367. s[7]:='24v2n';
  368. s[8]:='34h2p';
  369. s[9]:='35v2n';
  370. s[10]:='46h2n';
  371. end;
  372. 25:
  373. begin
  374. s[1]:='21v2n';
  375. s[2]:='41v2n';
  376. s[3]:='51h2n';
  377. s[4]:='12v3n';
  378. s[5]:='52h2n';
  379. s[6]:='23h3n';
  380. s[7]:='53v2n';
  381. s[8]:='63v3n';
  382. s[9]:='24h2p';
  383. s[10]:='15h2n';
  384. s[11]:='35v2n';
  385. s[12]:='16h2n';
  386. s[13]:='56h2n';
  387. end;
  388. 26:
  389. begin
  390. s[1]:='31v2n';
  391. s[2]:='41h2n';
  392. s[3]:='61v2n';
  393. s[4]:='12v2n';
  394. s[5]:='23h3n';
  395. s[6]:='53v3n';
  396. s[7]:='63v2n';
  397. s[8]:='14v2n';
  398. s[9]:='24h2p';
  399. s[10]:='44v2n';
  400. s[11]:='25v2n';
  401. s[12]:='46h3';
  402. end;
  403. 27:
  404. begin
  405. s[1]:='31v2n';
  406. s[2]:='41h3n';
  407. s[3]:='62v3n';
  408. s[4]:='33v2n';
  409. s[5]:='43h2n';
  410. s[6]:='14h2p';
  411. s[7]:='44v3n';
  412. s[8]:='15v2n';
  413. s[9]:='25h2n';
  414. s[10]:='26h2n';
  415. end;
  416. 28:
  417. begin
  418. s[1]:='11h2n';
  419. s[2]:='31h2n';
  420. s[3]:='61v3n';
  421. s[4]:='12v2n';
  422. s[5]:='22v2n';
  423. s[6]:='32h3n';
  424. s[7]:='33v3n';
  425. s[8]:='43h2n';
  426. s[9]:='14h2p';
  427. s[10]:='45v2n';
  428. s[11]:='55h2n';
  429. s[12]:='16h3n';
  430. end;
  431. 29:
  432. begin
  433. s[1]:='11h3n';
  434. s[2]:='41v2n';
  435. s[3]:='61v2n';
  436. s[4]:='12v2n';
  437. s[5]:='22h2n';
  438. s[6]:='23h2n';
  439. s[7]:='43h2n';
  440. s[8]:='63v2n';
  441. s[9]:='14h2p';
  442. s[10]:='34v2n';
  443. s[11]:='54v3n';
  444. s[12]:='16h3n';
  445. end;
  446. {30:
  447.  begin
  448.   s[1]:='11h2n';
  449.   s[2]:='31h2n';
  450.   s[3]:='61v3n';
  451.   s[4]:='13h2n';
  452.   s[5]:='33h2n';
  453.   s[6]:='14v3n';
  454.   s[7]:='24h2p';
  455.   s[8]:='44v2n';
  456.   s[9]:='35v2n';
  457.   s[10]:='46h3n';
  458.  end;
  459. 31:
  460.  begin
  461.   s[1]:='31v3n';
  462.   s[2]:='41h3n';
  463.   s[3]:='12h2n';
  464.   s[4]:='62v3n';
  465.   s[5]:='13v2n';
  466.   s[6]:='43h2n';
  467.   s[7]:='24h2p';
  468.   s[8]:='44v2n';
  469.   s[9]:='55h2h';
  470.   s[10]:='16h2n';
  471.   s[11]:='46h3n';
  472.  end;
  473. 32:
  474.  begin
  475.   s[1]:='11h2n';
  476.   s[2]:='41v2n';
  477.   s[3]:='61v3n';
  478.   s[4]:='12v2n';
  479.   s[5]:='23h2n';
  480.   s[6]:='43h2n';
  481.   s[7]:='14h2p';
  482.   s[8]:='34v3n';
  483.   s[9]:='45v2n';
  484.   s[10]:='16h2n';
  485.   s[11]:='56h2n';
  486.  end;
  487. 33:
  488.  begin
  489.   s[1]:='11h3n';
  490.   s[2]:='41v2n';
  491.   s[3]:='51v2n';
  492.   s[4]:='61v3n';
  493.   s[5]:='12v2n';
  494.   s[6]:='22h2n';
  495.   s[7]:='23h2n';
  496.   s[8]:='43h2n';
  497.   s[9]:='14h2p';
  498.   s[10]:='34v3n';
  499.   s[11]:='25v2n';
  500.   s[12]:='56h2n';
  501.  end;
  502. 34:
  503.  begin
  504.   s[1]:='11h2n';
  505.   s[2]:='31v2n';
  506.   s[3]:='41h2n';
  507.   s[4]:='42v2n';
  508.   s[5]:='52h2n';
  509.   s[6]:='13h3n';
  510.   s[7]:='53v2n';
  511.   s[8]:='63v3n';
  512.   s[9]:='14h2p';
  513.   s[10]:='44v2n';
  514.   s[11]:='15v2n';
  515.   s[12]:='46h3n';
  516.  end;
  517. 35:
  518.  begin
  519.   s[1]:='11h2n';
  520.   s[2]:='41v2n';
  521.   s[3]:='51v2n';
  522.   s[4]:='12v2n';
  523.   s[5]:='22h2n';
  524.   s[6]:='23h3n';
  525.   s[7]:='14h2p';
  526.   s[8]:='34v3n';
  527.   s[9]:='44v2n';
  528.   s[10]:='64v3n';
  529.   s[11]:='46h2n';
  530.  end;
  531. }
  532. 36:
  533. begin
  534. s[1]:='11h2n';
  535. s[2]:='31v2n';
  536. s[3]:='42v2n';
  537. s[4]:='52h2n';
  538. s[5]:='13h3n';
  539. s[6]:='63v3n';
  540. s[7]:='14v3n';
  541. s[8]:='24v2n';
  542. s[9]:='34h2p';
  543. s[10]:='35h2n';
  544. s[11]:='26h3n';
  545. s[12]:='56h2n';
  546. end;
  547. 37:
  548. begin
  549. s[1]:='11h2n';
  550. s[2]:='41v2n';
  551. s[3]:='51h2n';
  552. s[4]:='12v3n';
  553. s[5]:='52h2n';
  554. s[6]:='23h3n';
  555. s[7]:='53v3n';
  556. s[8]:='63v3n';
  557. s[9]:='24h2p';
  558. s[10]:='15h2n';
  559. s[11]:='35v2n';
  560. s[12]:='16h2n';
  561. s[13]:='56h2n';
  562. end;
  563. 38:
  564. begin
  565. s[1]:='31v2n';
  566. s[2]:='41h3n';
  567. s[3]:='42h2n';
  568. s[4]:='62v3n';
  569. s[5]:='33v2n';
  570. s[6]:='43h2n';
  571. s[7]:='14h2p';
  572. s[8]:='44v2n';
  573. s[9]:='15v2n';
  574. s[10]:='25h2n';
  575. s[11]:='46h3n';
  576. end;
  577. 39:
  578. begin
  579. s[1]:='11v2n';
  580. s[2]:='21v2n';
  581. s[3]:='31h2n';
  582. s[4]:='32h2n';
  583. s[5]:='62v3n';
  584. s[6]:='13h2n';
  585. s[7]:='33v2n';
  586. s[8]:='43h2n';
  587. s[9]:='14h2p';
  588. s[10]:='44v2n';
  589. s[11]:='35v2n';
  590. s[12]:='46h3n';
  591. end;
  592. 40:
  593. begin
  594. s[1]:='11h2n';
  595. s[2]:='31v2n';
  596. s[3]:='41h2n';
  597. s[4]:='42v2n';
  598. s[5]:='52h2n';
  599. s[6]:='13h3n';
  600. s[7]:='63v3n';
  601. s[8]:='14v3n';
  602. s[9]:='24v2n';
  603. s[10]:='34v2n';
  604. s[11]:='44h2p';
  605. s[12]:='55v2n';
  606. s[13]:='26h2n';
  607. end;
  608. else
  609. begin
  610. s[1]:='14h2p';
  611. s[2]:='34v2n';
  612. end;
  613. end;
  614. initplateau:=conversion;
  615. end;