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,58 @@
1
+ #!/usr/bin/ruby
2
+ # -*- mode: ruby -*-
3
+ # $Id: objinst.ruby,v 1.1.1.1 2004-05-19 18:11:03 bfulgham Exp $
4
+ # http://www.bagley.org/~doug/shootout/
5
+ # with help from Aristarkh Zagorodnikov
6
+
7
+ class Toggle
8
+ def initialize(start_state)
9
+ @bool = start_state
10
+ end
11
+
12
+ def value
13
+ @bool
14
+ end
15
+
16
+ def activate
17
+ @bool = !@bool
18
+ self
19
+ end
20
+ end
21
+
22
+ class NthToggle < Toggle
23
+ def initialize(start_state, max_counter)
24
+ super start_state
25
+ @count_max = max_counter
26
+ @counter = 0
27
+ end
28
+
29
+ def activate
30
+ @counter += 1
31
+ if @counter >= @count_max
32
+ @bool = !@bool
33
+ @counter = 0
34
+ end
35
+ self
36
+ end
37
+ end
38
+
39
+ n = (ARGV.shift || 1).to_i
40
+
41
+ toggle = Toggle.new 1
42
+ 5.times do
43
+ puts toggle.activate.value ? 'true' : 'false'
44
+ end
45
+ n.times do
46
+ toggle = Toggle.new 1
47
+ end
48
+
49
+ puts
50
+
51
+ ntoggle = NthToggle.new 1, 3
52
+ 8.times do
53
+ puts ntoggle.activate.value ? 'true' : 'false'
54
+ end
55
+ n.times do
56
+ ntoggle = NthToggle.new 1, 3
57
+ end
58
+
@@ -0,0 +1,39 @@
1
+ # ----------------------------------------------------------------------
2
+ # The Great Computer Language Shootout
3
+ # http://shootout.alioth.debian.org/
4
+ #
5
+ # Based on D language implementation by Dave Fladebo
6
+ #
7
+ # Contributed by Anthony Borla
8
+ # ----------------------------------------------------------------------
9
+
10
+ n = (ARGV.shift || 1).to_i
11
+
12
+ alt = 1.0 ; s0 = s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = 0.0
13
+
14
+ 1.upto(n) do |d|
15
+ d = d.to_f ; d2 = d * d ; d3 = d2 * d ; ds = Math.sin(d) ; dc = Math.cos(d)
16
+
17
+ s0 += (2.0 / 3.0) ** (d - 1.0)
18
+ s1 += 1.0 / Math.sqrt(d)
19
+ s2 += 1.0 / (d * (d + 1.0))
20
+ s3 += 1.0 / (d3 * ds * ds)
21
+ s4 += 1.0 / (d3 * dc * dc)
22
+ s5 += 1.0 / d
23
+ s6 += 1.0 / d2
24
+ s7 += alt / d
25
+ s8 += alt / (2.0 * d - 1.0)
26
+
27
+ alt = -alt
28
+ end
29
+
30
+ printf("%.9f\t(2/3)^k\n", s0)
31
+ printf("%.9f\tk^-0.5\n", s1)
32
+ printf("%.9f\t1/k(k+1)\n", s2)
33
+ printf("%.9f\tFlint Hills\n", s3)
34
+ printf("%.9f\tCookson Hills\n", s4)
35
+ printf("%.9f\tHarmonic\n", s5)
36
+ printf("%.9f\tRiemann Zeta\n", s6)
37
+ printf("%.9f\tAlternating Harmonic\n", s7)
38
+ printf("%.9f\tGregory\n", s8)
39
+
@@ -0,0 +1,92 @@
1
+ # The Great Computer Language Shootout
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by Gabriele Renzi
5
+
6
+ class PiDigitSpigot
7
+
8
+ def initialize()
9
+ @z = Transformation.new 1,0,0,1
10
+ @x = Transformation.new 0,0,0,0
11
+ @inverse = Transformation.new 0,0,0,0
12
+ end
13
+
14
+ def next!
15
+ @y = @z.extract(3)
16
+ if safe? @y
17
+ @z = produce(@y)
18
+ @y
19
+ else
20
+ @z = consume @x.next!()
21
+ next!()
22
+ end
23
+ end
24
+
25
+ def safe?(digit)
26
+ digit == @z.extract(4)
27
+ end
28
+
29
+ def produce(i)
30
+ @inverse.qrst(10,-10*i,0,1).compose(@z)
31
+ end
32
+
33
+ def consume(a)
34
+ @z.compose(a)
35
+ end
36
+ end
37
+
38
+
39
+ class Transformation
40
+ attr_reader :q, :r, :s, :t
41
+ def initialize (q, r, s, t)
42
+ @q,@r,@s,@t,@k = q,r,s,t,0
43
+ end
44
+
45
+ def next!()
46
+ @q = @k = @k + 1
47
+ @r = 4 * @k + 2
48
+ @s = 0
49
+ @t = 2 * @k + 1
50
+ self
51
+ end
52
+
53
+ def extract(j)
54
+ (@q * j + @r) / (@s * j + @t)
55
+ end
56
+
57
+ def compose(a)
58
+ self.class.new( @q * a.q,
59
+ @q * a.r + r * a.t,
60
+ @s * a.q + t * a.s,
61
+ @s * a.r + t * a.t
62
+ )
63
+ end
64
+
65
+ def qrst *args
66
+ initialize *args
67
+ self
68
+ end
69
+
70
+
71
+ end
72
+
73
+
74
+ WIDTH = 10
75
+ n = Integer(ARGV[0])
76
+ j = 0
77
+
78
+ digits = PiDigitSpigot.new
79
+
80
+ while n > 0
81
+ if n >= WIDTH
82
+ WIDTH.times {print digits.next!}
83
+ j += WIDTH
84
+ else
85
+ n.times {print digits.next!}
86
+ (WIDTH-n).times {print " "}
87
+ j += n
88
+ end
89
+ puts "\t:"+j.to_s
90
+ n -= WIDTH
91
+ end
92
+
@@ -0,0 +1,109 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # Use libgmp-ruby_1.0
5
+ #
6
+ # contributed by Gabriele Renzi
7
+ # modified by Pilho Kim
8
+
9
+ require 'gmp'
10
+
11
+ class PiDigitSpigot
12
+ def initialize()
13
+ @ZERO = GMP::Z.new(0)
14
+ @ONE = GMP::Z.new(1)
15
+ @THREE = GMP::Z.new(3)
16
+ @FOUR = GMP::Z.new(4)
17
+ @TEN = GMP::Z.new(10)
18
+ @z = Transformation.new @ONE,@ZERO,@ZERO,@ONE
19
+ @x = Transformation.new @ZERO,@ZERO,@ZERO,@ZERO
20
+ @inverse = Transformation.new @ZERO,@ZERO,@ZERO,@ZERO
21
+ end
22
+
23
+ def next!
24
+ @y = @z.extract(@THREE)
25
+ if safe? @y
26
+ @z = produce(@y)
27
+ @y
28
+ else
29
+ @z = consume @x.next!()
30
+ next!()
31
+ end
32
+ end
33
+
34
+ def safe?(digit)
35
+ digit == @z.extract(@FOUR)
36
+ end
37
+
38
+ def produce(i)
39
+ @inverse.qrst(@TEN,-@TEN*i,@ZERO,@ONE).compose(@z)
40
+ end
41
+
42
+ def consume(a)
43
+ @z.compose(a)
44
+ end
45
+ end
46
+
47
+
48
+ class Transformation
49
+ attr_reader :q, :r, :s, :t
50
+ def initialize (q, r, s, t)
51
+ @ZERO = GMP::Z.new(0)
52
+ @ONE = GMP::Z.new(1)
53
+ @TWO = GMP::Z.new(2)
54
+ @FOUR = GMP::Z.new(4)
55
+ @q,@r,@s,@t,@k = q,r,s,t,@ZERO
56
+ end
57
+
58
+ def next!()
59
+ @q = @k = @k + @ONE
60
+ @r = @FOUR * @k + @TWO
61
+ @s = @ZERO
62
+ @t = @TWO * @k + @ONE
63
+ self
64
+ end
65
+
66
+ def extract(j)
67
+ (@q * j + @r).tdiv( @s * j + @t )
68
+ end
69
+
70
+ def compose(a)
71
+ self.class.new( @q * a.q,
72
+ @q * a.r + r * a.t,
73
+ @s * a.q + t * a.s,
74
+ @s * a.r + t * a.t
75
+ )
76
+ end
77
+
78
+ def qrst *args
79
+ initialize *args
80
+ self
81
+ end
82
+
83
+ end
84
+
85
+
86
+ @zero = GMP::Z.new(0)
87
+ @one = GMP::Z.new(1)
88
+ @two = GMP::Z.new(2)
89
+ @four = GMP::Z.new(4)
90
+ @ten = GMP::Z.new(10)
91
+
92
+ WIDTH = 10
93
+ n = Integer(ARGV[0] || "27")
94
+ j = 0
95
+
96
+ digits = PiDigitSpigot.new
97
+
98
+ while n > 0
99
+ if n >= WIDTH
100
+ WIDTH.times {print digits.next!}
101
+ j += WIDTH
102
+ else
103
+ n.times {print digits.next!}
104
+ (WIDTH-n).times {print " "}
105
+ j += n
106
+ end
107
+ puts "\t:"+j.to_s
108
+ n -= WIDTH
109
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby
2
+ # -*- mode: ruby -*-
3
+ # $Id: prodcons.ruby,v 1.3 2005-06-10 00:57:22 igouy-guest Exp $
4
+ # http://www.bagley.org/~doug/shootout/
5
+
6
+ require 'thread'
7
+
8
+ def main(n)
9
+ mutex = Mutex.new
10
+ access = ConditionVariable.new
11
+ count = data = consumed = produced = 0
12
+ consumer = Thread.new do
13
+ i = 0
14
+ loop do
15
+ mutex.synchronize {
16
+ while count == 0 do access.wait(mutex) end
17
+ i = data
18
+ count = 0
19
+ access.signal
20
+ }
21
+ consumed += 1
22
+ if i == n then break end
23
+ end
24
+ end
25
+ producer = Thread.new do
26
+ for i in 1 .. n do
27
+ mutex.synchronize {
28
+ while count == 1 do access.wait(mutex) end
29
+ data = i
30
+ count = 1
31
+ access.signal
32
+ }
33
+ produced += 1
34
+ end
35
+ end
36
+ producer.join
37
+ consumer.join
38
+ puts "#{produced} #{consumed}"
39
+ end
40
+
41
+ main(Integer(ARGV.shift || 1))
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/ruby
2
+ # -*- mode: ruby -*-
3
+ # $Id: random.ruby,v 1.1.1.1 2004-05-19 18:11:16 bfulgham Exp $
4
+ # http://www.bagley.org/~doug/shootout/
5
+
6
+ IM = 139968
7
+ IA = 3877
8
+ IC = 29573
9
+
10
+ $last = 42.0
11
+ def gen_random (max) (max * ($last = ($last * IA + IC) % IM)) / IM end
12
+
13
+ N = Integer(ARGV.shift || 1) - 1
14
+ N.times do
15
+ gen_random(100.0)
16
+ end
17
+ printf "%.9f\n", gen_random(100.0)
@@ -0,0 +1,53 @@
1
+ # ----------------------------------------------------------------------
2
+ # The Computer Language Shootout
3
+ # http://shootout.alioth.debian.org/
4
+ #
5
+ # Code based on / inspired by existing, relevant Shootout submissions
6
+ #
7
+ # Contributed by Anthony Borla
8
+ # Optimized by Jesse Millikan
9
+ # ----------------------------------------------------------------------
10
+
11
+ def ack(m, n)
12
+ if m == 0 then
13
+ n + 1
14
+ else if n == 0 then
15
+ ack(m - 1, 1)
16
+ else
17
+ ack(m - 1, ack(m, n - 1))
18
+ end
19
+ end
20
+ end
21
+
22
+ # ---------------------------------
23
+
24
+ def fib(n)
25
+ if n > 1 then
26
+ fib(n - 2) + fib(n - 1)
27
+ else
28
+ 1
29
+ end
30
+ end
31
+
32
+ # ---------------------------------
33
+
34
+ def tak(x, y, z)
35
+ if y < x then
36
+ tak(tak(x - 1.0, y, z), tak(y - 1.0, z, x), tak(z - 1.0, x, y))
37
+ else z
38
+ end
39
+ end
40
+
41
+ # ---------------------------------
42
+
43
+ n = (ARGV.shift || 1).to_i
44
+
45
+ printf("Ack(3,%d): %d\n", n, ack(3, n));
46
+ printf("Fib(%.1f): %.1f\n", 27.0 + n, fib(27.0 + n));
47
+
48
+ n -= 1;
49
+ printf("Tak(%d,%d,%d): %d\n", n * 3, n * 2, n, tak(n * 3, n * 2, n));
50
+
51
+ printf("Fib(3): %d\n", fib(3));
52
+ printf("Tak(3.0,2.0,1.0): %.1f\n", tak(3.0, 2.0, 1.0));
53
+
@@ -0,0 +1,32 @@
1
+ # The Computer Language Shootout
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by jose fco. gonzalez
5
+ seq = STDIN.readlines.join
6
+ ilen = seq.size
7
+
8
+ seq.gsub!(/>.*\n|\n/,"")
9
+ clen = seq.length
10
+
11
+ [
12
+ /agggtaaa|tttaccct/i,
13
+ /[cgt]gggtaaa|tttaccc[acg]/i,
14
+ /a[act]ggtaaa|tttacc[agt]t/i,
15
+ /ag[act]gtaaa|tttac[agt]ct/i,
16
+ /agg[act]taaa|ttta[agt]cct/i,
17
+ /aggg[acg]aaa|ttt[cgt]ccct/i,
18
+ /agggt[cgt]aa|tt[acg]accct/i,
19
+ /agggta[cgt]a|t[acg]taccct/i,
20
+ /agggtaa[cgt]|[acg]ttaccct/i
21
+ ].each {|f| puts "#{f.source} #{seq.scan(f).size}" }
22
+
23
+ {
24
+ 'B' => '(c|g|t)', 'D' => '(a|g|t)', 'H' => '(a|c|t)', 'K' => '(g|t)',
25
+ 'M' => '(a|c)', 'N' => '(a|c|g|t)', 'R' => '(a|g)', 'S' => '(c|t)',
26
+ 'V' => '(a|c|g)', 'W' => '(a|t)', 'Y' => '(c|t)'
27
+ }.each { |f,r| seq.gsub!(f,r) }
28
+
29
+ puts
30
+ puts ilen
31
+ puts clen
32
+ puts seq.length