chrislo-sourceclassifier 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. data/Manifest +0 -312
  2. data/Rakefile +2 -2
  3. data/sourceclassifier.gemspec +6 -6
  4. metadata +4 -316
  5. data/sources/gcc/ackermann.gcc-2.gcc +0 -93
  6. data/sources/gcc/ackermann.gcc-3.gcc +0 -20
  7. data/sources/gcc/ary.gcc +0 -40
  8. data/sources/gcc/binarytrees.gcc +0 -136
  9. data/sources/gcc/binarytrees.gcc-2.gcc +0 -140
  10. data/sources/gcc/binarytrees.gcc-3.gcc +0 -134
  11. data/sources/gcc/chameneos.gcc +0 -117
  12. data/sources/gcc/chameneos.gcc-2.gcc +0 -134
  13. data/sources/gcc/chameneos.gcc-3.gcc +0 -120
  14. data/sources/gcc/chameneosredux.gcc +0 -306
  15. data/sources/gcc/echo.gcc +0 -144
  16. data/sources/gcc/except.gcc +0 -52
  17. data/sources/gcc/fannkuch.gcc +0 -105
  18. data/sources/gcc/fannkuch.gcc-2.gcc +0 -94
  19. data/sources/gcc/fasta.gcc +0 -158
  20. data/sources/gcc/fasta.gcc-2.gcc +0 -132
  21. data/sources/gcc/fasta.gcc-3.gcc +0 -145
  22. data/sources/gcc/fasta.gcc-4.gcc +0 -141
  23. data/sources/gcc/fibo.gcc +0 -20
  24. data/sources/gcc/harmonic.gcc +0 -22
  25. data/sources/gcc/hash.gcc +0 -31
  26. data/sources/gcc/hash2.gcc +0 -38
  27. data/sources/gcc/heapsort.gcc +0 -72
  28. data/sources/gcc/hello.gcc-2.gcc +0 -12
  29. data/sources/gcc/hello.gcc-3.gcc +0 -20
  30. data/sources/gcc/knucleotide.gcc +0 -173
  31. data/sources/gcc/knucleotide.gcc-2.gcc +0 -168
  32. data/sources/gcc/lists.gcc +0 -226
  33. data/sources/gcc/magicsquares.gcc +0 -378
  34. data/sources/gcc/mandelbrot.gcc +0 -84
  35. data/sources/gcc/mandelbrot.gcc-2.gcc +0 -63
  36. data/sources/gcc/mandelbrot.gcc-3.gcc +0 -91
  37. data/sources/gcc/mandelbrot.gcc-4.gcc +0 -78
  38. data/sources/gcc/matrix.gcc +0 -66
  39. data/sources/gcc/message.gcc-2.gcc +0 -72
  40. data/sources/gcc/message.gcc-3.gcc +0 -64
  41. data/sources/gcc/methcall.gcc +0 -89
  42. data/sources/gcc/moments.gcc +0 -120
  43. data/sources/gcc/nbody.gcc +0 -142
  44. data/sources/gcc/nbody.gcc-2.gcc +0 -143
  45. data/sources/gcc/nbody.gcc-3.gcc +0 -142
  46. data/sources/gcc/nestedloop.gcc +0 -25
  47. data/sources/gcc/nsieve.gcc +0 -35
  48. data/sources/gcc/nsievebits.gcc-2.gcc +0 -37
  49. data/sources/gcc/nsievebits.gcc-3.gcc +0 -53
  50. data/sources/gcc/objinst.gcc +0 -95
  51. data/sources/gcc/partialsums.gcc +0 -86
  52. data/sources/gcc/partialsums.gcc-3.gcc +0 -81
  53. data/sources/gcc/partialsums.gcc-4.gcc +0 -68
  54. data/sources/gcc/pidigits.gcc +0 -105
  55. data/sources/gcc/primes.gcc +0 -75
  56. data/sources/gcc/prodcons.gcc +0 -86
  57. data/sources/gcc/random.gcc +0 -29
  58. data/sources/gcc/raytracer.gcc +0 -125
  59. data/sources/gcc/raytracer.gcc-2.gcc +0 -181
  60. data/sources/gcc/recursive.gcc +0 -68
  61. data/sources/gcc/recursive.gcc-2.gcc +0 -55
  62. data/sources/gcc/regexdna.gcc-2.gcc +0 -126
  63. data/sources/gcc/regexmatch.gcc +0 -136
  64. data/sources/gcc/revcomp.gcc +0 -85
  65. data/sources/gcc/revcomp.gcc-2.gcc +0 -88
  66. data/sources/gcc/revcomp.gcc-4.gcc +0 -71
  67. data/sources/gcc/reversefile.gcc +0 -103
  68. data/sources/gcc/reversefile.gcc-2.gcc +0 -56
  69. data/sources/gcc/sieve.gcc +0 -34
  70. data/sources/gcc/spectralnorm.gcc +0 -54
  71. data/sources/gcc/spellcheck.gcc +0 -72
  72. data/sources/gcc/spellcheck.gcc-2.gcc +0 -61
  73. data/sources/gcc/strcat.gcc +0 -38
  74. data/sources/gcc/sumcol.gcc-2.gcc +0 -98
  75. data/sources/gcc/sumcol.gcc-3.gcc +0 -22
  76. data/sources/gcc/sumcol.gcc-4.gcc +0 -18
  77. data/sources/gcc/sumcol.gcc-5.gcc +0 -32
  78. data/sources/gcc/takfp.gcc +0 -23
  79. data/sources/gcc/tcp-stream.gcc +0 -122
  80. data/sources/gcc/tcpecho.gcc +0 -122
  81. data/sources/gcc/tcpecho.gcc-2.gcc +0 -136
  82. data/sources/gcc/tcprequest.gcc +0 -122
  83. data/sources/gcc/threadring.gcc +0 -73
  84. data/sources/gcc/wc.gcc +0 -52
  85. data/sources/gcc/wc.gcc-2.gcc +0 -40
  86. data/sources/gcc/wc.gcc-3.gcc +0 -46
  87. data/sources/gcc/wordfreq.gcc-2.gcc +0 -85
  88. data/sources/perl/ackermann.perl +0 -28
  89. data/sources/perl/ackermann.perl-2.perl +0 -25
  90. data/sources/perl/ackermann.perl-3.perl +0 -20
  91. data/sources/perl/ackermann.perl-4.perl +0 -18
  92. data/sources/perl/ary.perl +0 -25
  93. data/sources/perl/ary.perl-2.perl +0 -23
  94. data/sources/perl/binarytrees.perl +0 -66
  95. data/sources/perl/binarytrees.perl-2.perl +0 -71
  96. data/sources/perl/chameneos.perl +0 -67
  97. data/sources/perl/echo.perl +0 -81
  98. data/sources/perl/except.perl +0 -73
  99. data/sources/perl/fannkuch.perl +0 -44
  100. data/sources/perl/fannkuch.perl-2.perl +0 -38
  101. data/sources/perl/fasta.perl +0 -112
  102. data/sources/perl/fasta.perl-2.perl +0 -135
  103. data/sources/perl/fasta.perl-4.perl +0 -122
  104. data/sources/perl/fibo.perl +0 -15
  105. data/sources/perl/fibo.perl-2.perl +0 -0
  106. data/sources/perl/fibo.perl-3.perl +0 -0
  107. data/sources/perl/harmonic.perl +0 -7
  108. data/sources/perl/hash.perl +0 -23
  109. data/sources/perl/hash.perl-2.perl +0 -17
  110. data/sources/perl/hash.perl-3.perl +0 -24
  111. data/sources/perl/hash2.perl +0 -16
  112. data/sources/perl/heapsort.perl +0 -65
  113. data/sources/perl/heapsort.perl-2.perl +0 -0
  114. data/sources/perl/hello.perl +0 -5
  115. data/sources/perl/knucleotide.perl-2.perl +0 -30
  116. data/sources/perl/lists.perl +0 -48
  117. data/sources/perl/mandelbrot.perl-2.perl +0 -32
  118. data/sources/perl/matrix.perl +0 -59
  119. data/sources/perl/matrix.perl-2.perl +0 -0
  120. data/sources/perl/matrix.perl-3.perl +0 -0
  121. data/sources/perl/message.perl +0 -27
  122. data/sources/perl/methcall.perl +0 -66
  123. data/sources/perl/moments.perl +0 -44
  124. data/sources/perl/nbody.perl +0 -108
  125. data/sources/perl/nestedloop.perl +0 -28
  126. data/sources/perl/nsieve.perl-2.perl +0 -41
  127. data/sources/perl/nsieve.perl-4.perl +0 -43
  128. data/sources/perl/nsievebits.perl +0 -37
  129. data/sources/perl/objinst.perl +0 -73
  130. data/sources/perl/partialsums.perl-3.perl +0 -31
  131. data/sources/perl/pidigits.perl +0 -52
  132. data/sources/perl/pidigits.perl-2.perl +0 -47
  133. data/sources/perl/process.perl +0 -50
  134. data/sources/perl/prodcons.perl +0 -47
  135. data/sources/perl/random.perl-4.perl +0 -17
  136. data/sources/perl/recursive.perl-2.perl +0 -57
  137. data/sources/perl/regexdna.perl +0 -48
  138. data/sources/perl/regexdna.perl-2.perl +0 -43
  139. data/sources/perl/regexdna.perl-3.perl +0 -50
  140. data/sources/perl/regexdna.perl-4.perl +0 -49
  141. data/sources/perl/regexdna.perl-5.perl +0 -42
  142. data/sources/perl/regexdna.perl-6.perl +0 -43
  143. data/sources/perl/regexmatch.perl +0 -35
  144. data/sources/perl/revcomp.perl-2.perl +0 -34
  145. data/sources/perl/reversefile.perl +0 -8
  146. data/sources/perl/reversefile.perl-2.perl +0 -0
  147. data/sources/perl/reversefile.perl-3.perl +0 -0
  148. data/sources/perl/sieve.perl +0 -23
  149. data/sources/perl/spectralnorm.perl-2.perl +0 -54
  150. data/sources/perl/spellcheck.perl +0 -24
  151. data/sources/perl/strcat.perl +0 -13
  152. data/sources/perl/strcat.perl-2.perl +0 -0
  153. data/sources/perl/sumcol.perl +0 -8
  154. data/sources/perl/takfp.perl +0 -23
  155. data/sources/perl/takfp.perl-3.perl +0 -20
  156. data/sources/perl/tcpecho.perl +0 -61
  157. data/sources/perl/tcprequest.perl +0 -61
  158. data/sources/perl/tcpstream.perl +0 -61
  159. data/sources/perl/threadring.perl +0 -55
  160. data/sources/perl/threadring.perl-2.perl +0 -43
  161. data/sources/perl/wc.perl +0 -20
  162. data/sources/perl/wc.perl-2.perl +0 -14
  163. data/sources/perl/wordfreq.perl +0 -22
  164. data/sources/perl/wordfreq.perl-3.perl +0 -0
  165. data/sources/perl/wordfreq.perl3.perl +0 -0
  166. data/sources/python/ackermann.python +0 -21
  167. data/sources/python/ary.python +0 -19
  168. data/sources/python/binarytrees.python +0 -39
  169. data/sources/python/binarytrees.python-3.python +0 -44
  170. data/sources/python/chameneos.python-6.python +0 -73
  171. data/sources/python/chameneosredux.python +0 -126
  172. data/sources/python/chameneosredux.python-2.python +0 -122
  173. data/sources/python/dispatch.python +0 -176
  174. data/sources/python/dispatch.python-2.python +0 -136
  175. data/sources/python/echo.python +0 -64
  176. data/sources/python/except.python +0 -62
  177. data/sources/python/fannkuch.python +0 -50
  178. data/sources/python/fannkuch.python-2.python +0 -54
  179. data/sources/python/fasta.python-2.python +0 -79
  180. data/sources/python/fibo.python +0 -17
  181. data/sources/python/fibo.python-2.python +0 -0
  182. data/sources/python/fibo.python-3.python +0 -0
  183. data/sources/python/harmonic.python-2.python +0 -9
  184. data/sources/python/hash.python +0 -21
  185. data/sources/python/hash.python-2.python +0 -0
  186. data/sources/python/hash2.python +0 -30
  187. data/sources/python/heapsort.python-3.python +0 -66
  188. data/sources/python/hello.python +0 -5
  189. data/sources/python/implicitode.python +0 -231
  190. data/sources/python/knucleotide.python +0 -55
  191. data/sources/python/lists.python +0 -44
  192. data/sources/python/magicsquares.python +0 -145
  193. data/sources/python/mandelbrot.python +0 -44
  194. data/sources/python/mandelbrot.python-2.python +0 -35
  195. data/sources/python/mandelbrot.python-3.python +0 -46
  196. data/sources/python/matrix.python +0 -34
  197. data/sources/python/matrix.python-2.python +0 -23
  198. data/sources/python/message.python +0 -24
  199. data/sources/python/message.python-2.python +0 -20
  200. data/sources/python/message.python-3.python +0 -19
  201. data/sources/python/meteor.python +0 -210
  202. data/sources/python/meteor.python-2.python +0 -192
  203. data/sources/python/methcall.python +0 -51
  204. data/sources/python/moments.python +0 -65
  205. data/sources/python/nbody.python +0 -123
  206. data/sources/python/nbody.python-2.python +0 -120
  207. data/sources/python/nestedloop.python +0 -24
  208. data/sources/python/nsieve.python +0 -27
  209. data/sources/python/nsieve.python-2.python +0 -23
  210. data/sources/python/nsieve.python-4.python +0 -25
  211. data/sources/python/nsievebits.python +0 -27
  212. data/sources/python/nsievebits.python-2.python +0 -43
  213. data/sources/python/objinst.python +0 -53
  214. data/sources/python/partialsums.python +0 -37
  215. data/sources/python/partialsums.python-2.python +0 -35
  216. data/sources/python/partialsums.python-3.python +0 -48
  217. data/sources/python/pidigits.python +0 -38
  218. data/sources/python/pidigits.python-3.python +0 -63
  219. data/sources/python/pidigits.python-4.python +0 -24
  220. data/sources/python/process.python +0 -51
  221. data/sources/python/process.python-2.python +0 -133
  222. data/sources/python/prodcons.python +0 -51
  223. data/sources/python/prodcons.python-2.python +0 -0
  224. data/sources/python/random.python +0 -27
  225. data/sources/python/raytracer.python +0 -203
  226. data/sources/python/recursive.python +0 -35
  227. data/sources/python/regexdna.python +0 -39
  228. data/sources/python/regexdna.python-2.python +0 -34
  229. data/sources/python/regexmatch.python +0 -36
  230. data/sources/python/revcomp.python-3.python +0 -31
  231. data/sources/python/reversefile.python +0 -13
  232. data/sources/python/reversefile.python-2.python +0 -0
  233. data/sources/python/reversefile.python-3.python +0 -0
  234. data/sources/python/sieve.python +0 -50
  235. data/sources/python/spectralnorm.python-2.python +0 -36
  236. data/sources/python/spellcheck.python +0 -17
  237. data/sources/python/strcat.python +0 -35
  238. data/sources/python/strcat.python-2.python +0 -0
  239. data/sources/python/sumcol.python-2.python +0 -0
  240. data/sources/python/sumcol.python-3.python +0 -0
  241. data/sources/python/takfp.python +0 -19
  242. data/sources/python/tcpecho.python +0 -67
  243. data/sources/python/tcprequest.python +0 -67
  244. data/sources/python/tcpstream.python +0 -67
  245. data/sources/python/threadring.python +0 -47
  246. data/sources/python/threadring.python-2.python +0 -40
  247. data/sources/python/threadring.python-3.python +0 -34
  248. data/sources/python/wc.python-2.python +0 -19
  249. data/sources/python/wordfreq.python +0 -43
  250. data/sources/python/wordfreq.python-2.python +0 -0
  251. data/sources/python/wordfreq.python-3.python +0 -28
  252. data/sources/python/wordfreq.python-4.python +0 -38
  253. data/sources/python/wordfreq.python-5.python +0 -39
  254. data/sources/ruby/ackermann.ruby +0 -17
  255. data/sources/ruby/ackermann.ruby-5.ruby +0 -153
  256. data/sources/ruby/ary.ruby +0 -22
  257. data/sources/ruby/binarytrees.ruby-2.ruby +0 -55
  258. data/sources/ruby/chameneos.ruby-2.ruby +0 -71
  259. data/sources/ruby/dispatch.ruby +0 -114
  260. data/sources/ruby/echo.ruby +0 -41
  261. data/sources/ruby/except.ruby +0 -61
  262. data/sources/ruby/except.ruby-2.ruby +0 -61
  263. data/sources/ruby/fannkuch.ruby +0 -42
  264. data/sources/ruby/fasta.ruby +0 -81
  265. data/sources/ruby/fibo.ruby +0 -15
  266. data/sources/ruby/harmonic.ruby-2.ruby +0 -15
  267. data/sources/ruby/hash.ruby +0 -19
  268. data/sources/ruby/hash2.ruby +0 -23
  269. data/sources/ruby/heapsort.ruby +0 -55
  270. data/sources/ruby/hello.ruby +0 -6
  271. data/sources/ruby/knucleotide.ruby-2.ruby +0 -44
  272. data/sources/ruby/lists.ruby +0 -46
  273. data/sources/ruby/mandelbrot.ruby-3.ruby +0 -63
  274. data/sources/ruby/matrix.ruby +0 -40
  275. data/sources/ruby/matrix.ruby-2.ruby +0 -30
  276. data/sources/ruby/message.ruby +0 -29
  277. data/sources/ruby/message.ruby-2.ruby +0 -24
  278. data/sources/ruby/meteor.ruby +0 -386
  279. data/sources/ruby/meteor.ruby-2.ruby +0 -561
  280. data/sources/ruby/methcall.ruby +0 -58
  281. data/sources/ruby/methcall.ruby-2.ruby +0 -54
  282. data/sources/ruby/moments.ruby +0 -64
  283. data/sources/ruby/nbody.ruby-2.ruby +0 -145
  284. data/sources/ruby/nestedloop.ruby +0 -22
  285. data/sources/ruby/nsieve.ruby +0 -36
  286. data/sources/ruby/nsieve.ruby-2.ruby +0 -25
  287. data/sources/ruby/nsievebits.ruby-2.ruby +0 -42
  288. data/sources/ruby/objinst.ruby +0 -58
  289. data/sources/ruby/partialsums.ruby +0 -39
  290. data/sources/ruby/pidigits.ruby +0 -92
  291. data/sources/ruby/pidigits.ruby-2.ruby +0 -109
  292. data/sources/ruby/prodcons.ruby +0 -41
  293. data/sources/ruby/random.ruby +0 -17
  294. data/sources/ruby/recursive.ruby-2.ruby +0 -53
  295. data/sources/ruby/regexdna.ruby +0 -32
  296. data/sources/ruby/regexdna.ruby-2.ruby +0 -38
  297. data/sources/ruby/regexmatch.ruby +0 -33
  298. data/sources/ruby/revcomp.ruby +0 -28
  299. data/sources/ruby/reversefile.ruby +0 -7
  300. data/sources/ruby/sieve.ruby +0 -30
  301. data/sources/ruby/spectralnorm.ruby +0 -48
  302. data/sources/ruby/spellcheck.ruby +0 -18
  303. data/sources/ruby/spellcheck.ruby-2.ruby +0 -0
  304. data/sources/ruby/strcat.ruby +0 -12
  305. data/sources/ruby/strcat.ruby-2.ruby +0 -12
  306. data/sources/ruby/sumcol.ruby +0 -12
  307. data/sources/ruby/sumcol.ruby-2.ruby +0 -5
  308. data/sources/ruby/takfp.ruby +0 -15
  309. data/sources/ruby/tcpecho.ruby +0 -45
  310. data/sources/ruby/tcprequest.ruby +0 -45
  311. data/sources/ruby/tcpstream.ruby +0 -45
  312. data/sources/ruby/threadring.ruby +0 -61
  313. data/sources/ruby/threadring.ruby-2.ruby +0 -33
  314. data/sources/ruby/wc.ruby +0 -15
  315. data/sources/ruby/wordfreq.ruby +0 -17
  316. data/sources/ruby/wordfreq.ruby2.ruby +0 -0
@@ -1,226 +0,0 @@
1
- /* -*- mode: c -*-
2
- * $Id: lists.gcc,v 1.1.1.1 2004-05-19 18:10:23 bfulgham Exp $
3
- * http://www.bagley.org/~doug/shootout/
4
- */
5
-
6
- #include <stdio.h>
7
- #include <stdlib.h>
8
- #include <string.h>
9
- #include <unistd.h>
10
-
11
- #define SIZE 10000
12
-
13
- // a simple Double Linked List
14
- // the head node is special, it's val is length of list
15
- typedef struct DLL {
16
- int val;
17
- struct DLL *next; /* points to next or head (if at tail) */
18
- struct DLL *prev; /* points to prev or tail (if at head) */
19
- } DLL;
20
-
21
- inline int list_length(DLL *head) { return(head->val); }
22
- inline int list_empty(DLL *head) { return(list_length(head) == 0); }
23
- inline DLL *list_first(DLL *head) { return(head->next); }
24
- inline DLL *list_last(DLL *head) { return(head->prev); }
25
-
26
- void list_push_tail(DLL *head, DLL *item) {
27
- DLL *tail = head->prev;
28
- tail->next = item;
29
- item->next = head;
30
- head->prev = item;
31
- item->prev = tail;
32
- head->val++;
33
- }
34
-
35
- DLL *list_pop_tail(DLL *head) {
36
- DLL *prev, *tail;
37
- if (list_empty(head)) return(NULL);
38
- tail = head->prev;
39
- prev = tail->prev;
40
- prev->next = head;
41
- head->prev = prev;
42
- head->val--;
43
- return(tail);
44
- }
45
-
46
- void list_push_head(DLL *head, DLL *item) {
47
- DLL *next = head->next;
48
- head->next = item;
49
- next->prev = item;
50
- item->next = next;
51
- item->prev = head;
52
- head->val++;
53
- }
54
-
55
- DLL *list_pop_head(DLL *head) {
56
- DLL *next;
57
- if (list_empty(head)) return(NULL);
58
- next = head->next;
59
- head->next = next->next;
60
- next->next->prev = head;
61
- head->val--;
62
- return(next);
63
- }
64
-
65
- int list_equal(DLL *x, DLL *y) {
66
- DLL *xp, *yp;
67
- // first val's checked will be list lengths
68
- for (xp=x, yp=y; xp->next != x; xp=xp->next, yp=yp->next) {
69
- if (xp->val != yp->val) return(0);
70
- }
71
- if (xp->val != yp->val) return(0);
72
- return(yp->next == y);
73
- }
74
-
75
- void list_print(char *msg, DLL *x) {
76
- DLL *xp, *first = x->next;
77
- int i = 0;
78
- fputs(msg, stdout);
79
- printf("length: %d\n", list_length(x));
80
- for (xp=x->next; xp->next != first; xp=xp->next) {
81
- printf("i:%3d v:%3d n:%3d p:%3d\n", ++i,
82
- xp->val, xp->next->val, xp->prev->val);
83
- }
84
- printf("[last entry points to list head]\n");
85
- printf("[val of next of tail is: %d]\n", xp->next->val);
86
- }
87
-
88
- DLL *list_new() {
89
- DLL *l = (DLL *)malloc(sizeof(DLL));
90
- l->next = l;
91
- l->prev = l;
92
- l->val = 0;
93
- return(l);
94
- }
95
-
96
- /* inclusive sequence 'from' <-> 'to' */
97
- DLL *list_sequence(int from, int to) {
98
- int size, tmp, i, j;
99
- DLL *l;
100
- if (from > to) {
101
- tmp = from; from = to; to = tmp;
102
- }
103
- size = to - from + 1;
104
- l = (DLL *)malloc((size+1) * sizeof(DLL));
105
- from--;
106
- for (i=0, j=1; i<size; ++i, ++j) {
107
- l[i].next = &l[i+1];
108
- l[j].prev = &l[j-1];
109
- l[i].val = from++;
110
- }
111
- l[0].prev = &l[size];
112
- l[size].next = &l[0];
113
- l[size].prev = &l[size-1];
114
- l[size].val = from;
115
- l[0].val = size;
116
- return(l);
117
- }
118
-
119
- DLL *list_copy(DLL *x) {
120
- int i, j, size = list_length(x);
121
- DLL *xp, *l = (DLL *)malloc((size+1) * sizeof(DLL));
122
- for (i=0, j=1, xp=x; i<size; i++, j++, xp=xp->next) {
123
- l[i].next = &l[j];
124
- l[j].prev = &l[i];
125
- l[i].val = xp->val;
126
- }
127
- l[0].prev = &l[size];
128
- l[size].next = &l[0];
129
- l[size].val = list_last(x)->val;
130
- return(l);
131
- }
132
-
133
- void list_reverse (DLL *head) {
134
- DLL *tmp, *p = head;
135
- do {
136
- tmp = p->next;
137
- p->next = p->prev;
138
- p->prev = tmp;
139
- p = tmp;
140
- } while (p != head);
141
- }
142
-
143
- int test_lists() {
144
- int len = 0;
145
- // create a list of integers (li1) from 1 to SIZE
146
- DLL *li1 = list_sequence(1, SIZE);
147
- // copy the list to li2
148
- DLL *li2 = list_copy(li1);
149
- // remove each individual item from left side of li2 and
150
- // append to right side of li3 (preserving order)
151
- DLL *li3 = list_new();
152
- // compare li2 and li1 for equality
153
- if (!list_equal(li2, li1)) {
154
- fprintf(stderr, "li2 and li1 are not equal\n");
155
- exit(1);
156
- }
157
- while (!list_empty(li2)) {
158
- list_push_tail(li3, list_pop_head(li2));
159
- }
160
- // li2 must now be empty
161
- if (!list_empty(li2)) {
162
- fprintf(stderr, "li2 should be empty now\n");
163
- exit(1);
164
- }
165
- // remove each individual item from right side of li3 and
166
- // append to right side of li2 (reversing list)
167
- while (!list_empty(li3)) {
168
- list_push_tail(li2, list_pop_tail(li3));
169
- }
170
- // li3 must now be empty
171
- if (!list_empty(li3)) {
172
- fprintf(stderr, "li3 should be empty now\n");
173
- exit(1);
174
- }
175
- // reverse li1 in place
176
- list_reverse(li1);
177
- // check that li1's first item is now SIZE
178
- if (list_first(li1)->val != SIZE) {
179
- fprintf(stderr, "li1 first value wrong, wanted %d, got %d\n",
180
- SIZE, list_first(li1)->val);
181
- exit(1);
182
- }
183
- // check that li1's last item is now 1
184
- if (list_last(li1)->val != 1) {
185
- fprintf(stderr, "last value wrong, wanted %d, got %d\n",
186
- SIZE, list_last(li1)->val);
187
- exit(1);
188
- }
189
- // check that li2's first item is now SIZE
190
- if (list_first(li2)->val != SIZE) {
191
- fprintf(stderr, "li2 first value wrong, wanted %d, got %d\n",
192
- SIZE, list_first(li2)->val);
193
- exit(1);
194
- }
195
- // check that li2's last item is now 1
196
- if (list_last(li2)->val != 1) {
197
- fprintf(stderr, "last value wrong, wanted %d, got %d\n",
198
- SIZE, list_last(li2)->val);
199
- exit(1);
200
- }
201
- // check that li1's length is still SIZE
202
- if (list_length(li1) != SIZE) {
203
- fprintf(stderr, "li1 size wrong, wanted %d, got %d\n",
204
- SIZE, list_length(li1));
205
- exit(1);
206
- }
207
- // compare li1 and li2 for equality
208
- if (!list_equal(li1, li2)) {
209
- fprintf(stderr, "li1 and li2 are not equal\n");
210
- exit(1);
211
- }
212
- len = list_length(li1);
213
- free(li1);
214
- free(li2);
215
- free(li3);
216
- // return the length of the list
217
- return(len);
218
- }
219
-
220
- int main(int argc, char *argv[]) {
221
- int n = ((argc == 2) ? atoi(argv[1]) : 1);
222
- int result = 0;
223
- while(n--) result = test_lists();
224
- printf("%d\n", result);
225
- return 0;
226
- }
@@ -1,378 +0,0 @@
1
- /* The Computer Language Benchmarks Game
2
- http://shootout.alioth.debian.org/
3
-
4
- contributed contributed by Charlie Brej
5
- */
6
-
7
- #include <stdio.h>
8
- #include <stdlib.h>
9
-
10
- int n=0;
11
- int mn=0;
12
-
13
- typedef struct FfmCache {
14
- int x;
15
- int y;
16
- int pm_count;
17
- int pm[];
18
- }FfmCache, *PtrFfmCache;
19
-
20
- typedef struct Square {
21
- struct Square* next;
22
- PtrFfmCache ffm;
23
- int priority;
24
- int *grid;
25
- int *unused;
26
- }Square, *PtrSquare;
27
-
28
-
29
-
30
- void SquarePrint(PtrSquare square)
31
- {
32
- int x;
33
- int y;
34
- for (y=0; y<n; y++){
35
- for (x=0; x<n; x++){
36
- printf("%d ", square->grid[x+y*n]);
37
- }
38
- printf("\n");
39
- }
40
- return;
41
- }
42
-
43
-
44
-
45
- PtrSquare SquareNew(void)
46
- {
47
- PtrSquare new_square = malloc(sizeof(Square));
48
- new_square->grid = malloc(n * n * sizeof(int));
49
- new_square->unused = malloc(n * n * sizeof(int));
50
- new_square->next=NULL;
51
- new_square->ffm=NULL;
52
- new_square->priority=0;
53
- return new_square;
54
- }
55
-
56
- PtrSquare SquareNewEmpty(void)
57
- {
58
- int i;
59
- PtrSquare new_square = SquareNew();
60
- for (i=0; i<n*n; i++){
61
- new_square->grid[i]=0;
62
- new_square->unused[i]=1;
63
- }
64
- return new_square;
65
- }
66
-
67
-
68
- PtrSquare SquareNewCopy(PtrSquare old_square)
69
- {
70
- int i;
71
- PtrSquare new_square = SquareNew();
72
- for (i=0; i<n*n; i++){
73
- new_square->grid[i]=old_square->grid[i];
74
- new_square->unused[i]=old_square->unused[i];
75
- }
76
- return new_square;
77
- }
78
-
79
- void SquareFree(PtrSquare square)
80
- {
81
- free(square->ffm);
82
- free(square->unused);
83
- free(square);
84
- return ;
85
- }
86
-
87
- void SquareGetRow(PtrSquare square, int row, int* out_array)
88
- {
89
- int i;
90
- for (i=0; i<n; i++){
91
- out_array[i] = square->grid[row*n+i];
92
- }
93
- }
94
-
95
- void SquareGetColumn(PtrSquare square, int column, int* out_array)
96
- {
97
- int i;
98
- for (i=0; i<n; i++){
99
- out_array[i] = square->grid[n*i+column];
100
- }
101
- }
102
-
103
- int IntArraySum(int* data)
104
- {
105
- int i;
106
- int sum = 0;
107
- for (i=0; i<n; i++){
108
- sum += data[i];
109
- }
110
- return sum;
111
- }
112
-
113
- int IntArrayCount0s(int* data)
114
- {
115
- int i;
116
- int count = 0;
117
- for (i=0; i<n; i++)
118
- if(data[i]==0)
119
- count++;
120
- return count;
121
- }
122
-
123
- int SquareNumberPresent(PtrSquare square, int number)
124
- {
125
- int i;
126
- for (i=0; i<n*n; i++){
127
- if (square->grid[i] == number) return 1;
128
- }
129
- return 0;
130
- }
131
-
132
- int SquareEmptyCount(PtrSquare square)
133
- {
134
- int i;
135
- int count=0;
136
- for (i=0; i<n*n; i++){
137
- if (square->grid[i] == 0) count++;
138
- }
139
- return count;
140
- }
141
-
142
- void SquareGetPossibleMoves(PtrSquare square, int x, int y, int* ret_pm, int* ret_pm_count)
143
- {
144
- int cell_groups[4][n];
145
- int cell_group_count=2;
146
- int group;
147
- int i, i2;
148
- int cur_acc;
149
- int highest_candidate = n*n;
150
- int lowest_candidate = 1;
151
-
152
- int one_possible = 0;
153
-
154
-
155
- SquareGetRow(square, y, cell_groups[0]);
156
- SquareGetColumn(square, x, cell_groups[1]);
157
-
158
- *ret_pm_count = 0;
159
- if (x==y) {
160
- for (i=0; i<n; i++)
161
- cell_groups[cell_group_count][i] = square->grid[n*i+i];
162
- cell_group_count++;
163
- }
164
- if (x + y == n - 1) {
165
- for (i=0; i<n; i++)
166
- cell_groups[cell_group_count][i] = square->grid[i + (n - 1 - i) * n];
167
- cell_group_count++;
168
- }
169
-
170
- for (group=0; group<cell_group_count; group++){
171
- int count = 0;
172
- for (i=0; i<n; i++){
173
- if (cell_groups[group][i] == 0){
174
- if (count++) break;
175
- }
176
- }
177
- if (count==1){
178
- int new_one_possible = mn - IntArraySum(cell_groups[group]);
179
- if (one_possible==0){
180
- one_possible = new_one_possible;
181
- if (one_possible<1 || one_possible>n*n || SquareNumberPresent(square, one_possible)) return;
182
- }
183
- if (one_possible != new_one_possible) return;
184
- }
185
- }
186
- if (one_possible){
187
- ret_pm[0] = one_possible;
188
- *ret_pm_count = 1;
189
- return;
190
- }
191
-
192
-
193
- int local_pm_count = 0;
194
- int zeros[cell_group_count];
195
- int highest_zero_count=0;
196
- for (i=0; i<cell_group_count; i++){
197
- int zero_count = IntArrayCount0s(cell_groups[i])-1;
198
- zeros[i] = zero_count;
199
- if (highest_zero_count < zero_count) highest_zero_count = zero_count;
200
- }
201
-
202
- int lows[highest_zero_count];
203
- int higs[highest_zero_count];
204
-
205
- i2=0;
206
- cur_acc=0;
207
- for (i=0; i2<highest_zero_count; i++){
208
- if(square->unused[i]){
209
- cur_acc+=(i+1);
210
- lows[i2]=cur_acc;
211
- i2++;
212
- }
213
- }
214
-
215
- i2=0;
216
- cur_acc=0;
217
- for (i=n*n-1; i2<highest_zero_count; i--){
218
- if(square->unused[i]){
219
- cur_acc+=(i+1);
220
- higs[i2]=cur_acc;
221
- i2++;
222
- }
223
- }
224
-
225
- for (group=0; group<cell_group_count; group++){
226
- int lft = mn - IntArraySum(cell_groups[group]);
227
- int k = zeros[group];
228
- int temp_highest_candidate = lft - lows[k-1];
229
- int temp_lowest_candidate = lft - higs[k-1];
230
- if (temp_highest_candidate<highest_candidate) highest_candidate = temp_highest_candidate;
231
- if (temp_lowest_candidate>lowest_candidate) lowest_candidate = temp_lowest_candidate;
232
- }
233
-
234
- for (i=lowest_candidate; i<=highest_candidate; i++){
235
- if(square->unused[i-1]){
236
- ret_pm[local_pm_count++]=i;
237
-
238
- }
239
-
240
- }
241
-
242
-
243
- *ret_pm_count = local_pm_count;
244
- return;
245
-
246
-
247
- }
248
-
249
-
250
- PtrFfmCache SquareGetFewestMoves(PtrSquare square)
251
- {
252
- int x,y;
253
- int i;
254
- if (square->ffm){
255
- return square->ffm;
256
- }
257
- square->ffm = malloc(sizeof(FfmCache)+sizeof(int)*n*n);
258
- square->ffm->pm_count=n*n+1;
259
-
260
- for (y=0; y<n; y++)
261
- for (x=0; x<n; x++){
262
- int index = x + y * n;
263
- if (square->grid[index] == 0){
264
- int temp_list[n*n];
265
- int temp_list_count;
266
- SquareGetPossibleMoves(square,x,y,temp_list,&temp_list_count);
267
- if (temp_list_count<square->ffm->pm_count){
268
- square->ffm->pm_count = temp_list_count;
269
- square->ffm->x = x;
270
- square->ffm->y = y;
271
- for (i=0; i<square->ffm->pm_count; i++) square->ffm->pm[i] = temp_list[i];
272
- }
273
- }
274
- }
275
-
276
-
277
- if (square->ffm->pm_count>n*n) square->ffm->pm_count=0;
278
- return square->ffm;
279
-
280
-
281
- }
282
-
283
-
284
- int SquareGetPriority(PtrSquare square)
285
- {
286
- int priority;
287
- if (square->priority) return square->priority;
288
- PtrFfmCache ffm = SquareGetFewestMoves(square);
289
- priority = ffm->pm_count + SquareEmptyCount(square);
290
- square->priority = priority;
291
- return priority;
292
- }
293
-
294
- int SquareCompare(PtrSquare square1, PtrSquare square2)
295
- {
296
- int c = SquareGetPriority(square1) - SquareGetPriority(square2);
297
- if (c==0){
298
- int i;
299
- for (i=0; c==0 && i<n*n; i++){
300
- c = square1->grid[i] - square2->grid[i];
301
- }
302
- }
303
- return c;
304
- }
305
-
306
- PtrSquare SquareQueueMerge(PtrSquare queue1, PtrSquare queue2)
307
- {
308
- if (!queue1) return queue2;
309
- if (!queue2) return queue1;
310
-
311
- PtrSquare new_queue = NULL;
312
- PtrSquare* cur_ptr = &new_queue;
313
-
314
- while (1){
315
- if (SquareCompare(queue1, queue2)<0){
316
- *cur_ptr = queue1;
317
- cur_ptr = &queue1->next;
318
- queue1 = queue1->next;
319
- if (!queue1){
320
- *cur_ptr = queue2;
321
- return new_queue;
322
- }
323
- }
324
- else {
325
- *cur_ptr = queue2;
326
- cur_ptr = &queue2->next;
327
- queue2 = queue2->next;
328
- if (!queue2){
329
- *cur_ptr = queue1;
330
- return new_queue;
331
- }
332
- }
333
- }
334
- }
335
-
336
- PtrSquare SquareGetSuccessorNodes(PtrSquare square)
337
- {
338
- int i;
339
- PtrSquare square_queue = NULL;
340
- PtrFfmCache ffm = SquareGetFewestMoves(square);
341
-
342
- for (i=0; i<ffm->pm_count; i++){
343
- PtrSquare new_square = SquareNewCopy(square);
344
- new_square->grid[ffm->x+ffm->y*n] = ffm->pm[i];
345
- new_square->unused[ffm->pm[i]-1]=0;
346
- square_queue = SquareQueueMerge(square_queue, new_square);
347
- }
348
- return square_queue;
349
- }
350
-
351
-
352
-
353
- int main(int argc, char **argv)
354
- {
355
-
356
- if (argv[1]) n = atoi(argv[1]);
357
- else n = 5;
358
- mn = n * (1 + n * n) / 2;
359
-
360
- PtrSquare queue = SquareNewEmpty();
361
- PtrSquare cur_square;
362
-
363
- while (queue){
364
- cur_square = queue;
365
- queue = queue->next;
366
-
367
- int priority = SquareGetPriority(cur_square);
368
- if (!priority) break;
369
-
370
-
371
- PtrSquare successor_nodes = SquareGetSuccessorNodes(cur_square);
372
- queue = SquareQueueMerge(queue, successor_nodes);
373
- SquareFree(cur_square);
374
- }
375
-
376
- SquarePrint(cur_square);
377
- return 0;
378
- }