chrislo-sourceclassifier 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
- }