chrislo-sourceclassifier 0.2.0

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 (326) hide show
  1. data/Manifest +325 -0
  2. data/README.textile +51 -0
  3. data/Rakefile +64 -0
  4. data/examples/example.rb +22 -0
  5. data/lib/sourceclassifier.rb +22 -0
  6. data/lib/trainer.rb +51 -0
  7. data/sourceclassifier.gemspec +35 -0
  8. data/sources/gcc/ackermann.gcc-2.gcc +93 -0
  9. data/sources/gcc/ackermann.gcc-3.gcc +20 -0
  10. data/sources/gcc/ary.gcc +40 -0
  11. data/sources/gcc/binarytrees.gcc +136 -0
  12. data/sources/gcc/binarytrees.gcc-2.gcc +140 -0
  13. data/sources/gcc/binarytrees.gcc-3.gcc +134 -0
  14. data/sources/gcc/chameneos.gcc +117 -0
  15. data/sources/gcc/chameneos.gcc-2.gcc +134 -0
  16. data/sources/gcc/chameneos.gcc-3.gcc +120 -0
  17. data/sources/gcc/chameneosredux.gcc +306 -0
  18. data/sources/gcc/echo.gcc +144 -0
  19. data/sources/gcc/except.gcc +52 -0
  20. data/sources/gcc/fannkuch.gcc +105 -0
  21. data/sources/gcc/fannkuch.gcc-2.gcc +94 -0
  22. data/sources/gcc/fasta.gcc +158 -0
  23. data/sources/gcc/fasta.gcc-2.gcc +132 -0
  24. data/sources/gcc/fasta.gcc-3.gcc +145 -0
  25. data/sources/gcc/fasta.gcc-4.gcc +141 -0
  26. data/sources/gcc/fibo.gcc +20 -0
  27. data/sources/gcc/harmonic.gcc +22 -0
  28. data/sources/gcc/hash.gcc +31 -0
  29. data/sources/gcc/hash2.gcc +38 -0
  30. data/sources/gcc/heapsort.gcc +72 -0
  31. data/sources/gcc/hello.gcc-2.gcc +12 -0
  32. data/sources/gcc/hello.gcc-3.gcc +20 -0
  33. data/sources/gcc/knucleotide.gcc +173 -0
  34. data/sources/gcc/knucleotide.gcc-2.gcc +168 -0
  35. data/sources/gcc/lists.gcc +226 -0
  36. data/sources/gcc/magicsquares.gcc +378 -0
  37. data/sources/gcc/mandelbrot.gcc +84 -0
  38. data/sources/gcc/mandelbrot.gcc-2.gcc +63 -0
  39. data/sources/gcc/mandelbrot.gcc-3.gcc +91 -0
  40. data/sources/gcc/mandelbrot.gcc-4.gcc +78 -0
  41. data/sources/gcc/matrix.gcc +66 -0
  42. data/sources/gcc/message.gcc-2.gcc +72 -0
  43. data/sources/gcc/message.gcc-3.gcc +64 -0
  44. data/sources/gcc/methcall.gcc +89 -0
  45. data/sources/gcc/moments.gcc +120 -0
  46. data/sources/gcc/nbody.gcc +142 -0
  47. data/sources/gcc/nbody.gcc-2.gcc +143 -0
  48. data/sources/gcc/nbody.gcc-3.gcc +142 -0
  49. data/sources/gcc/nestedloop.gcc +25 -0
  50. data/sources/gcc/nsieve.gcc +35 -0
  51. data/sources/gcc/nsievebits.gcc-2.gcc +37 -0
  52. data/sources/gcc/nsievebits.gcc-3.gcc +53 -0
  53. data/sources/gcc/objinst.gcc +95 -0
  54. data/sources/gcc/partialsums.gcc +86 -0
  55. data/sources/gcc/partialsums.gcc-3.gcc +81 -0
  56. data/sources/gcc/partialsums.gcc-4.gcc +68 -0
  57. data/sources/gcc/pidigits.gcc +105 -0
  58. data/sources/gcc/primes.gcc +75 -0
  59. data/sources/gcc/prodcons.gcc +86 -0
  60. data/sources/gcc/random.gcc +29 -0
  61. data/sources/gcc/raytracer.gcc +125 -0
  62. data/sources/gcc/raytracer.gcc-2.gcc +181 -0
  63. data/sources/gcc/recursive.gcc +68 -0
  64. data/sources/gcc/recursive.gcc-2.gcc +55 -0
  65. data/sources/gcc/regexdna.gcc-2.gcc +126 -0
  66. data/sources/gcc/regexmatch.gcc +136 -0
  67. data/sources/gcc/revcomp.gcc +85 -0
  68. data/sources/gcc/revcomp.gcc-2.gcc +88 -0
  69. data/sources/gcc/revcomp.gcc-4.gcc +71 -0
  70. data/sources/gcc/reversefile.gcc +103 -0
  71. data/sources/gcc/reversefile.gcc-2.gcc +56 -0
  72. data/sources/gcc/sieve.gcc +34 -0
  73. data/sources/gcc/spectralnorm.gcc +54 -0
  74. data/sources/gcc/spellcheck.gcc +72 -0
  75. data/sources/gcc/spellcheck.gcc-2.gcc +61 -0
  76. data/sources/gcc/strcat.gcc +38 -0
  77. data/sources/gcc/sumcol.gcc-2.gcc +98 -0
  78. data/sources/gcc/sumcol.gcc-3.gcc +22 -0
  79. data/sources/gcc/sumcol.gcc-4.gcc +18 -0
  80. data/sources/gcc/sumcol.gcc-5.gcc +32 -0
  81. data/sources/gcc/takfp.gcc +23 -0
  82. data/sources/gcc/tcp-stream.gcc +122 -0
  83. data/sources/gcc/tcpecho.gcc +122 -0
  84. data/sources/gcc/tcpecho.gcc-2.gcc +136 -0
  85. data/sources/gcc/tcprequest.gcc +122 -0
  86. data/sources/gcc/threadring.gcc +73 -0
  87. data/sources/gcc/wc.gcc +52 -0
  88. data/sources/gcc/wc.gcc-2.gcc +40 -0
  89. data/sources/gcc/wc.gcc-3.gcc +46 -0
  90. data/sources/gcc/wordfreq.gcc-2.gcc +85 -0
  91. data/sources/perl/ackermann.perl +28 -0
  92. data/sources/perl/ackermann.perl-2.perl +25 -0
  93. data/sources/perl/ackermann.perl-3.perl +20 -0
  94. data/sources/perl/ackermann.perl-4.perl +18 -0
  95. data/sources/perl/ary.perl +25 -0
  96. data/sources/perl/ary.perl-2.perl +23 -0
  97. data/sources/perl/binarytrees.perl +66 -0
  98. data/sources/perl/binarytrees.perl-2.perl +71 -0
  99. data/sources/perl/chameneos.perl +67 -0
  100. data/sources/perl/echo.perl +81 -0
  101. data/sources/perl/except.perl +73 -0
  102. data/sources/perl/fannkuch.perl +44 -0
  103. data/sources/perl/fannkuch.perl-2.perl +38 -0
  104. data/sources/perl/fasta.perl +112 -0
  105. data/sources/perl/fasta.perl-2.perl +135 -0
  106. data/sources/perl/fasta.perl-4.perl +122 -0
  107. data/sources/perl/fibo.perl +15 -0
  108. data/sources/perl/fibo.perl-2.perl +0 -0
  109. data/sources/perl/fibo.perl-3.perl +0 -0
  110. data/sources/perl/harmonic.perl +7 -0
  111. data/sources/perl/hash.perl +23 -0
  112. data/sources/perl/hash.perl-2.perl +17 -0
  113. data/sources/perl/hash.perl-3.perl +24 -0
  114. data/sources/perl/hash2.perl +16 -0
  115. data/sources/perl/heapsort.perl +65 -0
  116. data/sources/perl/heapsort.perl-2.perl +0 -0
  117. data/sources/perl/hello.perl +5 -0
  118. data/sources/perl/knucleotide.perl-2.perl +30 -0
  119. data/sources/perl/lists.perl +48 -0
  120. data/sources/perl/mandelbrot.perl-2.perl +32 -0
  121. data/sources/perl/matrix.perl +59 -0
  122. data/sources/perl/matrix.perl-2.perl +0 -0
  123. data/sources/perl/matrix.perl-3.perl +0 -0
  124. data/sources/perl/message.perl +27 -0
  125. data/sources/perl/methcall.perl +66 -0
  126. data/sources/perl/moments.perl +44 -0
  127. data/sources/perl/nbody.perl +108 -0
  128. data/sources/perl/nestedloop.perl +28 -0
  129. data/sources/perl/nsieve.perl-2.perl +41 -0
  130. data/sources/perl/nsieve.perl-4.perl +43 -0
  131. data/sources/perl/nsievebits.perl +37 -0
  132. data/sources/perl/objinst.perl +73 -0
  133. data/sources/perl/partialsums.perl-3.perl +31 -0
  134. data/sources/perl/pidigits.perl +52 -0
  135. data/sources/perl/pidigits.perl-2.perl +47 -0
  136. data/sources/perl/process.perl +50 -0
  137. data/sources/perl/prodcons.perl +47 -0
  138. data/sources/perl/random.perl-4.perl +17 -0
  139. data/sources/perl/recursive.perl-2.perl +57 -0
  140. data/sources/perl/regexdna.perl +48 -0
  141. data/sources/perl/regexdna.perl-2.perl +43 -0
  142. data/sources/perl/regexdna.perl-3.perl +50 -0
  143. data/sources/perl/regexdna.perl-4.perl +49 -0
  144. data/sources/perl/regexdna.perl-5.perl +42 -0
  145. data/sources/perl/regexdna.perl-6.perl +43 -0
  146. data/sources/perl/regexmatch.perl +35 -0
  147. data/sources/perl/revcomp.perl-2.perl +34 -0
  148. data/sources/perl/reversefile.perl +8 -0
  149. data/sources/perl/reversefile.perl-2.perl +0 -0
  150. data/sources/perl/reversefile.perl-3.perl +0 -0
  151. data/sources/perl/sieve.perl +23 -0
  152. data/sources/perl/spectralnorm.perl-2.perl +54 -0
  153. data/sources/perl/spellcheck.perl +24 -0
  154. data/sources/perl/strcat.perl +13 -0
  155. data/sources/perl/strcat.perl-2.perl +0 -0
  156. data/sources/perl/sumcol.perl +8 -0
  157. data/sources/perl/takfp.perl +23 -0
  158. data/sources/perl/takfp.perl-3.perl +20 -0
  159. data/sources/perl/tcpecho.perl +61 -0
  160. data/sources/perl/tcprequest.perl +61 -0
  161. data/sources/perl/tcpstream.perl +61 -0
  162. data/sources/perl/threadring.perl +55 -0
  163. data/sources/perl/threadring.perl-2.perl +43 -0
  164. data/sources/perl/wc.perl +20 -0
  165. data/sources/perl/wc.perl-2.perl +14 -0
  166. data/sources/perl/wordfreq.perl +22 -0
  167. data/sources/perl/wordfreq.perl-3.perl +0 -0
  168. data/sources/perl/wordfreq.perl3.perl +0 -0
  169. data/sources/python/ackermann.python +21 -0
  170. data/sources/python/ary.python +19 -0
  171. data/sources/python/binarytrees.python +39 -0
  172. data/sources/python/binarytrees.python-3.python +44 -0
  173. data/sources/python/chameneos.python-6.python +73 -0
  174. data/sources/python/chameneosredux.python +126 -0
  175. data/sources/python/chameneosredux.python-2.python +122 -0
  176. data/sources/python/dispatch.python +176 -0
  177. data/sources/python/dispatch.python-2.python +136 -0
  178. data/sources/python/echo.python +64 -0
  179. data/sources/python/except.python +62 -0
  180. data/sources/python/fannkuch.python +50 -0
  181. data/sources/python/fannkuch.python-2.python +54 -0
  182. data/sources/python/fasta.python-2.python +79 -0
  183. data/sources/python/fibo.python +17 -0
  184. data/sources/python/fibo.python-2.python +0 -0
  185. data/sources/python/fibo.python-3.python +0 -0
  186. data/sources/python/harmonic.python-2.python +9 -0
  187. data/sources/python/hash.python +21 -0
  188. data/sources/python/hash.python-2.python +0 -0
  189. data/sources/python/hash2.python +30 -0
  190. data/sources/python/heapsort.python-3.python +66 -0
  191. data/sources/python/hello.python +5 -0
  192. data/sources/python/implicitode.python +231 -0
  193. data/sources/python/knucleotide.python +55 -0
  194. data/sources/python/lists.python +44 -0
  195. data/sources/python/magicsquares.python +145 -0
  196. data/sources/python/mandelbrot.python +44 -0
  197. data/sources/python/mandelbrot.python-2.python +35 -0
  198. data/sources/python/mandelbrot.python-3.python +46 -0
  199. data/sources/python/matrix.python +34 -0
  200. data/sources/python/matrix.python-2.python +23 -0
  201. data/sources/python/message.python +24 -0
  202. data/sources/python/message.python-2.python +20 -0
  203. data/sources/python/message.python-3.python +19 -0
  204. data/sources/python/meteor.python +210 -0
  205. data/sources/python/meteor.python-2.python +192 -0
  206. data/sources/python/methcall.python +51 -0
  207. data/sources/python/moments.python +65 -0
  208. data/sources/python/nbody.python +123 -0
  209. data/sources/python/nbody.python-2.python +120 -0
  210. data/sources/python/nestedloop.python +24 -0
  211. data/sources/python/nsieve.python +27 -0
  212. data/sources/python/nsieve.python-2.python +23 -0
  213. data/sources/python/nsieve.python-4.python +25 -0
  214. data/sources/python/nsievebits.python +27 -0
  215. data/sources/python/nsievebits.python-2.python +43 -0
  216. data/sources/python/objinst.python +53 -0
  217. data/sources/python/partialsums.python +37 -0
  218. data/sources/python/partialsums.python-2.python +35 -0
  219. data/sources/python/partialsums.python-3.python +48 -0
  220. data/sources/python/pidigits.python +38 -0
  221. data/sources/python/pidigits.python-3.python +63 -0
  222. data/sources/python/pidigits.python-4.python +24 -0
  223. data/sources/python/process.python +51 -0
  224. data/sources/python/process.python-2.python +133 -0
  225. data/sources/python/prodcons.python +51 -0
  226. data/sources/python/prodcons.python-2.python +0 -0
  227. data/sources/python/random.python +27 -0
  228. data/sources/python/raytracer.python +203 -0
  229. data/sources/python/recursive.python +35 -0
  230. data/sources/python/regexdna.python +39 -0
  231. data/sources/python/regexdna.python-2.python +34 -0
  232. data/sources/python/regexmatch.python +36 -0
  233. data/sources/python/revcomp.python-3.python +31 -0
  234. data/sources/python/reversefile.python +13 -0
  235. data/sources/python/reversefile.python-2.python +0 -0
  236. data/sources/python/reversefile.python-3.python +0 -0
  237. data/sources/python/sieve.python +50 -0
  238. data/sources/python/spectralnorm.python-2.python +36 -0
  239. data/sources/python/spellcheck.python +17 -0
  240. data/sources/python/strcat.python +35 -0
  241. data/sources/python/strcat.python-2.python +0 -0
  242. data/sources/python/sumcol.python-2.python +0 -0
  243. data/sources/python/sumcol.python-3.python +0 -0
  244. data/sources/python/takfp.python +19 -0
  245. data/sources/python/tcpecho.python +67 -0
  246. data/sources/python/tcprequest.python +67 -0
  247. data/sources/python/tcpstream.python +67 -0
  248. data/sources/python/threadring.python +47 -0
  249. data/sources/python/threadring.python-2.python +40 -0
  250. data/sources/python/threadring.python-3.python +34 -0
  251. data/sources/python/wc.python-2.python +19 -0
  252. data/sources/python/wordfreq.python +43 -0
  253. data/sources/python/wordfreq.python-2.python +0 -0
  254. data/sources/python/wordfreq.python-3.python +28 -0
  255. data/sources/python/wordfreq.python-4.python +38 -0
  256. data/sources/python/wordfreq.python-5.python +39 -0
  257. data/sources/ruby/ackermann.ruby +17 -0
  258. data/sources/ruby/ackermann.ruby-5.ruby +153 -0
  259. data/sources/ruby/ary.ruby +22 -0
  260. data/sources/ruby/binarytrees.ruby-2.ruby +55 -0
  261. data/sources/ruby/chameneos.ruby-2.ruby +71 -0
  262. data/sources/ruby/dispatch.ruby +114 -0
  263. data/sources/ruby/echo.ruby +41 -0
  264. data/sources/ruby/except.ruby +61 -0
  265. data/sources/ruby/except.ruby-2.ruby +61 -0
  266. data/sources/ruby/fannkuch.ruby +42 -0
  267. data/sources/ruby/fasta.ruby +81 -0
  268. data/sources/ruby/fibo.ruby +15 -0
  269. data/sources/ruby/harmonic.ruby-2.ruby +15 -0
  270. data/sources/ruby/hash.ruby +19 -0
  271. data/sources/ruby/hash2.ruby +23 -0
  272. data/sources/ruby/heapsort.ruby +55 -0
  273. data/sources/ruby/hello.ruby +6 -0
  274. data/sources/ruby/knucleotide.ruby-2.ruby +44 -0
  275. data/sources/ruby/lists.ruby +46 -0
  276. data/sources/ruby/mandelbrot.ruby-3.ruby +63 -0
  277. data/sources/ruby/matrix.ruby +40 -0
  278. data/sources/ruby/matrix.ruby-2.ruby +30 -0
  279. data/sources/ruby/message.ruby +29 -0
  280. data/sources/ruby/message.ruby-2.ruby +24 -0
  281. data/sources/ruby/meteor.ruby +386 -0
  282. data/sources/ruby/meteor.ruby-2.ruby +561 -0
  283. data/sources/ruby/methcall.ruby +58 -0
  284. data/sources/ruby/methcall.ruby-2.ruby +54 -0
  285. data/sources/ruby/moments.ruby +64 -0
  286. data/sources/ruby/nbody.ruby-2.ruby +145 -0
  287. data/sources/ruby/nestedloop.ruby +22 -0
  288. data/sources/ruby/nsieve.ruby +36 -0
  289. data/sources/ruby/nsieve.ruby-2.ruby +25 -0
  290. data/sources/ruby/nsievebits.ruby-2.ruby +42 -0
  291. data/sources/ruby/objinst.ruby +58 -0
  292. data/sources/ruby/partialsums.ruby +39 -0
  293. data/sources/ruby/pidigits.ruby +92 -0
  294. data/sources/ruby/pidigits.ruby-2.ruby +109 -0
  295. data/sources/ruby/prodcons.ruby +41 -0
  296. data/sources/ruby/random.ruby +17 -0
  297. data/sources/ruby/recursive.ruby-2.ruby +53 -0
  298. data/sources/ruby/regexdna.ruby +32 -0
  299. data/sources/ruby/regexdna.ruby-2.ruby +38 -0
  300. data/sources/ruby/regexmatch.ruby +33 -0
  301. data/sources/ruby/revcomp.ruby +28 -0
  302. data/sources/ruby/reversefile.ruby +7 -0
  303. data/sources/ruby/sieve.ruby +30 -0
  304. data/sources/ruby/spectralnorm.ruby +48 -0
  305. data/sources/ruby/spellcheck.ruby +18 -0
  306. data/sources/ruby/spellcheck.ruby-2.ruby +0 -0
  307. data/sources/ruby/strcat.ruby +12 -0
  308. data/sources/ruby/strcat.ruby-2.ruby +12 -0
  309. data/sources/ruby/sumcol.ruby +12 -0
  310. data/sources/ruby/sumcol.ruby-2.ruby +5 -0
  311. data/sources/ruby/takfp.ruby +15 -0
  312. data/sources/ruby/tcpecho.ruby +45 -0
  313. data/sources/ruby/tcprequest.ruby +45 -0
  314. data/sources/ruby/tcpstream.ruby +45 -0
  315. data/sources/ruby/threadring.ruby +61 -0
  316. data/sources/ruby/threadring.ruby-2.ruby +33 -0
  317. data/sources/ruby/wc.ruby +15 -0
  318. data/sources/ruby/wordfreq.ruby +17 -0
  319. data/sources/ruby/wordfreq.ruby2.ruby +0 -0
  320. data/test/fixtures/sources/gcc/ackermann.gcc-2.gcc +93 -0
  321. data/test/fixtures/sources/python/ackermann.python +21 -0
  322. data/test/fixtures/sources/ruby/ackermann.ruby +17 -0
  323. data/test/test_source_classifier.rb +40 -0
  324. data/test/test_trainer.rb +34 -0
  325. data/trainer.bin +1193 -0
  326. metadata +393 -0
@@ -0,0 +1,145 @@
1
+ /* The Computer Language Benchmarks Game
2
+ * http://shootout.alioth.debian.org/
3
+ * Contributed by Joern Inge Vestgaarden
4
+ * Modified by Jorge Peixoto de Morais Neto
5
+ * Modified by Ryan Flynn
6
+ */
7
+
8
+ #include <stdio.h>
9
+ #include <stdlib.h>
10
+ #include <string.h>
11
+ #include <err.h>
12
+
13
+ #define WIDTH 60
14
+ #define MIN(a,b) ((a) <= (b) ? (a) : (b))
15
+ #define NELEMENTS(x) (sizeof (x) / sizeof ((x)[0]))
16
+
17
+ typedef struct {
18
+ float p;
19
+ char c;
20
+ } aminoacid_t;
21
+
22
+ static inline float myrandom (float max) {
23
+ unsigned long const IM = 139968;
24
+ unsigned long const IA = 3877;
25
+ unsigned long const IC = 29573;
26
+ static unsigned long last = 42;
27
+ last = (last * IA + IC) % IM;
28
+ /*Integer to float conversions are faster if the integer is signed*/
29
+ return max * (long) last / IM;
30
+ }
31
+
32
+ static inline void accumulate_probabilities (aminoacid_t *genelist, size_t len) {
33
+ float cp = 0.0;
34
+ size_t i;
35
+ for (i = 0; i < len; i++) {
36
+ cp += genelist[i].p;
37
+ genelist[i].p = cp;
38
+ }
39
+ }
40
+
41
+ /* This function prints the characters of the string s. When it */
42
+ /* reaches the end of the string, it goes back to the beginning */
43
+ /* It stops when the total number of characters printed is count. */
44
+ /* Between each WIDTH consecutive characters it prints a newline */
45
+ /* This function assumes that WIDTH <= strlen (s) + 1 */
46
+ static void repeat_fasta (char const *s, size_t count) {
47
+ size_t pos = 0;
48
+ size_t len = strlen (s);
49
+ char *s2 = malloc (len + WIDTH);
50
+ memcpy (s2, s, len);
51
+ memcpy (s2 + len, s, WIDTH);
52
+ do {
53
+ size_t line = MIN(WIDTH, count);
54
+ fwrite_unlocked (s2 + pos,1,line,stdout);
55
+ putchar_unlocked ('\n');
56
+ pos += line;
57
+ if (pos >= len) pos -= len;
58
+ count -= line;
59
+ } while (count);
60
+ free (s2);
61
+ }
62
+
63
+ /* This function takes a pointer to the first element of an array */
64
+ /* Each element of the array is a struct with a character and */
65
+ /* a float number p between 0 and 1. */
66
+ /* The function generates a random float number r and */
67
+ /* finds the first array element such that p >= r. */
68
+ /* This is a weighted random selection. */
69
+ /* The function then prints the character of the array element. */
70
+ /* This is done count times. */
71
+ /* Between each WIDTH consecutive characters, the function prints a newline */
72
+ static void random_fasta (aminoacid_t const *genelist, size_t count) {
73
+ do {
74
+ size_t line = MIN(WIDTH, count);
75
+ size_t pos = 0;
76
+ char buf[WIDTH + 1];
77
+ do {
78
+ float r = myrandom (1.0);
79
+ size_t i = 0;
80
+ while (genelist[i].p < r)
81
+ ++i; /* Linear search */
82
+ buf[pos++] = genelist[i].c;
83
+ } while (pos < line);
84
+ buf[line] = '\n';
85
+ fwrite_unlocked (buf, 1, line + 1, stdout);
86
+ count -= line;
87
+ } while (count);
88
+ }
89
+
90
+ int main (int argc, char **argv) {
91
+ static char OutBuf[128 * 1024];
92
+ size_t n;
93
+ if (argc > 1) {
94
+ char const *arg = argv[1];
95
+ char *tail;
96
+ n = strtoul (arg, &tail, 0);
97
+ if (tail == arg)
98
+ errx (1, "Could not convert \"%s\" to an unsigned long integer", arg);
99
+ } else n = 1000;
100
+
101
+ static aminoacid_t iub[] = {
102
+ { 0.27, 'a' },
103
+ { 0.12, 'c' },
104
+ { 0.12, 'g' },
105
+ { 0.27, 't' },
106
+ { 0.02, 'B' },
107
+ { 0.02, 'D' },
108
+ { 0.02, 'H' },
109
+ { 0.02, 'K' },
110
+ { 0.02, 'M' },
111
+ { 0.02, 'N' },
112
+ { 0.02, 'R' },
113
+ { 0.02, 'S' },
114
+ { 0.02, 'V' },
115
+ { 0.02, 'W' },
116
+ { 0.02, 'Y' }};
117
+
118
+ static aminoacid_t homosapiens[] = {
119
+ { 0.3029549426680, 'a' },
120
+ { 0.1979883004921, 'c' },
121
+ { 0.1975473066391, 'g' },
122
+ { 0.3015094502008, 't' }};
123
+
124
+ accumulate_probabilities (iub, NELEMENTS(iub));
125
+ accumulate_probabilities (homosapiens, NELEMENTS(homosapiens));
126
+
127
+ static char const *const alu ="\
128
+ GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG\
129
+ GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA\
130
+ CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT\
131
+ ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA\
132
+ GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG\
133
+ AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC\
134
+ AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA";
135
+
136
+ setvbuf(stdout, OutBuf, _IOFBF, sizeof OutBuf); /* buffer output */
137
+ fputs_unlocked (">ONE Homo sapiens alu\n", stdout);
138
+ repeat_fasta (alu, 2 * n);
139
+ fputs_unlocked (">TWO IUB ambiguity codes\n", stdout);
140
+ random_fasta (iub, 3 * n);
141
+ fputs_unlocked (">THREE Homo sapiens frequency\n", stdout);
142
+ random_fasta (homosapiens, 5 * n);
143
+ return 0;
144
+ }
145
+
@@ -0,0 +1,141 @@
1
+ /* The Computer Language Benchmarks Game
2
+ * http://shootout.alioth.debian.org/
3
+ * Contributed by Joern Inge Vestgaarden
4
+ * Modified by Jorge Peixoto de Morais Neto
5
+ */
6
+
7
+ #include <stdio.h>
8
+ #include <stdlib.h>
9
+ #include <string.h>
10
+ #include <err.h>
11
+
12
+ #define WIDTH 60
13
+ #define MIN(a,b) ((a) <= (b) ? (a) : (b))
14
+ #define NELEMENTS(x) (sizeof (x) / sizeof ((x)[0]))
15
+
16
+ typedef struct {
17
+ float p;
18
+ char c;
19
+ } aminoacid_t;
20
+
21
+ static inline float myrandom (float max) {
22
+ unsigned long const IM = 139968;
23
+ unsigned long const IA = 3877;
24
+ unsigned long const IC = 29573;
25
+ static unsigned long last = 42;
26
+ last = (last * IA + IC) % IM;
27
+ /*Integer to float conversions are faster if the integer is signed*/
28
+ return max * (long) last / IM;
29
+ }
30
+
31
+ static inline void accumulate_probabilities (aminoacid_t *genelist, size_t len) {
32
+ float cp = 0.0;
33
+ size_t i;
34
+ for (i = 0; i < len; i++) {
35
+ cp += genelist[i].p;
36
+ genelist[i].p = cp;
37
+ }
38
+ }
39
+
40
+ /* This function prints the characters of the string s. When it */
41
+ /* reaches the end of the string, it goes back to the beginning */
42
+ /* It stops when the total number of characters printed is count. */
43
+ /* Between each WIDTH consecutive characters it prints a newline */
44
+ /* This function assumes that WIDTH <= strlen (s) + 1 */
45
+ static void repeat_fasta (char const *s, size_t count) {
46
+ size_t pos = 0;
47
+ size_t len = strlen (s);
48
+ char *s2 = malloc (len + WIDTH);
49
+ memcpy (s2, s, len);
50
+ memcpy (s2 + len, s, WIDTH);
51
+ do {
52
+ size_t line = MIN(WIDTH, count);
53
+ fwrite_unlocked (s2 + pos,1,line,stdout);
54
+ putchar_unlocked ('\n');
55
+ pos += line;
56
+ if (pos >= len) pos -= len;
57
+ count -= line;
58
+ } while (count);
59
+ free (s2);
60
+ }
61
+
62
+ /* This function takes a pointer to the first element of an array */
63
+ /* Each element of the array is a struct with a character and */
64
+ /* a float number p between 0 and 1. */
65
+ /* The function generates a random float number r and */
66
+ /* finds the first array element such that p >= r. */
67
+ /* This is a weighted random selection. */
68
+ /* The function then prints the character of the array element. */
69
+ /* This is done count times. */
70
+ /* Between each WIDTH consecutive characters, the function prints a newline */
71
+ static void random_fasta (aminoacid_t const *genelist, size_t count) {
72
+ do {
73
+ size_t line = MIN(WIDTH, count);
74
+ size_t pos = 0;
75
+ char buf[WIDTH + 1];
76
+ do {
77
+ float r = myrandom (1.0);
78
+ size_t i = 0;
79
+ while (genelist[i].p < r)
80
+ ++i; /* Linear search */
81
+ buf[pos++] = genelist[i].c;
82
+ } while (pos < line);
83
+ buf[line] = '\n';
84
+ fwrite_unlocked (buf, 1, line + 1, stdout);
85
+ count -= line;
86
+ } while (count);
87
+ }
88
+
89
+ int main (int argc, char **argv) {
90
+ size_t n;
91
+ if (argc > 1) {
92
+ char const *arg = argv[1];
93
+ char *tail;
94
+ n = strtoul (arg, &tail, 0);
95
+ if (tail == arg)
96
+ errx (1, "Could not convert \"%s\" to an unsigned long integer", arg);
97
+ } else n = 1000;
98
+
99
+ static aminoacid_t iub[] = {
100
+ { 0.27, 'a' },
101
+ { 0.12, 'c' },
102
+ { 0.12, 'g' },
103
+ { 0.27, 't' },
104
+ { 0.02, 'B' },
105
+ { 0.02, 'D' },
106
+ { 0.02, 'H' },
107
+ { 0.02, 'K' },
108
+ { 0.02, 'M' },
109
+ { 0.02, 'N' },
110
+ { 0.02, 'R' },
111
+ { 0.02, 'S' },
112
+ { 0.02, 'V' },
113
+ { 0.02, 'W' },
114
+ { 0.02, 'Y' }};
115
+
116
+ static aminoacid_t homosapiens[] = {
117
+ { 0.3029549426680, 'a' },
118
+ { 0.1979883004921, 'c' },
119
+ { 0.1975473066391, 'g' },
120
+ { 0.3015094502008, 't' }};
121
+
122
+ accumulate_probabilities (iub, NELEMENTS(iub));
123
+ accumulate_probabilities (homosapiens, NELEMENTS(homosapiens));
124
+
125
+ static char const *const alu ="\
126
+ GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG\
127
+ GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA\
128
+ CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT\
129
+ ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA\
130
+ GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG\
131
+ AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC\
132
+ AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA";
133
+
134
+ fputs_unlocked (">ONE Homo sapiens alu\n", stdout);
135
+ repeat_fasta (alu, 2 * n);
136
+ fputs_unlocked (">TWO IUB ambiguity codes\n", stdout);
137
+ random_fasta (iub, 3 * n);
138
+ fputs_unlocked (">THREE Homo sapiens frequency\n", stdout);
139
+ random_fasta (homosapiens, 5 * n);
140
+ return 0;
141
+ }
@@ -0,0 +1,20 @@
1
+ /* -*- mode: c -*-
2
+ * $Id: fibo.gcc,v 1.6 2005-04-25 19:01:38 igouy-guest Exp $
3
+ * http://shootout.alioth.debian.org/
4
+ * Revised with register allocation by David Bronaugh
5
+ */
6
+
7
+ #include <stdio.h>
8
+ #include <stdlib.h>
9
+
10
+ static unsigned long
11
+ fib(unsigned long n) {
12
+ return( (n < 2) ? 1 : (fib(n-2) + fib(n-1)) );
13
+ }
14
+
15
+ int
16
+ main(int argc, char *argv[]) {
17
+ int N = ((argc == 2) ? atoi(argv[1]) : 1);
18
+ printf("%ld\n", fib(N));
19
+ return(0);
20
+ }
@@ -0,0 +1,22 @@
1
+ /* The Great Computer Language Shootout
2
+ http://shootout.alioth.debian.org/
3
+
4
+ contributed by Greg Buchholz
5
+ Optimized by Paul Hsieh
6
+ compile: gcc -O2 -o harmonic harmonic.c
7
+ */
8
+ #include<stdio.h>
9
+ #include<stdlib.h>
10
+
11
+ int main (int argc, char **argv)
12
+ {
13
+ double i=1, sum=0;
14
+ int n;
15
+
16
+ for(n = atoi(argv[1]); n > 0; n--, i++)
17
+ sum += 1/i;
18
+
19
+ printf("%.9f\n", sum);
20
+ return 0;
21
+ }
22
+
@@ -0,0 +1,31 @@
1
+ /* -*- mode: c -*-
2
+ * $Id: hash.gcc,v 1.1.1.1 2004-05-19 18:09:55 bfulgham Exp $
3
+ * http://www.bagley.org/~doug/shootout/
4
+ */
5
+
6
+ #include <stdio.h>
7
+ #include <stdlib.h>
8
+ #include <unistd.h>
9
+ #include "../../Include/simple_hash.h"
10
+
11
+ int main(int argc, char *argv[]) {
12
+ int i, c=0, n = ((argc == 2) ? atoi(argv[1]) : 1);
13
+ char buf[32];
14
+
15
+ struct ht_ht *ht = ht_create(n);
16
+
17
+ for (i=1; i<=n; i++) {
18
+ sprintf(buf, "%x", i);
19
+ (ht_find_new(ht, buf))->val = i;
20
+ }
21
+
22
+ for (i=n; i>0; i--) {
23
+ sprintf(buf, "%d", i);
24
+ if (ht_find(ht, buf)) c++;
25
+ }
26
+
27
+ ht_destroy(ht);
28
+
29
+ printf("%d\n", c);
30
+ return(0);
31
+ }
@@ -0,0 +1,38 @@
1
+ /* -*- mode: c -*-
2
+ * $Id: hash2.gcc,v 1.1.1.1 2004-05-19 18:10:02 bfulgham Exp $
3
+ * http://www.bagley.org/~doug/shootout/
4
+ */
5
+
6
+ #include <stdio.h>
7
+ #include <stdlib.h>
8
+ #include <unistd.h>
9
+ #include "../../Include/simple_hash.h"
10
+
11
+ int main(int argc, char *argv[]) {
12
+ int i, n = ((argc == 2) ? atoi(argv[1]) : 1);
13
+ char buf[32];
14
+ struct ht_ht *ht1 = ht_create(10000);
15
+ struct ht_ht *ht2 = ht_create(10000);
16
+ struct ht_node *node;
17
+
18
+ for (i=0; i<=9999; ++i) {
19
+ sprintf(buf, "foo_%d", i);
20
+ ht_find_new(ht1, buf)->val = i;
21
+ }
22
+
23
+ for (i=0; i<n; ++i) {
24
+ for (node=ht_first(ht1); node; node=ht_next(ht1)) {
25
+ ht_find_new(ht2, node->key)->val += node->val;
26
+ }
27
+ }
28
+
29
+ printf("%d %d %d %d\n",
30
+ (ht_find(ht1, "foo_1"))->val,
31
+ (ht_find(ht1, "foo_9999"))->val,
32
+ (ht_find(ht2, "foo_1"))->val,
33
+ (ht_find(ht2, "foo_9999"))->val);
34
+
35
+ ht_destroy(ht1);
36
+ ht_destroy(ht2);
37
+ return(0);
38
+ }
@@ -0,0 +1,72 @@
1
+ /* -*- mode: c -*-
2
+ * $Id: heapsort.gcc,v 1.1.1.1 2004-05-19 18:10:08 bfulgham Exp $
3
+ * http://www.bagley.org/~doug/shootout/
4
+ */
5
+
6
+ #include <stdlib.h>
7
+ #include <math.h>
8
+ #include <stdio.h>
9
+
10
+ #define IM 139968
11
+ #define IA 3877
12
+ #define IC 29573
13
+
14
+ double
15
+ gen_random(double max) {
16
+ static long last = 42;
17
+ return( max * (last = (last * IA + IC) % IM) / IM );
18
+ }
19
+
20
+ void
21
+ heapsort(int n, double *ra) {
22
+ int i, j;
23
+ int ir = n;
24
+ int l = (n >> 1) + 1;
25
+ double rra;
26
+
27
+ for (;;) {
28
+ if (l > 1) {
29
+ rra = ra[--l];
30
+ } else {
31
+ rra = ra[ir];
32
+ ra[ir] = ra[1];
33
+ if (--ir == 1) {
34
+ ra[1] = rra;
35
+ return;
36
+ }
37
+ }
38
+ i = l;
39
+ j = l << 1;
40
+ while (j <= ir) {
41
+ if (j < ir && ra[j] < ra[j+1]) { ++j; }
42
+ if (rra < ra[j]) {
43
+ ra[i] = ra[j];
44
+ j += (i = j);
45
+ } else {
46
+ j = ir + 1;
47
+ }
48
+ }
49
+ ra[i] = rra;
50
+ }
51
+ }
52
+
53
+ int
54
+ main(int argc, char *argv[]) {
55
+ int N = ((argc == 2) ? atoi(argv[1]) : 1);
56
+ double *ary;
57
+ int i;
58
+
59
+ /* create an array of N random doubles */
60
+ ary = (double *)malloc((N+1) * sizeof(double));
61
+ for (i=1; i<=N; i++) {
62
+ ary[i] = gen_random(1);
63
+ }
64
+
65
+ heapsort(N, ary);
66
+
67
+ printf("%.10f\n", ary[N]);
68
+
69
+ free(ary);
70
+ return(0);
71
+ }
72
+