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,122 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ # contributed by Daniel Nanz 2008-04-10
4
+
5
+ import sys
6
+ import thread
7
+ import time
8
+
9
+ # colors and matching
10
+ creature_colors = ['blue', 'red', 'yellow']
11
+
12
+ def complement(c1, c2):
13
+
14
+ if c1 == c2: return c1
15
+ if c1 == 'blue':
16
+ if c2 == 'red': return 'yellow'
17
+ return 'red'
18
+ if c1 == 'red':
19
+ if c2 == 'blue': return 'yellow'
20
+ return 'blue'
21
+ if c2 == 'blue': return 'red'
22
+ return 'blue'
23
+
24
+
25
+ compl_dict = dict(((c1, c2), complement(c1, c2))
26
+ for c1 in creature_colors
27
+ for c2 in creature_colors)
28
+
29
+
30
+ def check_complement(colors=creature_colors, compl=compl_dict):
31
+
32
+ for c1 in colors:
33
+ for c2 in colors:
34
+ print '%s + %s -> %s' % (c1, c2, compl[(c1, c2)])
35
+ print ''
36
+
37
+
38
+ # reporting
39
+ def spellout(n):
40
+
41
+ numbers = ['zero', 'one', 'two', 'three', 'four',
42
+ 'five', 'six', 'seven', 'eight', 'nine']
43
+ return ' ' + ' '.join(numbers[int(c)] for c in str(n))
44
+
45
+
46
+ def report(input_zoo, met, self_met):
47
+
48
+ print ' ' + ' '.join(input_zoo)
49
+ for m, sm in zip(met, self_met):
50
+ print str(m) + spellout(sm)
51
+ print spellout(sum(met)) + '\n'
52
+
53
+
54
+ # the zoo
55
+ def creature(my_id, venue, my_lock_acquire, in_lock_acquire, out_lock_release):
56
+
57
+ while True:
58
+ my_lock_acquire() # only proceed if not already at meeting place
59
+ in_lock_acquire() # only proceed when holding in_lock
60
+ venue[0] = my_id # register at meeting place
61
+ out_lock_release() # signal "registration ok"
62
+
63
+
64
+ def let_them_meet(meetings_left, input_zoo,
65
+ compl=compl_dict, allocate=thread.allocate_lock):
66
+ # prepare
67
+ c_no = len(input_zoo)
68
+ venue = [-1]
69
+ met = [0] * c_no
70
+ self_met = [0] * c_no
71
+ colors = input_zoo[:]
72
+
73
+ in_lock = allocate()
74
+ in_lock_acquire = in_lock.acquire # function aliases
75
+ in_lock_release = in_lock.release # (minor performance gain)
76
+ in_lock_acquire()
77
+ out_lock = allocate()
78
+ out_lock_release = out_lock.release
79
+ out_lock_acquire = out_lock.acquire
80
+ out_lock_acquire()
81
+ locks = [allocate() for c in input_zoo]
82
+
83
+ # let creatures wild
84
+ for ci in xrange(c_no):
85
+ args = (ci, venue, locks[ci].acquire, in_lock_acquire, out_lock_release)
86
+ new = thread.start_new_thread(creature, args)
87
+ time.sleep(0.05) # to reduce work-load imbalance
88
+
89
+ in_lock_release() # signal "meeting_place open for registration"
90
+ out_lock_acquire() # only proceed with a "registration ok" signal
91
+ id1 = venue[0]
92
+ while meetings_left > 0:
93
+ in_lock_release()
94
+ out_lock_acquire()
95
+ id2 = venue[0]
96
+ if id1 != id2:
97
+ new_color = compl[(colors[id1], colors[id2])]
98
+ colors[id1] = new_color
99
+ colors[id2] = new_color
100
+ met[id1] += 1
101
+ met[id2] += 1
102
+ else:
103
+ self_met[id1] += 1
104
+ met[id1] += 1
105
+ meetings_left -= 1
106
+ if meetings_left > 0:
107
+ locks[id1].release() # signal "you were kicked from meeting place"
108
+ id1 = id2
109
+ else:
110
+ report(input_zoo, met, self_met)
111
+
112
+
113
+ def chameneosiate(n):
114
+
115
+ check_complement()
116
+ let_them_meet(n, ['blue', 'red', 'yellow'])
117
+ let_them_meet(n, ['blue', 'red', 'yellow', 'red', 'yellow',
118
+ 'blue', 'red', 'yellow', 'red', 'blue'])
119
+ #print ''
120
+
121
+
122
+ chameneosiate(int(sys.argv[1]))
@@ -0,0 +1,176 @@
1
+ #!/usr/bin/python -OO
2
+ # The Computer Language Shootout Benchmarks
3
+ # http://shootout.alioth.debian.org/
4
+ #
5
+ # contributed by Kevin Carson
6
+ import sys
7
+
8
+
9
+ class IBottleState :
10
+ Empty = None
11
+ Full = None
12
+ Sealed = None
13
+
14
+
15
+ class BottleState(IBottleState) :
16
+ def __init__(self) :
17
+ self.Empty = BottleState.EmptyState()
18
+ self.Full = BottleState.FullState()
19
+ self.Sealed = BottleState.SealedState()
20
+
21
+ def initialState(self) :
22
+ return self.Empty
23
+
24
+ class EmptyState :
25
+ def next(self) :
26
+ return IBottleState.Full
27
+
28
+ def tag(self) :
29
+ return 1
30
+
31
+ class FullState :
32
+ def next(self) :
33
+ return IBottleState.Sealed
34
+
35
+ def tag(self) :
36
+ return 2
37
+
38
+ class SealedState :
39
+ def next(self) :
40
+ return IBottleState.Empty
41
+
42
+ def tag(self) :
43
+ return 3
44
+
45
+
46
+ class PressurizedBottleState(BottleState) :
47
+ def __init__(self, tag) :
48
+ BottleState.__init__(self)
49
+ self.UnpressurizedEmpty = UnpressurizedEmptyState()
50
+ self.UnpressurizedFull = UnpressurizedFullState()
51
+ self.PressurizedSealed = PressurizedSealedState()
52
+
53
+ def initialState(self) :
54
+ return self.UnpressurizedEmpty
55
+
56
+ class UnpressurizedEmptyState :
57
+ def next(self) :
58
+ return self.UnpressurizedFull
59
+
60
+ def tag(self) :
61
+ return 4
62
+
63
+ class UnpressurizedFullState :
64
+ def next(self) :
65
+ return self.PressurizedUnsealed
66
+
67
+ def tag(self) :
68
+ return 5
69
+
70
+ class PressurizedUnsealedState :
71
+ def next(self) :
72
+ return self.Sealed
73
+
74
+ def tag(self) :
75
+ return 6
76
+
77
+ class PressurizedSealedState :
78
+ def next(self) :
79
+ return self.UnpressurizedEmpty
80
+
81
+ def tag(self) :
82
+ return 7
83
+
84
+
85
+ class Bottle :
86
+ def __init__(self, Id) :
87
+ self.Id = Id
88
+ self.state = BottleState()
89
+ self.state = self.state.initialState()
90
+
91
+ def state(self, state) :
92
+ self.state = state
93
+
94
+ def cycle(self) :
95
+ self.fill(), self.seal(), self.empty()
96
+
97
+ def initialState(self) :
98
+ return self.initialState()
99
+
100
+ def empty(self) :
101
+ self.state.next()
102
+
103
+ def fill(self) :
104
+ self.state.next()
105
+
106
+ def seal(self) :
107
+ self.state.next()
108
+
109
+ def check(self, c) :
110
+ return self.state.tag() + self.Id + c
111
+
112
+
113
+ class PressurizedBottle(PressurizedBottleState, Bottle) :
114
+ def __init__(self, Id) :
115
+ Bottle.__init__(self, Id)
116
+
117
+ def initialState(self) :
118
+ return PressurizedBottleState.initialState()
119
+
120
+ def pressurize(self) :
121
+ self.state.next()
122
+
123
+ def cycle(self) :
124
+ self.fill(), self.pressurize(), self.seal(), self.empty()
125
+
126
+
127
+ def bottleCheck(a1, a2, a3, a4, a5, i) :
128
+ a1.cycle()
129
+ a2.cycle()
130
+ a3.cycle()
131
+ a4.cycle()
132
+ a5.cycle()
133
+
134
+ r = i % 2
135
+
136
+ return a1.check(r) + a2.check(r) + a3.check(r) + a4.check(r) + a5.check(r)
137
+
138
+
139
+ def main() :
140
+ n = int(sys.argv[1])
141
+
142
+ b1 = Bottle(1)
143
+ b2 = Bottle(2)
144
+ b3 = Bottle(3)
145
+ b4 = Bottle(4)
146
+ b5 = Bottle(5)
147
+ b6 = Bottle(6)
148
+ b7 = Bottle(7)
149
+ b8 = Bottle(8)
150
+ b9 = Bottle(9)
151
+ b0 = Bottle(0)
152
+
153
+ p1 = PressurizedBottle(1)
154
+ p2 = PressurizedBottle(2)
155
+ p3 = PressurizedBottle(3)
156
+ p4 = PressurizedBottle(4)
157
+ p5 = PressurizedBottle(5)
158
+ p6 = PressurizedBottle(6)
159
+ p7 = PressurizedBottle(7)
160
+ p8 = PressurizedBottle(8)
161
+ p9 = PressurizedBottle(9)
162
+ p0 = PressurizedBottle(0)
163
+
164
+ check = 0
165
+
166
+ for i in xrange(1, n + 1) :
167
+ check += bottleCheck(b1, b2, b3, b4, b5, i);
168
+ check += bottleCheck(b6, b7, b8, b9, b0, i);
169
+
170
+ check += bottleCheck(p1, p2, p3, p4, p5, i);
171
+ check -= bottleCheck(p6, p7, p8, p9, p0, i);
172
+
173
+ print check
174
+
175
+
176
+ main()
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/python -OO
2
+ # The Computer Language Shootout Benchmarks
3
+ # http://shootout.alioth.debian.org/
4
+ #
5
+ # contributed by Antoine Pitrou
6
+
7
+ import sys
8
+
9
+ class BottleState(object):
10
+ pass
11
+
12
+ class EmptyState(BottleState):
13
+ tag = 1
14
+
15
+ def do_next(self, target):
16
+ target.state = Full
17
+
18
+ class FullState(BottleState):
19
+ tag = 2
20
+
21
+ def do_next(self, target):
22
+ target.state = Sealed
23
+
24
+ class SealedState(BottleState):
25
+ tag = 3
26
+
27
+ def do_next(self, target):
28
+ target.state = Empty
29
+
30
+ Empty = EmptyState()
31
+ Full = FullState()
32
+ Sealed = SealedState()
33
+ BottleState.initial_state = Empty
34
+
35
+ class PressurizedBottleState(BottleState):
36
+ pass
37
+
38
+ class UnpressurizedEmptyState(PressurizedBottleState):
39
+ tag = 4
40
+
41
+ def do_next(self, target):
42
+ target.state = UnpressurizedFull
43
+
44
+ class UnpressurizedFullState(PressurizedBottleState):
45
+ tag = 5
46
+
47
+ def do_next(self, target):
48
+ target.state = PressurizedUnsealed
49
+
50
+ class PressurizedUnsealedState(PressurizedBottleState):
51
+ tag = 6
52
+
53
+ def do_next(self, target):
54
+ target.state = Sealed
55
+
56
+ class PressurizedSealedState(PressurizedBottleState):
57
+ tag = 7
58
+
59
+ def do_next(self, target):
60
+ target.state = UnpressurizedEmpty
61
+
62
+ UnpressurizedEmpty = UnpressurizedEmptyState()
63
+ UnpressurizedFull = UnpressurizedFullState()
64
+ PressurizedUnsealed = PressurizedUnsealedState()
65
+ PressurizedSealed = PressurizedSealedState()
66
+ PressurizedBottleState.initial_state = UnpressurizedEmpty
67
+
68
+
69
+ class Bottle(object):
70
+ state_type = BottleState
71
+
72
+ def __init__(self, id_):
73
+ self.id_ = id_
74
+ self.state = self.state_type.initial_state
75
+
76
+ def fill(self):
77
+ self.state.do_next(self)
78
+
79
+ def seal(self):
80
+ self.state.do_next(self)
81
+
82
+ def empty(self):
83
+ self.state.do_next(self)
84
+
85
+ def cycle(self):
86
+ self.fill()
87
+ self.seal()
88
+ self.empty()
89
+
90
+ def check(self, c):
91
+ return c + self.id_ + self.state.tag
92
+
93
+
94
+ class PressurizedBottle(Bottle):
95
+ state_type = PressurizedBottleState
96
+
97
+ def __init__(self, *args, **kargs):
98
+ Bottle.__init__(self, *args, **kargs)
99
+
100
+ def pressurize(self):
101
+ self.state.do_next(self)
102
+
103
+ def cycle(self):
104
+ self.fill()
105
+ self.pressurize()
106
+ self.seal()
107
+ self.empty()
108
+
109
+
110
+ def bottle_check(a1, a2, a3, a4, a5, i):
111
+ a1.cycle()
112
+ a2.cycle()
113
+ a3.cycle()
114
+ a4.cycle()
115
+ a5.cycle()
116
+ c = i % 2
117
+ return a1.check(c) + a2.check(c) + a3.check(c) + a4.check(c) + a5.check(c)
118
+
119
+ def main():
120
+ n = int(sys.argv[1])
121
+ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9 = [
122
+ Bottle(i) for i in range(10)]
123
+ p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 = [
124
+ PressurizedBottle(i) for i in range(10)]
125
+
126
+ check = 0
127
+ for i in xrange(1, n+1):
128
+ check += bottle_check(b1, b2, b3, b4, b5, i)
129
+ check += bottle_check(b6, b7, b8, b9, b0, i)
130
+ check += bottle_check(p1, p2, p3, p4, p5, i)
131
+ check -= bottle_check(p6, p7, p8, p9, p0, i)
132
+
133
+ print "%d" % check
134
+
135
+ main()
136
+
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/python
2
+ # $Id: echo.python,v 1.1.1.1 2004-05-19 18:09:37 bfulgham Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+ # with help from Brad Knotwell
5
+
6
+ import sys, os
7
+ from socket import *
8
+
9
+ DATA = "Hello there sailor\n"
10
+ bufferSize = len(DATA)
11
+
12
+ def server_sock():
13
+ sock = socket(AF_INET, SOCK_STREAM)
14
+ sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
15
+ sock.bind(('127.0.0.1', 0));
16
+ sock.listen(2)
17
+ return(sock)
18
+
19
+ def get_port(sock):
20
+ host, port = sock.getsockname()
21
+ return(port)
22
+
23
+ def client_sock(port):
24
+ sock = socket(AF_INET, SOCK_STREAM)
25
+ sock.connect(('127.0.0.1', port))
26
+ return(sock)
27
+
28
+ def echo_client(n, port):
29
+ sock = client_sock(port)
30
+ sender,receiver = sock.send,sock.recv
31
+ for i in range(0,n):
32
+ sender(DATA)
33
+ ans = receiver(bufferSize)
34
+ while ans[-1] != "\n":
35
+ ans += receiver(bufferSize - len(ans))
36
+ if ans <> DATA:
37
+ raise("client: \"%s\" ne \"%s\"" % (DATA, ans))
38
+ sock.close()
39
+
40
+ def echo_server(n):
41
+ ssock = server_sock()
42
+ if os.fork() > 0:
43
+ # parent is server
44
+ csock, addr = ssock.accept()
45
+ n = 0
46
+ sender,receiver = csock.send,csock.recv
47
+ while 1:
48
+ dat = receiver(bufferSize)
49
+ if not dat: break
50
+ sender(dat)
51
+ n += len(dat)
52
+ print "server processed %d bytes" % n
53
+ os.wait()
54
+ else:
55
+ # child is client
56
+ echo_client(n, get_port(ssock))
57
+
58
+ def main():
59
+ n = int(sys.argv[1])
60
+ if n < 1:
61
+ n = 1
62
+ echo_server(n)
63
+
64
+ main()