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,55 @@
1
+ # The Computer Language Shootout Benchmarks
2
+ # http://shootout.alioth.debian.org
3
+ #
4
+ # contributed by Jesse Millikan
5
+
6
+ def item_check(tree)
7
+ if tree[0] == nil
8
+ tree[1]
9
+ else
10
+ tree[1] + item_check(tree[0]) - item_check(tree[2])
11
+ end
12
+ end
13
+
14
+ def bottom_up_tree(item, depth)
15
+ if depth > 0
16
+ item_item = 2 * item
17
+ depth -= 1
18
+ [bottom_up_tree(item_item - 1, depth), item, bottom_up_tree(item_item, depth)]
19
+ else
20
+ [nil, item, nil]
21
+ end
22
+ end
23
+
24
+ max_depth = ARGV[0].to_i
25
+ min_depth = 4
26
+
27
+ max_depth = min_depth + 2 if min_depth + 2 > max_depth
28
+
29
+ stretch_depth = max_depth + 1
30
+ stretch_tree = bottom_up_tree(0, stretch_depth)
31
+
32
+ puts "stretch tree of depth #{stretch_depth}\t check: #{item_check(stretch_tree)}"
33
+ stretch_tree = nil
34
+
35
+ long_lived_tree = bottom_up_tree(0, max_depth)
36
+
37
+ min_depth.step(max_depth + 1, 2) do |depth|
38
+ iterations = 2**(max_depth - depth + min_depth)
39
+
40
+ check = 0
41
+
42
+ for i in 1..iterations
43
+ temp_tree = bottom_up_tree(i, depth)
44
+ check += item_check(temp_tree)
45
+
46
+ temp_tree = bottom_up_tree(-i, depth)
47
+ check += item_check(temp_tree)
48
+ end
49
+
50
+ puts "#{iterations * 2}\t trees of depth #{depth}\t check: #{check}"
51
+ end
52
+
53
+ puts "long lived tree of depth #{max_depth}\t check: #{item_check(long_lived_tree)}"
54
+
55
+
@@ -0,0 +1,71 @@
1
+ #########################################
2
+ # The Computer Language Shootout #
3
+ # http://shootout.alioth.debian.org/ #
4
+ # #
5
+ # Contributed by Jesse Millikan #
6
+ # Based on version by Gordon Innes #
7
+ #########################################
8
+
9
+ require 'thread'
10
+
11
+ creature_meetings = Queue.new
12
+ meeting_point = Mutex.new
13
+ wait_signal = ConditionVariable.new
14
+ meetings_left = ARGV[0].to_i
15
+ waiting_colour, incoming_colour = nil, nil
16
+
17
+ # Each chameneo is represented here by a thread
18
+ # and its colour variable, rather than explicitly
19
+ # by an object
20
+ #
21
+ # This is all packed into one place for speed and
22
+ # clarity (It's clear to *me* :)
23
+ [:blue, :red, :yellow, :blue].each { |colour|
24
+ Thread.new {
25
+ met = 0
26
+ while true
27
+ # The form meeting_point.synchronize { } is slow
28
+ meeting_point.lock
29
+
30
+ if meetings_left <= 0
31
+ meeting_point.unlock
32
+ # colour = :faded
33
+ break
34
+ end
35
+
36
+ # Both threads emerge with variable other_colour set
37
+ if waiting_colour
38
+ other_colour = waiting_colour
39
+ incoming_colour = colour
40
+ wait_signal.signal
41
+ meetings_left-=1
42
+ waiting_colour = nil
43
+ else
44
+ waiting_colour = colour
45
+ wait_signal.wait(meeting_point)
46
+ other_colour = incoming_colour
47
+ end
48
+ meeting_point.unlock
49
+
50
+ met += 1
51
+
52
+ # Take the complement colour
53
+ colour =
54
+ case other_colour
55
+ when :blue
56
+ colour == :red ? :yellow : :red
57
+ when :red
58
+ colour == :blue ? :yellow : :blue
59
+ when :yellow
60
+ colour == :blue ? :red : :blue
61
+ end
62
+ end
63
+
64
+ # Leave the total on the queue for the main thread
65
+ creature_meetings.push(met)
66
+ }
67
+ }
68
+
69
+ total = 0
70
+ 4.times { total += creature_meetings.pop }
71
+ puts total
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # The Great Computer Language Shootout
4
+ # http://shootout.alioth.debian.org
5
+ #
6
+ # contributed by Jesse Millikan
7
+
8
+ class BottleState
9
+ attr_reader :tag
10
+ private_class_method :new
11
+
12
+ def initialize(tag)
13
+ @tag = tag
14
+ end
15
+
16
+ def BottleState.initial; @@empty; end
17
+
18
+ def BottleState.pressurized_initial; @@unpressurized_empty; end
19
+
20
+ # Thanks to dbrock on #ruby-lang on freenode for some tips on this.
21
+
22
+ @@empty = new(1)
23
+
24
+ def @@empty.next(bottle); bottle.state = @@full; end
25
+
26
+ @@full = new(2)
27
+
28
+ def @@full.next(bottle); bottle.state = @@sealed; end
29
+
30
+ @@sealed = new(3)
31
+
32
+ def @@sealed.next(bottle); bottle.state = @@empty; end
33
+
34
+ @@unpressurized_empty = new(4)
35
+
36
+ def @@unpressurized_empty.next(bottle); bottle.state = @@unpressurized_full; end
37
+
38
+ @@unpressurized_full = new(5)
39
+
40
+ def @@unpressurized_full.next(bottle); bottle.state = @@pressurized_unsealed; end
41
+
42
+ @@pressurized_unsealed = new(6)
43
+
44
+ def @@pressurized_unsealed.next(bottle); bottle.state = @@pressurized_sealed; end
45
+
46
+ @@pressurized_sealed = new(7)
47
+
48
+ def @@pressurized_sealed.next(bottle); bottle.state = @@unpressurized_empty; end
49
+ end
50
+
51
+ #Someone with judgement on style could pare this down a bit.
52
+ class Bottle
53
+ attr_writer :state
54
+
55
+ def initialize(id)
56
+ @id = id
57
+ @state = initial
58
+ end
59
+
60
+ def initial; BottleState.initial; end
61
+
62
+ def cycle; fill; seal; empty; end
63
+
64
+ def next; @state.next(self); end
65
+
66
+ alias_method :empty, :next
67
+ alias_method :fill, :next
68
+ alias_method :seal, :next
69
+
70
+ def check(c); @state.tag + @id + c; end
71
+ end
72
+
73
+ class PressurizedBottle < Bottle
74
+ def initial; BottleState.pressurized_initial; end
75
+
76
+ alias_method :pressurize, :next
77
+
78
+ def cycle; fill; pressurize; seal; empty; end
79
+ end
80
+
81
+ def bottle_check(a1, a2, a3, a4, a5, i)
82
+ a1.cycle; a2.cycle; a3.cycle; a4.cycle; a5.cycle
83
+
84
+ c = i % 2
85
+
86
+ a1.check(c) + a2.check(c) + a3.check(c) + a4.check(c) + a5.check(c)
87
+ end
88
+
89
+ n = 0
90
+ n = ARGV[0].to_i unless ARGV.empty?
91
+
92
+ b1 = Bottle.new(1); b2 = Bottle.new(2)
93
+ b3 = Bottle.new(3); b4 = Bottle.new(4)
94
+ b5 = Bottle.new(5); b6 = Bottle.new(6)
95
+ b7 = Bottle.new(7); b8 = Bottle.new(8)
96
+ b9 = Bottle.new(9); b0 = Bottle.new(0)
97
+
98
+ p1 = PressurizedBottle.new(1); p2 = PressurizedBottle.new(2)
99
+ p3 = PressurizedBottle.new(3); p4 = PressurizedBottle.new(4)
100
+ p5 = PressurizedBottle.new(5); p6 = PressurizedBottle.new(6)
101
+ p7 = PressurizedBottle.new(7); p8 = PressurizedBottle.new(8)
102
+ p9 = PressurizedBottle.new(9); p0 = PressurizedBottle.new(0)
103
+
104
+ check = 0
105
+
106
+ for i in 1..n
107
+ check += bottle_check(b1, b2, b3, b4, b5, i)
108
+ check += bottle_check(b6, b7, b8, b9, b0, i)
109
+
110
+ check += bottle_check(p1, p2, p3, p4, p5, i)
111
+ check -= bottle_check(p6, p7, p8, p9, p0, i)
112
+ end
113
+
114
+ puts "#{check}"
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby
2
+ # -*- mode: ruby -*-
3
+ # $Id: echo.ruby,v 1.1.1.1 2004-05-19 18:09:37 bfulgham Exp $
4
+ # http://www.bagley.org/~doug/shootout/
5
+
6
+ require "socket"
7
+
8
+ DATA = "Hello there sailor\n"
9
+
10
+ def echo_client(n, port)
11
+ sock = TCPsocket.open('127.0.0.1', port)
12
+ n.times do
13
+ sock.write(DATA)
14
+ ans = sock.readline
15
+ if ans != DATA then
16
+ raise sprintf("client: \"%s\" \"%s\"", DATA, ans)
17
+ end
18
+ end
19
+ sock.close
20
+ end
21
+
22
+
23
+ def echo_server(n)
24
+ ssock = TCPserver.open('127.0.0.1', 0)
25
+ port = ssock.addr[1]
26
+ if pid = fork then
27
+ # parent is server
28
+ csock = ssock.accept
29
+ n = 0
30
+ while str = csock.gets
31
+ n += csock.write(str)
32
+ end
33
+ Process.wait
34
+ printf "server processed %d bytes\n", n
35
+ else
36
+ # child is client
37
+ echo_client(n, port)
38
+ end
39
+ end
40
+
41
+ echo_server(Integer(ARGV.shift || 1))
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/ruby
2
+ # -*- mode: ruby -*-
3
+ # $Id: except.ruby,v 1.1.1.1 2004-05-19 18:09:43 bfulgham Exp $
4
+ # http://www.bagley.org/~doug/shootout/
5
+
6
+ $HI = 0
7
+ $LO = 0
8
+ NUM = Integer(ARGV[0] || 1)
9
+
10
+
11
+ class Lo_Exception < Exception
12
+ def initialize(num)
13
+ @value = num
14
+ return self
15
+ end
16
+ end
17
+
18
+ class Hi_Exception < Exception
19
+ def initialize(num)
20
+ @value = num
21
+ return self
22
+ end
23
+ end
24
+
25
+ def some_function(num)
26
+ begin
27
+ hi_function(num)
28
+ rescue
29
+ print "We shouldn't get here, exception is: #{$!.type}\n"
30
+ end
31
+ end
32
+
33
+ def hi_function(num)
34
+ begin
35
+ lo_function(num)
36
+ rescue Hi_Exception
37
+ $HI = $HI + 1
38
+ end
39
+ end
40
+
41
+ def lo_function(num)
42
+ begin
43
+ blowup(num)
44
+ rescue Lo_Exception
45
+ $LO = $LO + 1
46
+ end
47
+ end
48
+
49
+ def blowup(num)
50
+ if num % 2 == 0
51
+ raise Lo_Exception.new(num)
52
+ else
53
+ raise Hi_Exception.new(num)
54
+ end
55
+ end
56
+
57
+
58
+ for iter in 1 .. NUM
59
+ some_function(iter)
60
+ end
61
+ print "Exceptions: HI=", $HI, " / LO=", $LO, "\n"
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/ruby
2
+ # -*- mode: ruby -*-
3
+ # $Id: except.ruby-2.ruby,v 1.1 2004-11-10 06:26:50 bfulgham Exp $
4
+ # http://shootout.alioth.debian.org/
5
+
6
+ $HI = 0
7
+ $LO = 0
8
+ NUM = Integer(ARGV[0] || 1)
9
+
10
+
11
+ class Lo_Exception < Exception
12
+ def initialize(num)
13
+ @value = num
14
+ return self
15
+ end
16
+ end
17
+
18
+ class Hi_Exception < Exception
19
+ def initialize(num)
20
+ @value = num
21
+ return self
22
+ end
23
+ end
24
+
25
+ def some_function(num)
26
+ begin
27
+ hi_function(num)
28
+ rescue
29
+ print "We shouldn't get here, exception is: #{$!.type}\n"
30
+ end
31
+ end
32
+
33
+ def hi_function(num)
34
+ begin
35
+ lo_function(num)
36
+ rescue Hi_Exception
37
+ $HI = $HI + 1
38
+ end
39
+ end
40
+
41
+ def lo_function(num)
42
+ begin
43
+ blowup(num)
44
+ rescue Lo_Exception
45
+ $LO = $LO + 1
46
+ end
47
+ end
48
+
49
+ def blowup(num)
50
+ if num & 2 == 0
51
+ raise Lo_Exception.new(num)
52
+ else
53
+ raise Hi_Exception.new(num)
54
+ end
55
+ end
56
+
57
+
58
+ for iter in 1 .. NUM
59
+ some_function(iter)
60
+ end
61
+ print "Exceptions: HI=", $HI, " / LO=", $LO, "\n"
@@ -0,0 +1,42 @@
1
+ # The Computer Language Shootout
2
+ # http://shootout.alioth.debian.org/
3
+ # Contributed by Sokolov Yura
4
+ # Modified by Ryan Williams
5
+
6
+ def fannkuch(n)
7
+ maxFlips, m, r, check = 0, n-1, n, 0
8
+ count = (1..n).to_a
9
+ perm = (1..n).to_a
10
+
11
+ while true
12
+ if check < 30
13
+ puts "#{perm}"
14
+ check += 1
15
+ end
16
+
17
+ while r != 1:
18
+ count[r-1] = r
19
+ r -= 1
20
+ end
21
+
22
+ if perm[0] != 1 and perm[m] != n
23
+ perml = perm.clone #.dup
24
+ flips = 0
25
+ while (k = perml.first ) != 1
26
+ perml = perml.slice!(0, k).reverse + perml
27
+ flips += 1
28
+ end
29
+ maxFlips = flips if flips > maxFlips
30
+ end
31
+ while true
32
+ if r==n : return maxFlips end
33
+ perm.insert r,perm.shift
34
+ break if (count[r] -= 1) > 0
35
+ r += 1
36
+ end
37
+ end
38
+ end
39
+
40
+ N = (ARGV[0] || 1).to_i
41
+ puts "Pfannkuchen(#{N}) = #{fannkuch(N)}"
42
+