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,68 @@
1
+ /*
2
+ * The Computer Language Benchmarks Game
3
+ * http://shootout.alioth.debian.org/
4
+
5
+ * contributed by bearophile, Jan 24 2006
6
+ * modified by wolfjb, Feb 28 2007
7
+ * modified by alex burlyga, may 16, 2008
8
+ */
9
+ #include <stdio.h>
10
+ #include <stdlib.h>
11
+
12
+ static inline int ack(register int x, register int y) __attribute__((const));
13
+ static inline int fib(int n) __attribute__((const));
14
+ static inline double fibFP(double n) __attribute__((const));
15
+ static inline int tak(int x, int y, int z) __attribute__((const));
16
+ static inline double takFP(double x, double y, double z) __attribute__((const));
17
+
18
+ static inline int ack(register int x, register int y){
19
+ if (x == 0) {
20
+ return y + 1;
21
+ }
22
+
23
+ return ack(x - 1, ((y | 0) ? ack(x, y - 1) : 1));
24
+ }
25
+
26
+ static inline int fib(register int n) {
27
+ if (n < 2) {
28
+ return 1;
29
+ }
30
+ return fib(n - 2) + fib(n - 1);
31
+ }
32
+
33
+ static inline double fibFP(double n) {
34
+ if (n < 2.0) {
35
+ return 1.0;
36
+ }
37
+ return fibFP(n - 2.0) + fibFP(n - 1.0);
38
+ }
39
+
40
+ static inline int tak(register int x, register int y, register int z) {
41
+ if (y < x) {
42
+ return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y));
43
+ }
44
+ return z;
45
+ }
46
+
47
+ static inline double takFP(double x, double y, double z) {
48
+ if (y < x)
49
+ return takFP( takFP(x-1.0, y, z), takFP(y-1.0, z, x), takFP(z-1.0, x, y) );
50
+ return z;
51
+ }
52
+
53
+ int
54
+ main(int argc, char ** argv) {
55
+ int n = 3;
56
+
57
+ if(argc > 1) {
58
+ n = strtol(argv[1], NULL, 10) - 1;
59
+ }
60
+
61
+ printf("Ack(3,%d): %d\n", n + 1, ack(3, n+1));
62
+ printf("Fib(%.1f): %.1f\n", 28.0 + n, fibFP(28.0+n));
63
+ printf("Tak(%d,%d,%d): %d\n", 3 * n, 2 * n, n, tak(3*n, 2*n, n));
64
+ printf("Fib(3): %d\n", fib(3));
65
+ printf("Tak(3.0,2.0,1.0): %.1f\n", takFP(3.0, 2.0, 1.0));
66
+
67
+ return 0;
68
+ }
@@ -0,0 +1,55 @@
1
+ /*
2
+ * The Computer Language Shootout
3
+ * http://shootout.alioth.debian.org/
4
+
5
+ * contributed by bearophile, Jan 24 2006
6
+ * modified by wolfjb, Feb 28 2007
7
+ */
8
+ #include <stdio.h>
9
+
10
+ int ack(int x, int y) {
11
+ if (x == 0) {
12
+ return y + 1;
13
+ }
14
+
15
+ return ack(x - 1, ((y | 0) ? ack(x, y - 1) : 1));
16
+ }
17
+
18
+ int fib(int n) {
19
+ if (n < 2) {
20
+ return 1;
21
+ }
22
+ return fib(n - 2) + fib(n - 1);
23
+ }
24
+
25
+ double fibFP(double n) {
26
+ if (n < 2.0) {
27
+ return 1.0;
28
+ }
29
+ return fibFP(n - 2.0) + fibFP(n - 1.0);
30
+ }
31
+
32
+ int tak(int x, int y, int z) {
33
+ if (y < x) {
34
+ return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y));
35
+ }
36
+ return z;
37
+ }
38
+
39
+ double takFP(double x, double y, double z) {
40
+ if (y < x)
41
+ return takFP( takFP(x-1.0, y, z), takFP(y-1.0, z, x), takFP(z-1.0, x, y) );
42
+ return z;
43
+ }
44
+
45
+ int main(int argc, char ** argv) {
46
+ int n = atoi(argv[1]) - 1;
47
+
48
+ printf("Ack(3,%d): %d\n", n + 1, ack(3, n+1));
49
+ printf("Fib(%.1f): %.1f\n", 28.0 + n, fibFP(28.0+n));
50
+ printf("Tak(%d,%d,%d): %d\n", 3 * n, 2 * n, n, tak(3*n, 2*n, n));
51
+ printf("Fib(3): %d\n", fib(3));
52
+ printf("Tak(3.0,2.0,1.0): %.1f\n", takFP(3.0, 2.0, 1.0));
53
+
54
+ return 0;
55
+ }
@@ -0,0 +1,126 @@
1
+ /*
2
+ ** The Computer Language Shootout
3
+ ** http://shootout.alioth.debian.org/
4
+ ** contributed by Mike Pall
5
+ **
6
+ ** regex-dna benchmark using PCRE
7
+ **
8
+ ** compile with:
9
+ ** gcc -O3 -fomit-frame-pointer -o regexdna regexdna.c -lpcre
10
+ */
11
+
12
+ #define __USE_STRING_INLINES
13
+ #include <stdio.h>
14
+ #include <string.h>
15
+ #include <stdlib.h>
16
+ #include <pcre.h>
17
+
18
+ typedef struct fbuf {
19
+ char *buf;
20
+ size_t size, len;
21
+ } fbuf_t;
22
+
23
+ static void fb_init(fbuf_t *b)
24
+ {
25
+ b->buf = NULL;
26
+ b->len = b->size = 0;
27
+ }
28
+
29
+ static char *fb_need(fbuf_t *b, size_t need)
30
+ {
31
+ need += b->len;
32
+ if (need > b->size) {
33
+ if (b->size == 0) b->size = need;
34
+ else while (need > b->size) b->size += b->size;
35
+ if (!(b->buf = realloc(b->buf, b->size))) exit(1);
36
+ }
37
+ return b->buf+b->len;
38
+ }
39
+
40
+ #define FB_MINREAD (3<<16)
41
+
42
+ /* Read all of a stdio stream into dst buffer. */
43
+ static size_t fb_readall(fbuf_t *dst, FILE *fp)
44
+ {
45
+ char *dp;
46
+ int n;
47
+ for (dp = fb_need(dst, FB_MINREAD);
48
+ (n = fread(dp, 1, dst->size-dst->len, fp)) > 0;
49
+ dp = fb_need(dst, FB_MINREAD)) dst->len += n;
50
+ if (ferror(fp)) exit(1);
51
+ return dst->len;
52
+ }
53
+
54
+ /* Substitute pattern p with replacement r, copying from src to dst buffer. */
55
+ static size_t fb_subst(fbuf_t *dst, fbuf_t *src, const char *p, const char *r)
56
+ {
57
+ pcre *re;
58
+ pcre_extra *re_ex;
59
+ const char *re_e;
60
+ char *dp;
61
+ int re_eo, m[3], pos, rlen, clen;
62
+ if (!(re = pcre_compile(p, PCRE_CASELESS, &re_e, &re_eo, NULL))) exit(1);
63
+ re_ex = pcre_study(re, 0, &re_e);
64
+ for (dst->len = 0, rlen = strlen(r), pos = 0;
65
+ pcre_exec(re, re_ex, src->buf, src->len, pos, 0, m, 3) >= 0;
66
+ pos = m[1]) {
67
+ clen = m[0]-pos;
68
+ dp = fb_need(dst, clen+rlen);
69
+ dst->len += clen+rlen;
70
+ memcpy(dp, src->buf+pos, clen);
71
+ memcpy(dp+clen, r, rlen);
72
+ }
73
+ clen = src->len-pos;
74
+ dp = fb_need(dst, clen);
75
+ dst->len += clen;
76
+ memcpy(dp, src->buf+pos, clen);
77
+ return dst->len;
78
+ }
79
+
80
+ /* Count all matches with pattern p in src buffer. */
81
+ static int fb_countmatches(fbuf_t *src, const char *p)
82
+ {
83
+ pcre *re;
84
+ pcre_extra *re_ex;
85
+ const char *re_e;
86
+ int re_eo, m[3], pos, count;
87
+ if (!(re = pcre_compile(p, PCRE_CASELESS, &re_e, &re_eo, NULL))) exit(1);
88
+ re_ex = pcre_study(re, 0, &re_e);
89
+ for (count = 0, pos = 0;
90
+ pcre_exec(re, re_ex, src->buf, src->len, pos, 0, m, 3) >= 0;
91
+ pos = m[1]) count++;
92
+ return count;
93
+ }
94
+
95
+ static const char *variants[] = {
96
+ "agggtaaa|tttaccct", "[cgt]gggtaaa|tttaccc[acg]",
97
+ "a[act]ggtaaa|tttacc[agt]t", "ag[act]gtaaa|tttac[agt]ct",
98
+ "agg[act]taaa|ttta[agt]cct", "aggg[acg]aaa|ttt[cgt]ccct",
99
+ "agggt[cgt]aa|tt[acg]accct", "agggta[cgt]a|t[acg]taccct",
100
+ "agggtaa[cgt]|[acg]ttaccct", NULL
101
+ };
102
+
103
+ static const char *subst[] = {
104
+ "B", "(c|g|t)", "D", "(a|g|t)", "H", "(a|c|t)", "K", "(g|t)",
105
+ "M", "(a|c)", "N", "(a|c|g|t)", "R", "(a|g)", "S", "(c|g)",
106
+ "V", "(a|c|g)", "W", "(a|t)", "Y", "(c|t)", NULL
107
+ };
108
+
109
+ int main(int argc, char **argv)
110
+ {
111
+ fbuf_t seq[2];
112
+ const char **pp;
113
+ size_t ilen, clen, slen;
114
+ int flip;
115
+ fb_init(&seq[0]);
116
+ fb_init(&seq[1]);
117
+ ilen = fb_readall(&seq[0], stdin);
118
+ clen = fb_subst(&seq[1], &seq[0], ">.*|\n", "");
119
+ for (pp = variants; *pp; pp++)
120
+ printf("%s %d\n", *pp, fb_countmatches(&seq[1], *pp));
121
+ for (slen = 0, flip = 1, pp = subst; *pp; pp += 2, flip = 1-flip)
122
+ slen = fb_subst(&seq[1-flip], &seq[flip], *pp, pp[1]);
123
+ printf("\n%zu\n%zu\n%zu\n", ilen, clen, slen);
124
+ return 0;
125
+ }
126
+
@@ -0,0 +1,136 @@
1
+ /* -*- mode: c -*-
2
+ * $Id: regexmatch.gcc,v 1.1.1.1 2004-05-19 18:11:23 bfulgham Exp $
3
+ * http://www.bagley.org/~doug/shootout/
4
+ */
5
+
6
+ #include <sys/types.h>
7
+ #include <sys/stat.h>
8
+ #include <fcntl.h>
9
+ #include <stdio.h>
10
+ #include <pcre.h>
11
+ #include <string.h>
12
+
13
+ #define MAXLINES 100
14
+ #define MAXLINELEN 132
15
+
16
+ char *pattern =
17
+ "(?:^|[^\\d\\(])" /* must be preceeded by non-digit */
18
+ "(\\()?" /* match 1: possible initial left paren */
19
+ "(\\d\\d\\d)" /* match 2: area code is 3 digits */
20
+ "(?(1)\\))" /* if match1 then match right paren */
21
+ "[ ]" /* area code followed by one space */
22
+ "(\\d\\d\\d)" /* match 3: prefix of 3 digits */
23
+ "[ -]" /* separator is either space or dash */
24
+ "(\\d\\d\\d\\d)" /* match 4: last 4 digits */
25
+ "\\D" /* must be followed by a non-digit */
26
+ ;
27
+
28
+
29
+ int
30
+ main(int argc, char *argv[]) {
31
+ int NUM = ((argc == 2) ? atoi(argv[1]) : 1);
32
+ int count;
33
+ char *cptr = "";
34
+ char **phones;
35
+ pcre *re;
36
+ int erroffset;
37
+ const char *errptr;
38
+ int n, lines = 0;
39
+ char num[256];
40
+ int i, j, k, matchlen;
41
+ char *matchoffset;
42
+ int nmatches;
43
+ int *ovec, ovecsize;
44
+ pcre_extra *study;
45
+
46
+ phones = (char **)malloc(MAXLINES * sizeof(char *));
47
+ if (!phones) {
48
+ fprintf(stderr, "malloc for phones array failed\n");
49
+ exit(1);
50
+ }
51
+ lines = 0;
52
+ while (cptr) {
53
+ phones[lines] = (char *)malloc(MAXLINELEN);
54
+ if (!phones[lines]) {
55
+ fprintf(stderr, "malloc to hold line #%d failed\n", lines);
56
+ exit(1);
57
+ }
58
+ cptr = fgets(phones[lines], MAXLINELEN, stdin);
59
+ lines++;
60
+ if (lines > MAXLINES) {
61
+ fprintf(stderr, "MAXLINES is too small\n");
62
+ exit(1);
63
+ }
64
+ }
65
+
66
+ re = pcre_compile(pattern, 0, &errptr, &erroffset, NULL);
67
+ if (!re) {
68
+ fprintf(stderr, "can't open compile regexp\n");
69
+ exit(1);
70
+ }
71
+
72
+ study = pcre_study(re, 0, &errptr);
73
+
74
+ if (pcre_fullinfo(re, NULL, PCRE_INFO_CAPTURECOUNT, &nmatches) != 0) {
75
+ fprintf(stderr, "pcre_fullinfo failed\n");
76
+ exit(1);
77
+ }
78
+ nmatches++; /* add match of entire pattern */
79
+
80
+ ovecsize = sizeof(int) * nmatches * 3;
81
+ ovec = (int *)malloc(ovecsize);
82
+ if (!ovec) {
83
+ fprintf(stderr, "malloc for ovec array failed\n");
84
+ exit(1);
85
+ }
86
+
87
+ count = 0;
88
+ while (NUM--) {
89
+ for (i=0; i<lines; i++) {
90
+ n = pcre_exec(re, study,
91
+ phones[i], strlen(phones[i]), 0,
92
+ 0, ovec, ovecsize);
93
+ if (n == nmatches) {
94
+ /* stuff the match into the buffer "num" */
95
+ k = 2*2; /* initial offset into ovec */
96
+ /* areacode */
97
+ j = 0;
98
+ num[j++] = '(';
99
+ matchoffset = phones[i] + ovec[k];
100
+ matchlen = ovec[k+1] - ovec[k];
101
+ strncpy(num+j, matchoffset, matchlen);
102
+ j += matchlen; k += 2;
103
+ num[j++] = ')';
104
+ /* space separator */
105
+ num[j++] = ' ';
106
+ /* exchange */
107
+ matchoffset = phones[i] + ovec[k];
108
+ matchlen = ovec[k+1] - ovec[k];
109
+ strncpy(num+j, matchoffset, matchlen);
110
+ j += matchlen; k += 2;
111
+ /* dash */
112
+ num[j++] = '-';
113
+ /* last 4 digits */
114
+ matchoffset = phones[i] + ovec[k];
115
+ matchlen = ovec[k+1] - ovec[k];
116
+ strncpy(num+j, matchoffset, matchlen);
117
+ j += matchlen; k += 2;
118
+ /* with a cherry on top */
119
+ num[j] = 0;
120
+ if (0 == NUM) {
121
+ count++;
122
+ printf("%d: %s\n", count, num);
123
+ }
124
+ }
125
+ }
126
+ }
127
+
128
+ for (i=0; i<MAXLINES; i++) {
129
+ free(phones[i]);
130
+ }
131
+ free(phones);
132
+ free(ovec);
133
+
134
+ return(0);
135
+ }
136
+
@@ -0,0 +1,85 @@
1
+ /* The Computer Language Benchmarks Game
2
+ http://shootout.alioth.debian.org
3
+ contributed by Arek Bochinski
4
+ */
5
+
6
+
7
+ #define _GNU_SOURCE 1
8
+ #include <stdio.h>
9
+ #include <string.h>
10
+ #include <limits.h>
11
+
12
+ //conversion table
13
+ static const char FtoCOMP[128] = {
14
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,'\n',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
15
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
16
+ 0,'T','V','G','H',0,0,'C','D',0,0,'M',0,'K','N',0,
17
+ 0,0,'Y','S','A',0,'B','W',0,'R',0, 0, 0,0,0,0,
18
+ 0,'T','V','G','H',0,0,'C','D',0,0,'M',0,'K','N',0,
19
+ 0,0,'Y','S','A',0,'B','W',0,'R',0,0,0,0,0,0
20
+ };
21
+
22
+ int main (int argc, char * argv[]) {
23
+ char buffer[10240];
24
+ int itotal=0,forward=0,end=0;
25
+ char peek;
26
+ //print header
27
+ printf("%s",fgets_unlocked(buffer,61,stdin));
28
+ while(fgets_unlocked(buffer+itotal,10239,stdin))
29
+ {
30
+ //if header is next
31
+ if((peek=fgetc_unlocked(stdin))=='>')
32
+ {
33
+ //get total
34
+ itotal+=strlen(buffer+itotal);
35
+ //set the reverse indexes
36
+ forward=0;
37
+ end=itotal-2;
38
+ //reverse the buffer and complement it
39
+ while(forward<end)
40
+ {
41
+ if(buffer[forward]=='\n')++forward;
42
+ if(buffer[end]=='\n')--end;
43
+ buffer[forward]^=buffer[end];
44
+ buffer[end]^=buffer[forward];
45
+ buffer[forward]^=buffer[end];
46
+ buffer[end]=FtoCOMP[buffer[end]];
47
+ buffer[forward]=FtoCOMP[buffer[forward]];
48
+ ++forward;
49
+ --end;
50
+ }
51
+ //print it out
52
+ puts(buffer);
53
+ //print out the next header if there
54
+ printf("%c%s",'>',fgets_unlocked(buffer,10239,stdin));
55
+ //reset total
56
+ itotal=0;
57
+ }
58
+ else{
59
+ //header is not next, plase character back into stdin
60
+ ungetc(peek,stdin);
61
+ //sum up the total lenght of characters in the buffer
62
+ itotal+=strlen(buffer+itotal);
63
+ }
64
+ }
65
+ //print last sequence at end of stdin
66
+ itotal+=strlen(buffer+itotal);
67
+ //set the reverse indexes
68
+ forward=0;
69
+ end=itotal-2;
70
+ //reverse the buffer and complement it
71
+ while(forward<end)
72
+ {
73
+ if(buffer[forward]=='\n')++forward;
74
+ if(buffer[end]=='\n')--end;
75
+ buffer[forward]^=buffer[end];
76
+ buffer[end]^=buffer[forward];
77
+ buffer[forward]^=buffer[end];
78
+ buffer[end]=FtoCOMP[buffer[end]];
79
+ buffer[forward]=FtoCOMP[buffer[forward]];
80
+ ++forward;
81
+ --end;
82
+ }
83
+ puts(buffer);
84
+ return 0;
85
+ }