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,62 @@
1
+ #!/usr/bin/python
2
+ # http://www.bagley.org/~doug/shootout/
3
+
4
+ import sys
5
+
6
+ HI = 0
7
+ LO = 0
8
+
9
+
10
+ class Hi_exception:
11
+ def __init__(self, value):
12
+ self.value = value
13
+ def __str__(self):
14
+ return `self.value`
15
+
16
+
17
+ class Lo_exception:
18
+ def __init__(self, value):
19
+ self.value = value
20
+ def __str__(self):
21
+ return `self.value`
22
+
23
+
24
+ def some_function(num):
25
+ try:
26
+ hi_function(num)
27
+ except:
28
+ raise "We shouldn't get here (%s)" % sys.exc_info()[0]
29
+
30
+
31
+ def hi_function(num):
32
+ global HI
33
+ try:
34
+ lo_function(num)
35
+ except Hi_exception, ex:
36
+ HI += 1
37
+ #print 'Hi_exception occurred, value:', ex.value
38
+
39
+
40
+ def lo_function(num):
41
+ global LO
42
+ try:
43
+ blowup(num)
44
+ except Lo_exception, ex:
45
+ LO += 1
46
+ #print 'Lo_exception occurred, value:', ex.value
47
+
48
+
49
+ def blowup(num):
50
+ raise (((num & 1) and Lo_exception) or Hi_exception)(num)
51
+
52
+ def main():
53
+ global LO, HI
54
+ NUM = int(sys.argv[1])
55
+ if NUM < 1:
56
+ NUM = 1
57
+ for i in xrange(NUM-1,-1,-1):
58
+ some_function(i)
59
+ print "Exceptions: HI=%d / LO=%d" % (HI, LO)
60
+
61
+
62
+ main()
@@ -0,0 +1,50 @@
1
+ # The Computer Language Shootout
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # Contributed by Sokolov Yura
5
+
6
+ from sys import argv
7
+ def fannkuch(n):
8
+ count = range(1,n+1)
9
+ maxFlipsCount, m, r, check = 0, n-1, n, 0
10
+
11
+ perm1 = range(n)
12
+ perm = range(n)
13
+ perm1_ins = perm1.insert
14
+ perm1_pop = perm1.pop
15
+ while True:
16
+ if check < 30:
17
+ print "".join(`i+1` for i in perm1)
18
+ check += 1;
19
+
20
+ while r != 1:
21
+ count[r-1] = r
22
+ r -= 1
23
+
24
+ if perm1[0] != 0 and perm1[m] != m:
25
+ perm[:]=perm1
26
+ flipsCount = 0
27
+ k = perm[0]
28
+ while k:
29
+ perm[:k+1] = perm[k::-1]
30
+ flipsCount += 1
31
+ k = perm[0]
32
+
33
+ if flipsCount > maxFlipsCount:
34
+ maxFlipsCount = flipsCount
35
+ maxPerm = list(perm1)
36
+
37
+ while True:
38
+ if r == n: return maxFlipsCount
39
+ perm1_ins(r,perm1_pop(0))
40
+ count[r] -= 1
41
+ if count[r] > 0: break
42
+ r += 1
43
+
44
+ def main():
45
+ n = int(argv and argv[1] or 1)
46
+ print "Pfannkuchen(%d) = %d\n"%(n,fannkuch(n)),
47
+
48
+ if __name__=="__main__":
49
+ main()
50
+
@@ -0,0 +1,54 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by Sokolov Yura
5
+ # modified by Tupteq
6
+
7
+ def fannkuch(n):
8
+ count = range(1, n+1)
9
+ max_flips = 0
10
+ m = n-1
11
+ r = n
12
+ check = 0
13
+ perm1 = range(n)
14
+ perm = range(n)
15
+ perm1_ins = perm1.insert
16
+ perm1_pop = perm1.pop
17
+
18
+ while 1:
19
+ if check < 30:
20
+ print "".join(str(i+1) for i in perm1)
21
+ check += 1
22
+
23
+ while r != 1:
24
+ count[r-1] = r
25
+ r -= 1
26
+
27
+ if perm1[0] != 0 and perm1[m] != m:
28
+ perm = perm1[:]
29
+ flips_count = 0
30
+ k = perm[0]
31
+ while k:
32
+ perm[:k+1] = perm[k::-1]
33
+ flips_count += 1
34
+ k = perm[0]
35
+
36
+ if flips_count > max_flips:
37
+ max_flips = flips_count
38
+
39
+ while r != n:
40
+ perm1_ins(r, perm1_pop(0))
41
+ count[r] -= 1
42
+ if count[r] > 0:
43
+ break
44
+ r += 1
45
+ else:
46
+ return max_flips
47
+
48
+ def main():
49
+ from sys import argv
50
+ n = int(argv and argv[1] or 1)
51
+ print "Pfannkuchen(%d) = %d\n" % (n, fannkuch(n)),
52
+
53
+ if __name__=="__main__":
54
+ main()
@@ -0,0 +1,79 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # modified by Ian Osgood
5
+ # modified again by Heinrich Acker
6
+
7
+ import sys, bisect
8
+
9
+ alu = (
10
+ 'GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG'
11
+ 'GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA'
12
+ 'CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT'
13
+ 'ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA'
14
+ 'GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG'
15
+ 'AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC'
16
+ 'AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA')
17
+
18
+ iub = zip('acgtBDHKMNRSVWY', [0.27, 0.12, 0.12, 0.27] + [0.02]*11)
19
+
20
+ homosapiens = [
21
+ ('a', 0.3029549426680),
22
+ ('c', 0.1979883004921),
23
+ ('g', 0.1975473066391),
24
+ ('t', 0.3015094502008),
25
+ ]
26
+
27
+
28
+ def genRandom(lim, ia = 3877, ic = 29573, im = 139968):
29
+ seed = 42
30
+ imf = float(im)
31
+ while 1:
32
+ seed = (seed * ia + ic) % im
33
+ yield lim * seed / imf
34
+
35
+ Random = genRandom(1.)
36
+
37
+ def makeCumulative(table):
38
+ P = []
39
+ C = []
40
+ prob = 0.
41
+ for char, p in table:
42
+ prob += p
43
+ P += [prob]
44
+ C += [char]
45
+ return (P, C)
46
+
47
+ def repeatFasta(src, n):
48
+ width = 60
49
+ r = len(src)
50
+ s = src + src + src[:n % r]
51
+ for j in xrange(n // width):
52
+ i = j*width % r
53
+ print s[i:i+width]
54
+ if n % width:
55
+ print s[-(n % width):]
56
+
57
+ def randomFasta(table, n):
58
+ width = 60
59
+ r = xrange(width)
60
+ gR = Random.next
61
+ bb = bisect.bisect
62
+ jn = ''.join
63
+ probs, chars = makeCumulative(table)
64
+ for j in xrange(n // width):
65
+ print jn([chars[bb(probs, gR())] for i in r])
66
+ if n % width:
67
+ print jn([chars[bb(probs, gR())] for i in xrange(n % width)])
68
+
69
+
70
+ n = int(sys.argv[1])
71
+
72
+ print '>ONE Homo sapiens alu'
73
+ repeatFasta(alu, n*2)
74
+
75
+ print '>TWO IUB ambiguity codes'
76
+ randomFasta(iub, n*3)
77
+
78
+ print '>THREE Homo sapiens frequency'
79
+ randomFasta(homosapiens, n*5)
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/python
2
+ # $Id: fibo.python,v 1.3 2005-04-25 19:01:38 igouy-guest Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+
5
+ import sys
6
+
7
+ def fib(n):
8
+ if (n < 2):
9
+ return(1)
10
+ return( fib(n-2) + fib(n-1) )
11
+
12
+ def main():
13
+ N = int(sys.argv[1])
14
+ #sys.setrecursionlimit(3000)
15
+ print fib(N)
16
+
17
+ main()
File without changes
File without changes
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/python
2
+ # The Great Computer Language Shootout
3
+ # http://shootout.alioth.debian.org/
4
+ #
5
+ # contributed by Jacob Lee et al.
6
+
7
+ import sys
8
+
9
+ print "%.9f" % sum(1.0/i for i in xrange(1, 1+int(sys.argv[1])))
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/python
2
+ # $Id: hash.python,v 1.1.1.1 2004-05-19 18:09:55 bfulgham Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+ # with help from from Gustavo Niemeyer
5
+
6
+ import sys
7
+ #sys.setcheckinterval(10000)
8
+
9
+ def main():
10
+ n = int(sys.argv[1])
11
+ X = {}
12
+ myhex = hex
13
+ for i in xrange(1,n+1):
14
+ X[myhex(i)[2:]] = i
15
+ c = 0
16
+ has_key = X.has_key
17
+ for i in xrange(n, 0, -1):
18
+ c += has_key(`i`)
19
+ print c
20
+
21
+ main()
File without changes
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/python
2
+ # $Id: hash2.python,v 1.2 2004-11-30 07:10:03 bfulgham Exp $
3
+ # http://shootout.alioth.debian.org
4
+ # Contributed by Antoine Pitrou, based on code by Mark Baker
5
+ #
6
+ # 1. Put critical code in a function -- otherwise the local variable
7
+ # optimizations by the interpreter don't work.
8
+ # 2. Iterator versions of common functions are often a bit faster than
9
+ # other methods (e.g., iterkeys() instead of keys() ).
10
+
11
+ import sys
12
+
13
+ def main():
14
+ n = int(sys.argv[1])
15
+ hash1 = {}
16
+ for i in xrange(10000):
17
+ hash1['foo_' + `i`] = i
18
+
19
+ hash2 = {}
20
+ for i in xrange(n):
21
+ for k in hash1.iterkeys():
22
+ try:
23
+ hash2[k] += hash1[k]
24
+ except KeyError:
25
+ hash2[k] = hash1[k]
26
+
27
+ print hash1['foo_1'], hash1['foo_9999'], hash2['foo_1'], hash2['foo_9999']
28
+
29
+
30
+ main()
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/python -O
2
+ # $Id: heapsort.python-3.python,v 1.1 2005-03-27 19:43:21 igouy-guest Exp $
3
+ #
4
+ # The Great Computer Language Shootout
5
+ # http://shootout.alioth.debian.org/
6
+ #
7
+ # Updated by Valentino Volonghi for Python 2.4
8
+ # Reworked by Kevin Carson to produce correct results and same intent
9
+
10
+ import sys
11
+
12
+ IM = 139968
13
+ IA = 3877
14
+ IC = 29573
15
+
16
+ LAST = 42
17
+ def gen_random(max) :
18
+ global LAST
19
+ LAST = (LAST * IA + IC) % IM
20
+ return( (max * LAST) / IM )
21
+
22
+ def heapsort(n, ra) :
23
+ ir = n
24
+ l = (n >> 1) + 1
25
+
26
+ while True :
27
+ if l > 1 :
28
+ l -= 1
29
+ rra = ra[l]
30
+ else :
31
+ rra = ra[ir]
32
+ ra[ir] = ra[1]
33
+ ir -= 1
34
+ if ir == 1 :
35
+ ra[1] = rra
36
+ return
37
+
38
+ i = l
39
+ j = l << 1
40
+ while j <= ir :
41
+ if (j < ir) and (ra[j] < ra[j + 1]) :
42
+ j += 1
43
+
44
+ if rra < ra[j] :
45
+ ra[i] = ra[j]
46
+ i = j
47
+ j += j
48
+ else :
49
+ j = ir + 1;
50
+ ra[i] = rra;
51
+
52
+ def main() :
53
+ if len(sys.argv) == 2 :
54
+ N = int(sys.argv[1])
55
+ else :
56
+ N = 1
57
+
58
+ ary = [None]*(N + 1)
59
+ for i in xrange(1, N + 1) :
60
+ ary[i] = gen_random(1.0)
61
+
62
+ heapsort(N, ary)
63
+
64
+ print "%.10f" % ary[N]
65
+
66
+ main()
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/python
2
+ # $Id: hello.python,v 1.1.1.1 2004-05-19 18:10:16 bfulgham Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+
5
+ print "hello world"
@@ -0,0 +1,231 @@
1
+ #!/usr/bin/env python
2
+ #
3
+ # The Great Computer Language Shootout
4
+ # http://shootout.alioth.debian.org/
5
+ #
6
+ # Contributed by Sebastien Loisel
7
+ #
8
+ # OVERVIEW: In this test, we solve an ordinary differential equation
9
+ # u'=f(t,u)
10
+ # using the Trapezoid numerical method, which can be written as
11
+ # (u[k+1]-u[k])=(f(t[k],u[k])+f(t[k]+dt,u[k+1]))*dt/2,
12
+ # where t[k], u[k], dt and the function f are known and u[k+1] is the
13
+ # unknown.
14
+ #
15
+ # Since u[k+1] appears on both sides of the equation, we use an iterative
16
+ # solver called the newton iteration to compute u[k+1]. The newton iteration
17
+ # computes the solution to
18
+ # h(x)=0
19
+ # where h is a known function and x is the unknown 0 of h, using the method
20
+ # x[k+1]=x[k]-f(x[k])/f'(x[k]).
21
+ # Here, f' denotes the derivative of f.
22
+ #
23
+ # To compute f' from the definition of f alone, we use a technique called
24
+ # automatic differentiation. This works by replacing all floating point
25
+ # variables by a special type we call ad (for automatic differentiation.)
26
+ # If the python program for f is called with parameter x of type ad,
27
+ # it will do the same work as if it were called with the equivalent parameter
28
+ # of type floating point, but will also return f'. That's why it's called
29
+ # "automatic."
30
+ #
31
+ # To shake things up, we also have another type, fl (for "float") which
32
+ # works exactly like a double precision floating point, but with much
33
+ # less precision.
34
+ #
35
+ # Summary of classes:
36
+ #
37
+ # ad -- automatic differentiation type
38
+ # fl -- low precision floating point type
39
+ # mycomplex -- complex numbers whose real and imaginary parts can be fl
40
+ # trapezoid_method_rooter -- implements the function that the trapezoid method
41
+ # must solve
42
+
43
+ import sys
44
+ from math import log,exp,floor,fabs
45
+
46
+ def sqr(x):
47
+ """sqr(x): a helper function that computes the square of any "number" x."""
48
+ return x*x
49
+
50
+ def pwr(x,k):
51
+ """pwr(x,k): a helper function that computes the kth power of any
52
+ "number" x."""
53
+ if k<=0:
54
+ return 1
55
+ elif (k&1):
56
+ return x*pwr(x,k-1)
57
+ return sqr(pwr(x,k/2))
58
+
59
+ def pr(x):
60
+ """Print a value depending on its type."""
61
+ if isinstance(x,float):
62
+ return "%.12e"%x
63
+ elif isinstance(x,complex):
64
+ return "%.12e %.12e"%(x.real,x.imag)
65
+ else:
66
+ return x.pr()
67
+
68
+ class fl:
69
+ """A low-precision floating point class."""
70
+ def pr(x):
71
+ return "%.2e"%x.a
72
+ def __init__(x,a=0):
73
+ global count
74
+ if a==0:
75
+ x.a=0.0
76
+ else:
77
+ k=int(log(fabs(a)))
78
+ x.a=floor(a*exp(-k+6)+0.5)*exp(k-6)
79
+ def __add__(x,y):
80
+ return fl(x.a+y.a)
81
+ def __radd__(y,x):
82
+ return x+y
83
+ def __sub__(x,y):
84
+ return fl(x.a-y.a)
85
+ def __mul__(x,y):
86
+ return fl(x.a*y.a)
87
+ def __rmul__(y,x):
88
+ return x*y
89
+ def __div__(x,y):
90
+ return fl(x.a/y.a)
91
+ def __coerce__(x,y):
92
+ if isinstance(y,fl):
93
+ return (x,y)
94
+ return (x,fl(y))
95
+
96
+ class mycomplex:
97
+ """A complex type so that the type of the real or imaginary part can be
98
+ any kind of number."""
99
+ def __init__(x,a=0,b=0):
100
+ x.real,x.imag=a,b
101
+ def __add__(a,b):
102
+ return mycomplex(a.real+b.real,a.imag+b.imag)
103
+ def __radd__(b,a):
104
+ return a+b
105
+ def __sub__(a,b):
106
+ return mycomplex(a.real-b.real,a.imag-b.imag)
107
+ def __mul__(a,b):
108
+ return mycomplex(a.real*b.real-a.imag*b.imag,
109
+ a.real*b.imag+a.imag*b.real)
110
+ def __rmul__(b,a):
111
+ return a*b
112
+ def __div__(a,b):
113
+ mag=b.real*b.real+b.imag*b.imag
114
+ return mycomplex((a.real*b.real+a.imag*b.imag)/mag,
115
+ (a.imag*b.real-a.real*b.imag)/mag)
116
+ def __coerce__(a,b):
117
+ if isinstance(b,mycomplex):
118
+ return (a,b)
119
+ return (a,mycomplex(b))
120
+ def pr(a):
121
+ return pr(a.real)+' '+pr(a.imag)
122
+
123
+ def one(x):
124
+ if isinstance(x,float):
125
+ return 1.0
126
+ if isinstance(x,complex):
127
+ return 1.0+0.0j
128
+ if isinstance(x,fl):
129
+ return fl(1.0)
130
+ if isinstance(x,mycomplex):
131
+ return mycomplex(one(x.real),0.0)
132
+
133
+ class ad:
134
+ """Automatic differentiation type. An ad has two attributes, x and dx."""
135
+ def __init__(self,x=0,dx=0):
136
+ self.x,self.dx=x,dx
137
+ def __add__(a,b):
138
+ """ad's add like vectors."""
139
+ return ad(a.x+b.x,a.dx+b.dx)
140
+ def __sub__(a,b):
141
+ """ad's subtract like vectors."""
142
+ return ad(a.x-b.x,a.dx-b.dx)
143
+ def __mul__(a,b):
144
+ """The product of ad's is given by the "product rule" of differentation:
145
+ (x,dx)*(y,dy)=(xy,xdy+ydx)."""
146
+ return ad(a.x*b.x,a.dx*b.x+a.x*b.dx)
147
+ def __div__(a,b):
148
+ """The quotient rule of differentiation gives
149
+ (x,dx)/(y,dy)=(x/y,(ydx-xdy)/(y*y))."""
150
+ return ad(a.x/b.x,(a.dx*b.x-a.x*b.dx)/(b.x*b.x))
151
+ def __coerce__(self,other):
152
+ if isinstance(other,ad):
153
+ return (self,other)
154
+ return (self,ad(other))
155
+ def pr(a):
156
+ return pr(a.x)+' '+pr(a.dx)
157
+
158
+ def rat(x):
159
+ """This is just a quotient of two polynomials p/q, with degree p=11 and
160
+ degree q=7."""
161
+ return (x*2+pwr(x,2)*3+pwr(x,6)*7+pwr(x,11)*5+1)/(x*5-pwr(x,3)*6-pwr(x,7)*3+2)
162
+
163
+ def newton(x0,n,g):
164
+ """The newton iteration computes the zero of g starting with initial guess
165
+ x0. This implementation iterates n times and then returns the answer."""
166
+ for i in range(n):
167
+ val=g(ad(x0,one(x0)))
168
+ x0=x0-val.x/val.dx
169
+ return x0
170
+
171
+ def mysqrt(x):
172
+ """This isn't actually a square root. However, newton(1,10,mysqrt) should
173
+ return the square root of 2 (1.4142...)."""
174
+ return sqr(x)-ad(2)
175
+
176
+ class trapezoid_method_rooter:
177
+ """The trapezoid method (see below) works by computing the solution of some
178
+ problem of the form h(x)=0. This class implements the function h needed
179
+ in the trapezoid method."""
180
+ def __init__(self,g,y0,t0,t1):
181
+ self.g,self.y0,self.t0,self.t1=g,y0,t0,t1
182
+ self.g0=g(t0,y0)
183
+ def __call__(self,y1):
184
+ """The function is (g(t1,y1)-g(t0,y0))*(t1-t0)/2+y0-y1. The parameters
185
+ t0,y0,t1,g are set at construction time, so the only parameter left is
186
+ y1."""
187
+ # raz=(self.g(ad(self.t1),y1))
188
+ ret=(self.g(ad(self.t1),y1)+self.g0)*((self.t1-self.t0)/2)+ad(self.y0)-y1
189
+ # print "t0",pr(self.t0),"t1",pr(self.t1),"y0",pr(self.y0),"g0",pr(self.g0),"y1",pr(y1),"ret",pr(ret),"raz",pr(raz)
190
+ return ret
191
+
192
+ def trapezoid_method(t0,dt,y0,g,numsteps):
193
+ """This function will approximate the solution of y'=g(t,y) at time
194
+ t0+numsteps*dt with initial value y(t0)=y0 using the trapezoid method
195
+ of numerical integration."""
196
+ for i in range(numsteps):
197
+ foo=trapezoid_method_rooter(g,y0,t0,t0+dt)
198
+ y0=newton(y0,10,foo)
199
+ t0=t0+dt
200
+ return y0
201
+
202
+ def sqrintegrand(t,y):
203
+ """This is a version of sqr which has the correct signature so that it can
204
+ be passed to trapezoid_method. The first parameter, t, is ignored.
205
+ The second parameter, y, is passed on to sqr."""
206
+ return sqr(y)
207
+ def ratintegrand(t,y):
208
+ """This is a version of the rational function rat above that can be passed
209
+ to trapezoid_method. In this instance, we do use the t parameter."""
210
+ return rat(y)-t
211
+
212
+ def integrate_functions(t0,x0,dt,n):
213
+ """Integrate sqrintegrand and ratintegrand with given initial value.
214
+ Depending on the type of initial value, this will result in float, complex,
215
+ iv or complex iv integration."""
216
+ print ('i1 '+pr(trapezoid_method(t0,dt,x0,sqrintegrand,n)))
217
+ print ('i2 '+pr(trapezoid_method(t0,dt,x0,ratintegrand,n)))
218
+
219
+ try:
220
+ N = int(sys.argv[1])
221
+ except:
222
+ N = 50
223
+ print ('rational_taylor_series: '+pr(rat(ad(0.25,1))))
224
+ print ('newton-sqrt_2: '+pr(newton(1.0,10,mysqrt)))
225
+ x=newton(-1.0,6,rat)
226
+ print ('newton-rat: '+pr(x))
227
+ integrate_functions(1.0,0.02,1.0/(4*N),4*N)
228
+ integrate_functions(fl(1.0),fl(0.02),fl(1.0)/fl(float(N)),N)
229
+ integrate_functions(1.0+0.0j,0.02+0.02j,1.0/N,N)
230
+ integrate_functions(mycomplex(fl(1.0),fl(0.0)),mycomplex(fl(0.02),fl(0.02)),mycomplex(fl(1.0))/mycomplex(fl(float(N))),N)
231
+