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,85 @@
1
+ /* -*- mode: c -*-
2
+ * $Id: wordfreq.gcc-2.gcc,v 1.1 2004-11-10 06:40:32 bfulgham Exp $
3
+ * http://www.bagley.org/~doug/shootout/
4
+ * From Kerry Clendinning
5
+ */
6
+
7
+ #include <stdio.h>
8
+ #include <ctype.h>
9
+ #include <malloc.h>
10
+ #include <stdlib.h>
11
+ #include <string.h>
12
+
13
+ #define NALPHA 26 /* number of letters in the alphabet */
14
+ struct onebytehash {
15
+ int count;
16
+ struct onebytehash *next_chain,*next_hash[NALPHA];
17
+ char string[1]; /* one of those stretchy string-things */
18
+ };
19
+
20
+ int compare(struct onebytehash **a, struct onebytehash **b);
21
+ typedef int (*comparator)(const void *, const void *);
22
+
23
+ int
24
+ main()
25
+ {
26
+ int c, nextc, i = 0, curbufsz = 200, used_hash_count = 0;
27
+ struct onebytehash the_hash = {0,NULL},
28
+ *current_hash = &the_hash, *chain = NULL;
29
+ struct onebytehash **sort_array, **sort_tmp;
30
+ char *buf;
31
+
32
+ buf = malloc(curbufsz + 1);
33
+ c = getchar();
34
+ while ( (nextc = getchar()) > 0 ) {
35
+ if (isalpha(c)) {
36
+ buf[i++] = tolower(c);
37
+ buf[i] = '\0';
38
+ c = tolower(c) - 'a';
39
+ if (!current_hash->next_hash[c]) {
40
+ if (i >= curbufsz) {
41
+ curbufsz *= 2;
42
+ buf = realloc(buf,curbufsz + 1);
43
+ }
44
+ current_hash->next_hash[c] =
45
+ malloc(sizeof(struct onebytehash) + i+1);
46
+ bzero(current_hash->next_hash[c],sizeof(struct onebytehash));
47
+ current_hash->next_hash[c]->next_chain = chain;
48
+ chain = current_hash->next_hash[c];
49
+ strcpy(chain->string,buf);
50
+ }
51
+ current_hash = current_hash->next_hash[c];
52
+ if (!isalpha(nextc)) {
53
+ if (!current_hash->count) used_hash_count++;
54
+ current_hash->count++;
55
+ }
56
+ } else {
57
+ current_hash = &the_hash;
58
+ i = 0;
59
+ }
60
+ c = nextc;
61
+ }
62
+
63
+ sort_array = sort_tmp =
64
+ malloc(sizeof(struct onebytehash *) * used_hash_count);
65
+ while (chain) {
66
+ if (chain->count) *sort_tmp++ = chain;
67
+ chain = chain->next_chain;
68
+ }
69
+
70
+ qsort(sort_array, used_hash_count, sizeof(struct onebytehash *),
71
+ (comparator) compare);
72
+
73
+ for (i=0;i<used_hash_count;i++)
74
+ printf("%7d\t%s\n", sort_array[i]->count,sort_array[i]->string);
75
+
76
+ /* don't forget to free allocated memory here */
77
+
78
+ return(0);
79
+ }
80
+
81
+ int compare(struct onebytehash **a, struct onebytehash **b)
82
+ {
83
+ if ((*b)->count == (*a)->count) return (strcmp((*b)->string,(*a)->string));
84
+ return ((*b)->count - (*a)->count);
85
+ }
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/perl
2
+ # $Id: ackermann.perl,v 1.3 2005-04-04 14:56:35 bfulgham Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+
5
+ # With help from Ernesto Hernandez-Novich
6
+ use integer;
7
+
8
+ # It's prettier but slower to do this
9
+ #sub Ack {
10
+ # my($M, $N) = @_;
11
+ # return( $N + 1 ) if ($M == 0);
12
+ # return( Ack($M - 1, 1) ) if ($N == 0);
13
+ # Ack($M - 1, Ack($M, $N - 1));
14
+ #}
15
+
16
+ # in our quest for speed, we must get ugly:
17
+ # it helps reduce stack frame size a little bit
18
+ # from Leif Stensson
19
+ sub Ack {
20
+ return $_[0] ? ($_[1] ? Ack($_[0]-1, Ack($_[0], $_[1]-1))
21
+ : Ack($_[0]-1, 1))
22
+ : $_[1]+1;
23
+ }
24
+
25
+ my $NUM = $ARGV[0];
26
+ $NUM = 1 if ($NUM < 1);
27
+ my $ack = Ack(3, $NUM);
28
+ print "Ack(3,$NUM): $ack\n";
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/perl
2
+ # $Id: ackermann.perl-2.perl,v 1.1 2005-04-04 14:56:35 bfulgham Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+
5
+ # With help from Ernesto Hernandez-Novich
6
+ use integer;
7
+
8
+ # Note: If memoization were allowed in this program, we could
9
+ # do so by adding:
10
+ use Memoize;
11
+ memoize("Ack");
12
+
13
+ # in our quest for speed, we must get ugly:
14
+ # it helps reduce stack frame size a little bit
15
+ # from Leif Stensson
16
+ sub Ack {
17
+ return $_[0] ? ($_[1] ? Ack($_[0]-1, Ack($_[0], $_[1]-1))
18
+ : Ack($_[0]-1, 1))
19
+ : $_[1]+1;
20
+ }
21
+
22
+ my $NUM = $ARGV[0];
23
+ $NUM = 1 if ($NUM < 1);
24
+ my $ack = Ack(3, $NUM);
25
+ print "Ack(3,$NUM): $ack\n";
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/perl
2
+ # $Id: ackermann.perl-3.perl,v 1.1 2005-04-27 16:51:28 greg-guest Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+
5
+ # We avoid using memoize by inlining the cache
6
+ # from Thomas Drugeon
7
+
8
+ # in our quest for speed, we must get ugly:
9
+ # it helps reduce stack frame size a little bit
10
+ # from Leif Stensson
11
+ sub Ack {
12
+ $_[0] ? ($Ack[$_[0]][$_[1]] ||= $_[1] ? Ack($_[0]-1, Ack($_[0], $_[1]-1))
13
+ : Ack($_[0]-1, 1))
14
+ : $_[1]+1;
15
+ }
16
+
17
+ my $NUM = $ARGV[0];
18
+ $NUM = 1 if ($NUM < 1);
19
+ my $ack = Ack(3, $NUM);
20
+ print "Ack(3,$NUM): $ack\n";
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/perl
2
+ # The Great Win32 Computer Language Shootout
3
+ # http://shootout.alioth.debian.org/
4
+ # modified by Isaac Gouy
5
+
6
+ use integer;
7
+
8
+ sub Ack {
9
+ my($M, $N) = @_;
10
+ return( $N + 1 ) if ($M == 0);
11
+ return( Ack($M - 1, 1) ) if ($N == 0);
12
+ Ack($M - 1, Ack($M, $N - 1));
13
+ }
14
+
15
+ my $NUM = $ARGV[0];
16
+ $NUM = 1 if ($NUM < 1);
17
+ my $ack = Ack(3, $NUM);
18
+ print "Ack(3,$NUM): $ack\n";
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/perl
2
+ # $Id: ary.perl,v 1.2 2004-05-22 07:25:00 bfulgham Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+
5
+ # this program is modified from:
6
+ # http://cm.bell-labs.com/cm/cs/who/bwk/interps/pap.html
7
+ # Timing Trials, or, the Trials of Timing: Experiments with Scripting
8
+ # and User-Interface Languages</a> by Brian W. Kernighan and
9
+ # Christopher J. Van Wyk.
10
+
11
+ my $n = @ARGV[0] || 1;
12
+ my @X;
13
+ my @Y;
14
+
15
+ my $last = $n - 1;
16
+ for my $i (0..$last) {
17
+ $X[$i] = $i + 1;
18
+ }
19
+ for my $k (0..999) {
20
+ for my $i (reverse 0..$last) {
21
+ $Y[$i] += $X[$i];
22
+ }
23
+ }
24
+
25
+ print "$Y[0] $Y[$last]\n";
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/perl
2
+ # The Great Computer Language Shootout
3
+ # http://shootout.alioth.debian.org/
4
+ # Modified: 2005-06-18 Cosimo Streppone
5
+
6
+ use integer;
7
+
8
+ my $n = @ARGV[0] || 1;
9
+ my(@X, @Y, $i, $k);
10
+ my $last = $n - 1;
11
+
12
+ # Initialize @X list in a single step
13
+ @X = (1 .. $n);
14
+
15
+ # Execute 1000 times
16
+ for(0 .. 999) {
17
+ # Use of `$_' aliasing is faster than using a lexical var
18
+ # Also, there is no need to reverse (0 .. $last) list
19
+ $Y[$_] += $X[$_] for 0 .. $last;
20
+ }
21
+
22
+ print $Y[0], ' ', $Y[$last], "\n";
23
+
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/perl
2
+ # The Computer Language Shootout
3
+ # http://shootout.alioth.debian.org/
4
+ #
5
+ # Contributed by Doug King
6
+ # Corrected by Heiner Marxen
7
+
8
+ use integer;
9
+
10
+ sub item_check {
11
+ my ($tree) = @_;
12
+
13
+ return $$tree[2] unless (defined $$tree[0]);
14
+ return $$tree[2] + item_check($$tree[0]) - item_check($$tree[1]);
15
+ }
16
+
17
+
18
+ sub bottom_up_tree {
19
+ my($item, $depth) = @_;
20
+
21
+ return [ undef, undef, $item ] if $depth <= 0;
22
+ return [ bottom_up_tree(2 * $item - 1, $depth - 1),
23
+ bottom_up_tree(2 * $item, $depth - 1),
24
+ $item ];
25
+ }
26
+
27
+
28
+ $n = shift @ARGV;
29
+
30
+ $min_depth = 4;
31
+
32
+ if ( ($min_depth + 2) > $n) {
33
+ $max_depth = $min_depth + 2;
34
+ } else {
35
+ $max_depth = $n;
36
+ }
37
+
38
+ $stretch_depth = $max_depth + 1;
39
+
40
+ $stretch_tree = bottom_up_tree(0, $stretch_depth);
41
+ print "stretch tree of depth $stretch_depth\t check: ", item_check($stretch_tree), "\n";
42
+ $stretch_tree = undef;
43
+
44
+ $long_lived_tree = bottom_up_tree(0, $max_depth);
45
+
46
+ $depth = $min_depth;
47
+ while( $depth <= $max_depth ) {
48
+
49
+ $iterations = 2 ** ($max_depth - $depth + $min_depth);
50
+ $check = 0;
51
+
52
+ for $i (1..$iterations) {
53
+ $temp_tree = bottom_up_tree($i, $depth);
54
+ $check += item_check($temp_tree);
55
+ $temp_tree = undef;
56
+
57
+ $temp_tree = bottom_up_tree(-$i, $depth);
58
+ $check += item_check($temp_tree);
59
+ $temp_tree = undef;
60
+ }
61
+
62
+ print $iterations * 2, "\t trees of depth $depth\t check: ", $check, "\n";
63
+ $depth += 2;
64
+ }
65
+
66
+ print "long lived tree of depth $max_depth\t check: ", item_check($long_lived_tree), "\n";
@@ -0,0 +1,71 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # Contributed by Doug King
5
+ # Corrected by Heiner Marxen
6
+ # Tree-building made non-recursive by Steffen Mueller
7
+
8
+ use integer;
9
+
10
+ sub item_check {
11
+ my ($tree) = @_;
12
+
13
+ return $tree->[2] unless (defined $tree->[0]);
14
+ return $tree->[2] + item_check($tree->[0]) - item_check($tree->[1]);
15
+ }
16
+
17
+
18
+ sub bottom_up_tree {
19
+ my($depth) = @_;
20
+
21
+ my @pool;
22
+ push @pool, [undef, undef, -$_] foreach 0..2**$depth-1;
23
+
24
+ foreach my $exponent (reverse(0..($depth-1))) {
25
+ push @pool, [reverse(splice(@pool, 0, 2)), $_]
26
+ foreach reverse(-(2**$exponent-1) .. 0);
27
+ }
28
+ return $pool[0];
29
+ }
30
+
31
+
32
+ my $n = shift @ARGV;
33
+
34
+ my $min_depth = 4;
35
+ my $max_depth;
36
+
37
+ if ( ($min_depth + 2) > $n) {
38
+ $max_depth = $min_depth + 2;
39
+ } else {
40
+ $max_depth = $n;
41
+ }
42
+
43
+ {
44
+ my $stretch_depth = $max_depth + 1;
45
+ my $stretch_tree = bottom_up_tree($stretch_depth);
46
+ print "stretch tree of depth $stretch_depth\t check: ",
47
+ item_check($stretch_tree), "\n";
48
+ }
49
+
50
+ my $long_lived_tree = bottom_up_tree($max_depth);
51
+
52
+ my $depth = $min_depth;
53
+ while( $depth <= $max_depth ) {
54
+ my $iterations = 2 ** ($max_depth - $depth + $min_depth);
55
+ my $check = 0;
56
+
57
+ foreach my $i (1..$iterations) {
58
+ my $temp_tree = bottom_up_tree($depth);
59
+ $check += item_check($temp_tree);
60
+
61
+ $temp_tree = bottom_up_tree($depth);
62
+ $check += item_check($temp_tree);
63
+ }
64
+
65
+ print $iterations * 2, "\t trees of depth $depth\t check: ", $check, "\n";
66
+ $depth += 2;
67
+ }
68
+
69
+ print "long lived tree of depth $max_depth\t check: ",
70
+ item_check($long_lived_tree), "\n";
71
+
@@ -0,0 +1,67 @@
1
+ #########################################
2
+ # The Computer Language Shootout #
3
+ # http://shootout.alioth.debian.org/ #
4
+ # #
5
+ # Contributed by Jesse Millikan #
6
+ #########################################
7
+
8
+ use threads;
9
+ use threads::shared;
10
+
11
+ # Complement method is numerical based on Haskell version
12
+ my ($red, $yellow, $blue, $none) = (0,1,2,3);
13
+
14
+ # Count, signal and mutex are all $meetings
15
+ my $meetings : shared = $ARGV[0];
16
+
17
+ # Locked and updated by each thread when it ends
18
+ my $total_meetings : shared = 0;
19
+
20
+ # Colour communication variables
21
+ my $first : shared = $none;
22
+ my $second : shared = $none;
23
+
24
+ # $_ is thread on the outer map and color on the inner loop
25
+ map { $_->join } (map {
26
+ # async starts a new thread running the block given
27
+ async {
28
+ my ($color, $other_color) = ($_,$none);
29
+ my $met = 0;
30
+
31
+ # with 'redo', loop until 'last' is called
32
+ LIVE: {
33
+
34
+ # Meeting place
35
+ {
36
+ lock $meetings;
37
+
38
+ last LIVE if($meetings <= 0); # 'fade' by jumping out of the block
39
+
40
+ if($first != $none){
41
+ $other_color = $first;
42
+ $second = $color;
43
+ cond_signal $meetings;
44
+ $meetings -= 1;
45
+ $first = $none;
46
+ }
47
+ else
48
+ {
49
+ $first = $color;
50
+ cond_wait $meetings;
51
+ $other_color = $second;
52
+ }
53
+ } # Unlock the meeting place
54
+
55
+ $color = 3 - $color - $other_color if($color != $other_color);
56
+ $met++;
57
+
58
+ redo;
59
+ }
60
+
61
+ # Lock the total and add own to it before dying
62
+ lock $total_meetings;
63
+ $total_meetings += $met;
64
+ }
65
+ } ($blue, $red, $yellow, $blue));
66
+
67
+ print "$total_meetings\n";
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/perl
2
+ # $Id: echo.perl,v 1.1.1.1 2004-05-19 18:09:37 bfulgham Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+
5
+ use Socket;
6
+
7
+ my $DATA = "Hello there sailor\n";
8
+
9
+ sub server_sock {
10
+ local *SS;
11
+ socket(SS, PF_INET, SOCK_STREAM, 0) or
12
+ die "server/socket ($!)";
13
+ setsockopt(SS, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) or
14
+ die "server/setsockopt ($!)";
15
+ bind(SS, sockaddr_in(0, INADDR_LOOPBACK)) or
16
+ die "server/bind ($!)";
17
+ listen(SS, 2);
18
+ return(*SS);
19
+ }
20
+
21
+ sub get_port {
22
+ local *SK = shift;
23
+ (sockaddr_in(getsockname(SK)))[0];
24
+ }
25
+
26
+ sub client_sock {
27
+ my $port = shift;
28
+ local *CS;
29
+ socket(CS, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or
30
+ die "client/socket ($!)";
31
+ connect(CS, sockaddr_in($port, INADDR_LOOPBACK)) or
32
+ die "client/connect ($!)";
33
+ return(*CS);
34
+ }
35
+
36
+ sub echo_client {
37
+ my($N, $port) = @_;
38
+ local *SOCK = client_sock($port);
39
+ select(SOCK);
40
+ $| = 1;
41
+ for my $i (0..($N-1)) {
42
+ print $DATA;
43
+ my $ans = <SOCK>;
44
+ ($ans eq $DATA) or die qq{client: "$DATA" ne "$ans"};
45
+ }
46
+ close SOCK;
47
+ }
48
+
49
+ sub echo_server {
50
+ my($N) = @_;
51
+ local *SSOCK = server_sock();
52
+ my $port = get_port(*SSOCK);
53
+ my $pid = fork;
54
+ defined $pid or die "server/fork ($!)";
55
+ if ($pid) {
56
+ # parent is server
57
+ local *CSOCK;
58
+ accept(CSOCK, SSOCK) or die "server/accept ($!)";
59
+ select(CSOCK);
60
+ $| = 1;
61
+ my $n = 0;
62
+ while (<CSOCK>) {
63
+ print $_;
64
+ $n += length($_);
65
+ }
66
+ select(STDOUT);
67
+ print "server processed $n bytes\n";
68
+ } else {
69
+ # child is client
70
+ echo_client($N, $port);
71
+ }
72
+ wait();
73
+ }
74
+
75
+ sub main {
76
+ my $N = $ARGV[0] || 1;
77
+ echo_server($N);
78
+ exit(0);
79
+ }
80
+
81
+ main();