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
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # submitted by Ian Osgood
5
+ # modified by Sokolov Yura
6
+ # modified by bearophile
7
+
8
+ from sys import stdin
9
+
10
+ def gen_freq(seq, frame, frequences):
11
+ ns = len(seq) + 1 - frame
12
+ frequences.clear()
13
+ for ii in xrange(ns):
14
+ nucleo = seq[ii:ii + frame]
15
+ if nucleo in frequences:
16
+ frequences[nucleo] += 1
17
+ else:
18
+ frequences[nucleo] = 1
19
+ return ns, frequences
20
+
21
+
22
+ def sort_seq(seq, length, frequences):
23
+ n, frequences = gen_freq(seq, length, frequences)
24
+
25
+ l = sorted(frequences.items(), reverse=True, key=lambda (seq,freq): (freq,seq))
26
+
27
+ print '\n'.join("%s %.3f" % (st, 100.0*fr/n) for st,fr in l)
28
+ print
29
+
30
+
31
+ def find_seq(seq, s, frequences):
32
+ n,t = gen_freq(seq, len(s), frequences)
33
+ print "%d\t%s" % (t.get(s, 0), s)
34
+
35
+
36
+ def main():
37
+ frequences = {}
38
+ for line in stdin:
39
+ if line[0:3] == ">TH":
40
+ break
41
+
42
+ seq = []
43
+ for line in stdin:
44
+ if line[0] in ">;":
45
+ break
46
+ seq.append( line[:-1] )
47
+ sequence = "".join(seq).upper()
48
+
49
+ for nl in 1,2:
50
+ sort_seq(sequence, nl, frequences)
51
+
52
+ for se in "GGT GGTA GGTATT GGTATTTTAATT GGTATTTTAATTTATAGT".split():
53
+ find_seq(sequence, se, frequences)
54
+
55
+ main()
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/python
2
+ # $Id: lists.python,v 1.1.1.1 2004-05-19 18:10:24 bfulgham Exp $
3
+ # http://www.bagley.org/~doug/shootout/
4
+ # with improvements from Mark Baker
5
+
6
+ import sys
7
+
8
+ SIZE = 10000
9
+
10
+ def test_lists():
11
+ Li1 = range(1, SIZE + 1)
12
+ Li2 = Li1[:]
13
+ Li3 = []
14
+
15
+ # remove each individual item from left side of Li2 and
16
+ # append to right side of Li3 (preserving order)
17
+ #
18
+ # popping the first element is *expensive*
19
+ #
20
+ #while Li2:
21
+ # Li3.append(Li2.pop(0))
22
+ Li2.reverse()
23
+ while Li2:
24
+ Li3.append(Li2.pop())
25
+ while Li3:
26
+ Li2.append(Li3.pop())
27
+ Li1.reverse()
28
+ if Li1[0] != SIZE:
29
+ return 0
30
+ if Li1 == Li2:
31
+ return len(Li1)
32
+ else:
33
+ return 0
34
+
35
+ def main():
36
+ NUM = int(sys.argv[1])
37
+ if NUM < 1:
38
+ NUM = 1
39
+ while NUM > 0:
40
+ result = test_lists()
41
+ NUM = NUM - 1
42
+ print result
43
+
44
+ main()
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/python
2
+ ## The Computer Language Shootout
3
+ ## http://shootout.alioth.debian.org/
4
+ ##
5
+ ## benchmark implementation (not optimized)
6
+ ## contributed by Josh Goldfoot
7
+
8
+ import sys
9
+ import Queue
10
+ import bisect
11
+
12
+ n = mn = 0
13
+
14
+ class PriorityQueue(Queue.Queue):
15
+ def _init(self, maxsize):
16
+ self.maxsize = maxsize
17
+ self.queue = []
18
+ def _put(self, item):
19
+ bisect.insort(self.queue, item)
20
+ def _get(self):
21
+ return self.queue.pop(0)
22
+
23
+ class square(object):
24
+ __slots__ = ['grid', 'ffm', '__priority']
25
+ def __init__(self):
26
+ self.grid = [0 for i in xrange(n * n)]
27
+ self.ffm = None
28
+ self.__priority = None
29
+ def copy(self):
30
+ ret = square()
31
+ ret.grid[:] = self.grid
32
+ return ret
33
+ def gridRow(self, y):
34
+ return [ self.grid[x + y * n] for x in xrange(n)]
35
+ def gridCol(self, x):
36
+ return [ self.grid[x + y * n] for y in xrange(n)]
37
+ def __str__(self):
38
+ return "\n".join( [" ".join([str(self.grid[x + y * n])
39
+ for x in xrange(n)]) for y in xrange(n)])
40
+ def possibleMoves(self, x,y):
41
+ ##Return all moves that can go in the cell x,y for a given
42
+ ##grid. A move is possible if the move (number) is not already
43
+ ##in the grid, and if, after making that move, it is still possible to
44
+ ##satisfy the magic square conditions (all rows, columns, diagonals adding
45
+ ##up to mn, the magic number)
46
+ if self.grid[x + y * n] != 0:
47
+ return []
48
+ cellGroups = [self.gridRow(y), self.gridCol(x)]
49
+ if x == y:
50
+ cellGroups.append([ self.grid[i + i * n] for i in xrange(n) ])
51
+ if x + y == n - 1:
52
+ cellGroups.append([ self.grid[i + (n - 1 - i) * n] for i in xrange(n) ])
53
+ usedNumbers = set(self.grid)
54
+ onePossible = set()
55
+ for g in cellGroups:
56
+ if g.count(0) == 1:
57
+ onePossible.add(mn - sum(g))
58
+ if len(onePossible) == 1:
59
+ onlyPossibleMove = onePossible.pop()
60
+ if 1 <= onlyPossibleMove <= n*n and onlyPossibleMove not in usedNumbers:
61
+ return [onlyPossibleMove]
62
+ else:
63
+ return []
64
+ elif len(onePossible) > 1:
65
+ return []
66
+ highestCandidates = [mn - sum(g) for g in cellGroups]
67
+ highestCandidates.append(n * n)
68
+ highest = min(highestCandidates)
69
+ return [ i for i in xrange(highest + 1) if i not in usedNumbers ]
70
+ def findFewestMoves(self):
71
+ ##Go through the grid (starting at the top-left, and moving
72
+ ##right and down), checking all 0 cells to find the cell with the fewest
73
+ ##possible moves.
74
+ if self.ffm:
75
+ return self.ffm
76
+ minSoFar = []
77
+ minX = minY = None
78
+ minLenSoFar = 0
79
+ for y in xrange(n):
80
+ for x in xrange(n):
81
+ ind = x + y * n
82
+ if self.grid[ind] == 0:
83
+ pm = self.possibleMoves(x,y)
84
+ if minX == None or len(pm) < minLenSoFar:
85
+ minSoFar[:] = pm
86
+ minLenSoFar = len(pm)
87
+ minX = x
88
+ minY = y
89
+ self.ffm = (minSoFar, minLenSoFar, minX, minY)
90
+ return self.ffm
91
+ return (minSoFar, minLenSoFar, minX, minY)
92
+
93
+ def successorNodes(self):
94
+ ##successorNodes: Find the cell with the fewest
95
+ ##possible moves left, and then creates a new node for each possible move
96
+ ##in that cell.
97
+ (pm, len_pm, x, y) = self.findFewestMoves()
98
+ node = self.copy() # Create a copy of yourself
99
+ ind = x + y * n
100
+ for move in pm:
101
+ node.grid[ind] = move
102
+ yield node
103
+ def priority(self):
104
+ ##The priority function is:
105
+ ##(number of zeros in the grid) plus
106
+ ##(number of possible moves in the cell with the fewest possible moves)
107
+ ##the lower the priority, the sooner the node will be popped from the queue.
108
+ if self.__priority == None:
109
+ (pm, len_pm, x, y) = self.findFewestMoves()
110
+ self.__priority = self.grid.count(0) + len_pm
111
+ return self.__priority
112
+ def __cmp__(self, other):
113
+ ##The priority queue is sorted first by
114
+ ##the node's calculated priority; then, if the priorities
115
+ ##are equal, by whichever node has the lowest numbers
116
+ ##in the top-left of the array (or the next cell over,
117
+ ##and so on).
118
+ c = cmp(self.priority(), other.priority())
119
+ if c == 0:
120
+ i = 0
121
+ while c == 0 and i < n * n:
122
+ c = cmp(self.grid[i], other.grid[i])
123
+ i += 1
124
+ return c
125
+
126
+ def main():
127
+ global n, mn
128
+ n = len(sys.argv) > 1 and int(sys.argv[1]) or 3
129
+ mn = n * (1 + n * n) / 2
130
+ # Initialize priority queue and push a square full of zeros on it
131
+ priorityQueue = PriorityQueue()
132
+ priorityQueue.put( square() )
133
+ # Loop through the priority queue...
134
+ while not priorityQueue.empty():
135
+ node = priorityQueue.get()
136
+ # if priority is 0, then this is a complete square; stop
137
+ if node.priority() == 0:
138
+ break
139
+ # otherwise, add to the queue all squares that can be derived by filling in
140
+ # one cell in this magic square
141
+ for newnode in node.successorNodes():
142
+ priorityQueue.put(newnode.copy() )
143
+ if node.priority() == 0:
144
+ print node
145
+ main()
@@ -0,0 +1,44 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by Tupteq
5
+
6
+ import sys
7
+
8
+ def main():
9
+ cout = sys.stdout.write
10
+ size = int(sys.argv[1])
11
+ xr_size = xrange(size)
12
+ xr_iter = xrange(50)
13
+ bit = 128
14
+ byte_acc = 0
15
+
16
+ cout("P4\n%d %d\n" % (size, size))
17
+
18
+ size = float(size)
19
+ for y in xr_size:
20
+ fy = 2j * y / size - 1j
21
+ for x in xr_size:
22
+ z = 0j
23
+ c = 2. * x / size - 1.5 + fy
24
+
25
+ for i in xr_iter:
26
+ z = z * z + c
27
+ if abs(z) >= 2.0:
28
+ break
29
+ else:
30
+ byte_acc += bit
31
+
32
+ if bit > 1:
33
+ bit >>= 1
34
+ else:
35
+ cout(chr(byte_acc))
36
+ bit = 128
37
+ byte_acc = 0
38
+
39
+ if bit != 128:
40
+ cout(chr(byte_acc))
41
+ bit = 128
42
+ byte_acc = 0
43
+
44
+ main()
@@ -0,0 +1,35 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by Heinrich Acker
5
+
6
+ import sys
7
+ import numpy
8
+
9
+ limit = 2.
10
+ size = int(sys.argv[1])
11
+
12
+ # create an array of NxN complex constants
13
+ grid = numpy.arange(0, 2, 2./size)
14
+ c = (grid-1.5).reshape(1, size).repeat(size, 0) + \
15
+ 1j*(grid-1).reshape(size, 1).repeat(size, 1)
16
+
17
+ # create NxN arrays for iteration and results
18
+ z = 0*c
19
+ mask = z==0
20
+
21
+ # compute the mandelbrot set vectorized
22
+ for i in range(50):
23
+ z = mask * (z * z + c)
24
+ mask = numpy.logical_and(mask, numpy.abs(z)<limit)
25
+
26
+ # map the bool results to their binary value
27
+ mask = mask.reshape(-1, 8).astype('uint8')
28
+ for bit in range(8):
29
+ mask[:, 7-bit] *= 1 << bit
30
+
31
+ # pack the results into bytes
32
+ mask = mask.sum(1, 'uint8')
33
+
34
+ # write image data
35
+ sys.stdout.write("P4\n%d %d\n%s" % (size, size, mask.tostring()))
@@ -0,0 +1,46 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by Tupteq
5
+
6
+ import sys
7
+
8
+ def main():
9
+ cout = sys.stdout.write
10
+ iter = 50
11
+ limit = 2.
12
+ size = int(sys.argv[1])
13
+ fsize = float(size)
14
+ xr_size = xrange(size)
15
+ xr_iter = xrange(iter)
16
+ bit_num = 7
17
+ byte_acc = 0
18
+
19
+ cout("P4\n%d %d\n" % (size, size))
20
+
21
+ for y in xr_size:
22
+ fy = 2j * y / fsize - 1j
23
+ for x in xr_size:
24
+ z = 0j
25
+ c = 2. * x / fsize - 1.5 + fy
26
+
27
+ for i in xr_iter:
28
+ z = z * z + c
29
+ if abs(z) >= limit:
30
+ break
31
+ else:
32
+ byte_acc += 1 << bit_num
33
+
34
+ if bit_num == 0:
35
+ cout(chr(byte_acc))
36
+ bit_num = 7
37
+ byte_acc = 0
38
+ else:
39
+ bit_num -= 1
40
+
41
+ if bit_num != 7:
42
+ cout(chr(byte_acc))
43
+ bit_num = 7
44
+ byte_acc = 0
45
+
46
+ main()
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env python
2
+ #
3
+ #
4
+ # Author: �smund �deg�rd
5
+ # Simula Research Laboratory (2004)
6
+ #
7
+ # modeled after the original matrix.py at the shootout.
8
+
9
+ import sys
10
+ from numarray import *
11
+
12
+ size = 30
13
+
14
+ def mkmatrix(rows,cols):
15
+ m = array([[i+(j-1)*rows for i in xrange(1,rows+1)] for j in xrange(1,cols+1)])
16
+ return m
17
+
18
+
19
+ def mmult(m1,m2):
20
+ return dot(m1,m2)
21
+
22
+
23
+ def main():
24
+ try: iter = int(sys.argv[1])
25
+ except: iter = 1
26
+
27
+ m1 = mkmatrix(size,size)
28
+ m2 = mkmatrix(size,size)
29
+ for i in xrange(iter):
30
+ mm = mmult(m1,m2)
31
+ print mm[0,0], mm[2,3], mm[3,2], mm[4,4]
32
+
33
+ main()
34
+
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env python
2
+ # $Id: matrix.python-2.python,v 1.1 2004-11-10 06:47:57 bfulgham Exp $
3
+ # from Kevin Turner
4
+ # this example uses NumPy:
5
+ # Numeric Python is available at http://www.pfdubois.com/numpy/
6
+
7
+ import sys
8
+ from Numeric import *
9
+
10
+ size = 30
11
+
12
+ def main():
13
+ iter = int(sys.argv[1])
14
+
15
+ # Create an array of size*size consecutive numbers (starting at 1,
16
+ # not 0), and reshape it into a (size, size) matrix.
17
+ m1 = reshape(arange(1, size*size + 1), (size,size))
18
+ m2 = reshape(arange(1, size*size + 1), (size,size))
19
+ for i in xrange(iter):
20
+ mm = matrixmultiply(m1, m2)
21
+ print mm[0][0], mm[2][3], mm[3][2], mm[4][4]
22
+
23
+ main()
@@ -0,0 +1,24 @@
1
+ # The Computer Language Shootout
2
+ # http://shootout.alioth.debian.org/
3
+ # contributed by Tobias Polzin, translated from Mike Pall's Lua program
4
+ # modified by Brian Atkinson
5
+
6
+ import sys
7
+
8
+ def create_coroutine(n):
9
+ if n > 1:
10
+ coroutine = create_coroutine(n-1)
11
+ while 1:
12
+ yield coroutine.next()+1
13
+ else:
14
+ while 1:
15
+ yield 1
16
+
17
+ def main():
18
+ coroutine = create_coroutine( 500 )
19
+ count = 0
20
+ for i in xrange( int( sys.argv[1] ) ):
21
+ count += coroutine.next()
22
+ print count
23
+
24
+ main()