Trafficsamples.pas

Un article de Wikipedia.

Version du 27 avril 2008 à 10:08 par Ziglooadmin (Discuter | Contributions)
(diff) ← Version précédente | voir la version courante (diff) | Version suivante → (diff)

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]:='33v2n';
  316. s[6]:='14h2p';
  317. s[7]:='44v2n';
  318. s[8]:='15v2n';
  319. s[9]:='25h2n';
  320. s[10]:='46h3n';
  321. end;
  322. 21:
  323. begin
  324. s[1]:='41h3n';
  325. s[2]:='13v3n';
  326. s[3]:='23h3n';
  327. s[4]:='24h2p';
  328. s[5]:='44v3n';
  329. s[6]:='35v2n';
  330. s[7]:='16h2n';
  331. end;
  332. 22:
  333. begin
  334. s[1]:='11v2n';
  335. s[2]:='21h3n';
  336. s[3]:='61v2n';
  337. s[4]:='22v2n';
  338. s[5]:='32h2n';
  339. s[6]:='43v3n';
  340. s[7]:='53h2n';
  341. s[8]:='14v2n';
  342. s[9]:='24h2p';
  343. s[10]:='35v2n';
  344. s[11]:='55h2n';
  345. s[12]:='46h3n';
  346. end;
  347. 23:
  348. begin
  349. s[1]:='31h3n';
  350. s[2]:='32v2n';
  351. s[3]:='42v2n';
  352. s[4]:='52h2n';
  353. s[5]:='53h2n';
  354. s[6]:='34v2n';
  355. s[7]:='44h2p';
  356. s[8]:='64v3n';
  357. s[9]:='45h2n';
  358. s[10]:='36h3n';
  359. end;
  360. 24:
  361. begin
  362. s[1]:='11h2n';
  363. s[2]:='51v2n';
  364. s[3]:='12h3n';
  365. s[4]:='13v2n';
  366. s[5]:='23h2n';
  367. s[6]:='53v2n';
  368. s[7]:='24v2n';
  369. s[8]:='34h2p';
  370. s[9]:='35v2n';
  371. s[10]:='46h2n';
  372. end;
  373. 25:
  374. begin
  375. s[1]:='21v2n';
  376. s[2]:='41v2n';
  377. s[3]:='51h2n';
  378. s[4]:='12v3n';
  379. s[5]:='52h2n';
  380. s[6]:='23h3n';
  381. s[7]:='53v2n';
  382. s[8]:='63v3n';
  383. s[9]:='24h2p';
  384. s[10]:='15h2n';
  385. s[11]:='35v2n';
  386. s[12]:='16h2n';
  387. s[13]:='56h2n';
  388. end;
  389. 26:
  390. begin
  391. s[1]:='31v2n';
  392. s[2]:='41h2n';
  393. s[3]:='61v2n';
  394. s[4]:='12v2n';
  395. s[5]:='23h3n';
  396. s[6]:='53v3n';
  397. s[7]:='63v2n';
  398. s[8]:='14v2n';
  399. s[9]:='24h2p';
  400. s[10]:='44v2n';
  401. s[11]:='25v2n';
  402. s[12]:='46h3n';
  403. end;
  404. 27:
  405. begin
  406. s[1]:='31v2n';
  407. s[2]:='41h3n';
  408. s[3]:='62v3n';
  409. s[4]:='33v2n';
  410. s[5]:='43h2n';
  411. s[6]:='14h2p';
  412. s[7]:='44v3n';
  413. s[8]:='15v2n';
  414. s[9]:='25h2n';
  415. s[10]:='26h2n';
  416. end;
  417. 28:
  418. begin
  419. s[1]:='11h2n';
  420. s[2]:='31h2n';
  421. s[3]:='61v3n';
  422. s[4]:='12v2n';
  423. s[5]:='22v2n';
  424. s[6]:='32h3n';
  425. s[7]:='33v3n';
  426. s[8]:='43h2n';
  427. s[9]:='14h2p';
  428. s[10]:='45v2n';
  429. s[11]:='55h2n';
  430. s[12]:='16h3n';
  431. end;
  432. 29:
  433. begin
  434. s[1]:='11h3n';
  435. s[2]:='41v2n';
  436. s[3]:='61v2n';
  437. s[4]:='12v2n';
  438. s[5]:='22h2n';
  439. s[6]:='23h2n';
  440. s[7]:='43h2n';
  441. s[8]:='63v2n';
  442. s[9]:='14h2p';
  443. s[10]:='34v2n';
  444. s[11]:='54v3n';
  445. s[12]:='16h3n';
  446. end;
  447. 30:
  448. begin
  449. s[1]:='11h2n';
  450. s[2]:='31h2n';
  451. s[3]:='61v3n';
  452. s[4]:='13h2n';
  453. s[5]:='33h2n';
  454. s[6]:='14v3n';
  455. s[7]:='24h2p';
  456. s[8]:='44v2n';
  457. s[9]:='35v2n';
  458. s[10]:='46h3n';
  459. end;
  460. 31:
  461. begin
  462. s[1]:='31v3n';
  463. s[2]:='41h3n';
  464. s[3]:='12h2n';
  465. s[4]:='62v3n';
  466. s[5]:='13v2n';
  467. s[6]:='43h2n';
  468. s[7]:='24h2p';
  469. s[8]:='44v2n';
  470. s[9]:='55h2n';
  471. s[10]:='16h2n';
  472. s[11]:='46h3n';
  473. end;
  474. 32:
  475. begin
  476. s[1]:='11h2n';
  477. s[2]:='41v2n';
  478. s[3]:='61v3n';
  479. s[4]:='12v2n';
  480. s[5]:='23h2n';
  481. s[6]:='43h2n';
  482. s[7]:='14h2p';
  483. s[8]:='34v3n';
  484. s[9]:='45v2n';
  485. s[10]:='16h2n';
  486. s[11]:='56h2n';
  487. end;
  488. 33:
  489. begin
  490. s[1]:='11h3n';
  491. s[2]:='41v2n';
  492. s[3]:='51v2n';
  493. s[4]:='61v3n';
  494. s[5]:='12v2n';
  495. s[6]:='22h2n';
  496. s[7]:='23h2n';
  497. s[8]:='43h2n';
  498. s[9]:='14h2p';
  499. s[10]:='34v3n';
  500. s[11]:='25v2n';
  501. s[12]:='56h2n';
  502. end;
  503. 34:
  504. begin
  505. s[1]:='11h2n';
  506. s[2]:='31v2n';
  507. s[3]:='41h2n';
  508. s[4]:='42v2n';
  509. s[5]:='52h2n';
  510. s[6]:='13h3n';
  511. s[7]:='53v2n';
  512. s[8]:='63v3n';
  513. s[9]:='14h2p';
  514. s[10]:='44v2n';
  515. s[11]:='15v2n';
  516. s[12]:='46h3n';
  517. end;
  518. 35:
  519. begin
  520. s[1]:='11h2n';
  521. s[2]:='41v2n';
  522. s[3]:='51v2n';
  523. s[4]:='12v2n';
  524. s[5]:='22h2n';
  525. s[6]:='23h3n';
  526. s[7]:='14h2p';
  527. s[8]:='34v3n';
  528. s[9]:='44v2n';
  529. s[10]:='64v3n';
  530. s[11]:='46h2n';
  531. end;
  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. }
  609. else
  610. begin
  611. s[1]:='14h2p';
  612. s[2]:='34v2n';
  613. end;
  614. end;
  615. initplateau:=conversion;
  616. end;