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.
- data/Manifest +325 -0
- data/README.textile +51 -0
- data/Rakefile +64 -0
- data/examples/example.rb +22 -0
- data/lib/sourceclassifier.rb +22 -0
- data/lib/trainer.rb +51 -0
- data/sourceclassifier.gemspec +35 -0
- data/sources/gcc/ackermann.gcc-2.gcc +93 -0
- data/sources/gcc/ackermann.gcc-3.gcc +20 -0
- data/sources/gcc/ary.gcc +40 -0
- data/sources/gcc/binarytrees.gcc +136 -0
- data/sources/gcc/binarytrees.gcc-2.gcc +140 -0
- data/sources/gcc/binarytrees.gcc-3.gcc +134 -0
- data/sources/gcc/chameneos.gcc +117 -0
- data/sources/gcc/chameneos.gcc-2.gcc +134 -0
- data/sources/gcc/chameneos.gcc-3.gcc +120 -0
- data/sources/gcc/chameneosredux.gcc +306 -0
- data/sources/gcc/echo.gcc +144 -0
- data/sources/gcc/except.gcc +52 -0
- data/sources/gcc/fannkuch.gcc +105 -0
- data/sources/gcc/fannkuch.gcc-2.gcc +94 -0
- data/sources/gcc/fasta.gcc +158 -0
- data/sources/gcc/fasta.gcc-2.gcc +132 -0
- data/sources/gcc/fasta.gcc-3.gcc +145 -0
- data/sources/gcc/fasta.gcc-4.gcc +141 -0
- data/sources/gcc/fibo.gcc +20 -0
- data/sources/gcc/harmonic.gcc +22 -0
- data/sources/gcc/hash.gcc +31 -0
- data/sources/gcc/hash2.gcc +38 -0
- data/sources/gcc/heapsort.gcc +72 -0
- data/sources/gcc/hello.gcc-2.gcc +12 -0
- data/sources/gcc/hello.gcc-3.gcc +20 -0
- data/sources/gcc/knucleotide.gcc +173 -0
- data/sources/gcc/knucleotide.gcc-2.gcc +168 -0
- data/sources/gcc/lists.gcc +226 -0
- data/sources/gcc/magicsquares.gcc +378 -0
- data/sources/gcc/mandelbrot.gcc +84 -0
- data/sources/gcc/mandelbrot.gcc-2.gcc +63 -0
- data/sources/gcc/mandelbrot.gcc-3.gcc +91 -0
- data/sources/gcc/mandelbrot.gcc-4.gcc +78 -0
- data/sources/gcc/matrix.gcc +66 -0
- data/sources/gcc/message.gcc-2.gcc +72 -0
- data/sources/gcc/message.gcc-3.gcc +64 -0
- data/sources/gcc/methcall.gcc +89 -0
- data/sources/gcc/moments.gcc +120 -0
- data/sources/gcc/nbody.gcc +142 -0
- data/sources/gcc/nbody.gcc-2.gcc +143 -0
- data/sources/gcc/nbody.gcc-3.gcc +142 -0
- data/sources/gcc/nestedloop.gcc +25 -0
- data/sources/gcc/nsieve.gcc +35 -0
- data/sources/gcc/nsievebits.gcc-2.gcc +37 -0
- data/sources/gcc/nsievebits.gcc-3.gcc +53 -0
- data/sources/gcc/objinst.gcc +95 -0
- data/sources/gcc/partialsums.gcc +86 -0
- data/sources/gcc/partialsums.gcc-3.gcc +81 -0
- data/sources/gcc/partialsums.gcc-4.gcc +68 -0
- data/sources/gcc/pidigits.gcc +105 -0
- data/sources/gcc/primes.gcc +75 -0
- data/sources/gcc/prodcons.gcc +86 -0
- data/sources/gcc/random.gcc +29 -0
- data/sources/gcc/raytracer.gcc +125 -0
- data/sources/gcc/raytracer.gcc-2.gcc +181 -0
- data/sources/gcc/recursive.gcc +68 -0
- data/sources/gcc/recursive.gcc-2.gcc +55 -0
- data/sources/gcc/regexdna.gcc-2.gcc +126 -0
- data/sources/gcc/regexmatch.gcc +136 -0
- data/sources/gcc/revcomp.gcc +85 -0
- data/sources/gcc/revcomp.gcc-2.gcc +88 -0
- data/sources/gcc/revcomp.gcc-4.gcc +71 -0
- data/sources/gcc/reversefile.gcc +103 -0
- data/sources/gcc/reversefile.gcc-2.gcc +56 -0
- data/sources/gcc/sieve.gcc +34 -0
- data/sources/gcc/spectralnorm.gcc +54 -0
- data/sources/gcc/spellcheck.gcc +72 -0
- data/sources/gcc/spellcheck.gcc-2.gcc +61 -0
- data/sources/gcc/strcat.gcc +38 -0
- data/sources/gcc/sumcol.gcc-2.gcc +98 -0
- data/sources/gcc/sumcol.gcc-3.gcc +22 -0
- data/sources/gcc/sumcol.gcc-4.gcc +18 -0
- data/sources/gcc/sumcol.gcc-5.gcc +32 -0
- data/sources/gcc/takfp.gcc +23 -0
- data/sources/gcc/tcp-stream.gcc +122 -0
- data/sources/gcc/tcpecho.gcc +122 -0
- data/sources/gcc/tcpecho.gcc-2.gcc +136 -0
- data/sources/gcc/tcprequest.gcc +122 -0
- data/sources/gcc/threadring.gcc +73 -0
- data/sources/gcc/wc.gcc +52 -0
- data/sources/gcc/wc.gcc-2.gcc +40 -0
- data/sources/gcc/wc.gcc-3.gcc +46 -0
- data/sources/gcc/wordfreq.gcc-2.gcc +85 -0
- data/sources/perl/ackermann.perl +28 -0
- data/sources/perl/ackermann.perl-2.perl +25 -0
- data/sources/perl/ackermann.perl-3.perl +20 -0
- data/sources/perl/ackermann.perl-4.perl +18 -0
- data/sources/perl/ary.perl +25 -0
- data/sources/perl/ary.perl-2.perl +23 -0
- data/sources/perl/binarytrees.perl +66 -0
- data/sources/perl/binarytrees.perl-2.perl +71 -0
- data/sources/perl/chameneos.perl +67 -0
- data/sources/perl/echo.perl +81 -0
- data/sources/perl/except.perl +73 -0
- data/sources/perl/fannkuch.perl +44 -0
- data/sources/perl/fannkuch.perl-2.perl +38 -0
- data/sources/perl/fasta.perl +112 -0
- data/sources/perl/fasta.perl-2.perl +135 -0
- data/sources/perl/fasta.perl-4.perl +122 -0
- data/sources/perl/fibo.perl +15 -0
- data/sources/perl/fibo.perl-2.perl +0 -0
- data/sources/perl/fibo.perl-3.perl +0 -0
- data/sources/perl/harmonic.perl +7 -0
- data/sources/perl/hash.perl +23 -0
- data/sources/perl/hash.perl-2.perl +17 -0
- data/sources/perl/hash.perl-3.perl +24 -0
- data/sources/perl/hash2.perl +16 -0
- data/sources/perl/heapsort.perl +65 -0
- data/sources/perl/heapsort.perl-2.perl +0 -0
- data/sources/perl/hello.perl +5 -0
- data/sources/perl/knucleotide.perl-2.perl +30 -0
- data/sources/perl/lists.perl +48 -0
- data/sources/perl/mandelbrot.perl-2.perl +32 -0
- data/sources/perl/matrix.perl +59 -0
- data/sources/perl/matrix.perl-2.perl +0 -0
- data/sources/perl/matrix.perl-3.perl +0 -0
- data/sources/perl/message.perl +27 -0
- data/sources/perl/methcall.perl +66 -0
- data/sources/perl/moments.perl +44 -0
- data/sources/perl/nbody.perl +108 -0
- data/sources/perl/nestedloop.perl +28 -0
- data/sources/perl/nsieve.perl-2.perl +41 -0
- data/sources/perl/nsieve.perl-4.perl +43 -0
- data/sources/perl/nsievebits.perl +37 -0
- data/sources/perl/objinst.perl +73 -0
- data/sources/perl/partialsums.perl-3.perl +31 -0
- data/sources/perl/pidigits.perl +52 -0
- data/sources/perl/pidigits.perl-2.perl +47 -0
- data/sources/perl/process.perl +50 -0
- data/sources/perl/prodcons.perl +47 -0
- data/sources/perl/random.perl-4.perl +17 -0
- data/sources/perl/recursive.perl-2.perl +57 -0
- data/sources/perl/regexdna.perl +48 -0
- data/sources/perl/regexdna.perl-2.perl +43 -0
- data/sources/perl/regexdna.perl-3.perl +50 -0
- data/sources/perl/regexdna.perl-4.perl +49 -0
- data/sources/perl/regexdna.perl-5.perl +42 -0
- data/sources/perl/regexdna.perl-6.perl +43 -0
- data/sources/perl/regexmatch.perl +35 -0
- data/sources/perl/revcomp.perl-2.perl +34 -0
- data/sources/perl/reversefile.perl +8 -0
- data/sources/perl/reversefile.perl-2.perl +0 -0
- data/sources/perl/reversefile.perl-3.perl +0 -0
- data/sources/perl/sieve.perl +23 -0
- data/sources/perl/spectralnorm.perl-2.perl +54 -0
- data/sources/perl/spellcheck.perl +24 -0
- data/sources/perl/strcat.perl +13 -0
- data/sources/perl/strcat.perl-2.perl +0 -0
- data/sources/perl/sumcol.perl +8 -0
- data/sources/perl/takfp.perl +23 -0
- data/sources/perl/takfp.perl-3.perl +20 -0
- data/sources/perl/tcpecho.perl +61 -0
- data/sources/perl/tcprequest.perl +61 -0
- data/sources/perl/tcpstream.perl +61 -0
- data/sources/perl/threadring.perl +55 -0
- data/sources/perl/threadring.perl-2.perl +43 -0
- data/sources/perl/wc.perl +20 -0
- data/sources/perl/wc.perl-2.perl +14 -0
- data/sources/perl/wordfreq.perl +22 -0
- data/sources/perl/wordfreq.perl-3.perl +0 -0
- data/sources/perl/wordfreq.perl3.perl +0 -0
- data/sources/python/ackermann.python +21 -0
- data/sources/python/ary.python +19 -0
- data/sources/python/binarytrees.python +39 -0
- data/sources/python/binarytrees.python-3.python +44 -0
- data/sources/python/chameneos.python-6.python +73 -0
- data/sources/python/chameneosredux.python +126 -0
- data/sources/python/chameneosredux.python-2.python +122 -0
- data/sources/python/dispatch.python +176 -0
- data/sources/python/dispatch.python-2.python +136 -0
- data/sources/python/echo.python +64 -0
- data/sources/python/except.python +62 -0
- data/sources/python/fannkuch.python +50 -0
- data/sources/python/fannkuch.python-2.python +54 -0
- data/sources/python/fasta.python-2.python +79 -0
- data/sources/python/fibo.python +17 -0
- data/sources/python/fibo.python-2.python +0 -0
- data/sources/python/fibo.python-3.python +0 -0
- data/sources/python/harmonic.python-2.python +9 -0
- data/sources/python/hash.python +21 -0
- data/sources/python/hash.python-2.python +0 -0
- data/sources/python/hash2.python +30 -0
- data/sources/python/heapsort.python-3.python +66 -0
- data/sources/python/hello.python +5 -0
- data/sources/python/implicitode.python +231 -0
- data/sources/python/knucleotide.python +55 -0
- data/sources/python/lists.python +44 -0
- data/sources/python/magicsquares.python +145 -0
- data/sources/python/mandelbrot.python +44 -0
- data/sources/python/mandelbrot.python-2.python +35 -0
- data/sources/python/mandelbrot.python-3.python +46 -0
- data/sources/python/matrix.python +34 -0
- data/sources/python/matrix.python-2.python +23 -0
- data/sources/python/message.python +24 -0
- data/sources/python/message.python-2.python +20 -0
- data/sources/python/message.python-3.python +19 -0
- data/sources/python/meteor.python +210 -0
- data/sources/python/meteor.python-2.python +192 -0
- data/sources/python/methcall.python +51 -0
- data/sources/python/moments.python +65 -0
- data/sources/python/nbody.python +123 -0
- data/sources/python/nbody.python-2.python +120 -0
- data/sources/python/nestedloop.python +24 -0
- data/sources/python/nsieve.python +27 -0
- data/sources/python/nsieve.python-2.python +23 -0
- data/sources/python/nsieve.python-4.python +25 -0
- data/sources/python/nsievebits.python +27 -0
- data/sources/python/nsievebits.python-2.python +43 -0
- data/sources/python/objinst.python +53 -0
- data/sources/python/partialsums.python +37 -0
- data/sources/python/partialsums.python-2.python +35 -0
- data/sources/python/partialsums.python-3.python +48 -0
- data/sources/python/pidigits.python +38 -0
- data/sources/python/pidigits.python-3.python +63 -0
- data/sources/python/pidigits.python-4.python +24 -0
- data/sources/python/process.python +51 -0
- data/sources/python/process.python-2.python +133 -0
- data/sources/python/prodcons.python +51 -0
- data/sources/python/prodcons.python-2.python +0 -0
- data/sources/python/random.python +27 -0
- data/sources/python/raytracer.python +203 -0
- data/sources/python/recursive.python +35 -0
- data/sources/python/regexdna.python +39 -0
- data/sources/python/regexdna.python-2.python +34 -0
- data/sources/python/regexmatch.python +36 -0
- data/sources/python/revcomp.python-3.python +31 -0
- data/sources/python/reversefile.python +13 -0
- data/sources/python/reversefile.python-2.python +0 -0
- data/sources/python/reversefile.python-3.python +0 -0
- data/sources/python/sieve.python +50 -0
- data/sources/python/spectralnorm.python-2.python +36 -0
- data/sources/python/spellcheck.python +17 -0
- data/sources/python/strcat.python +35 -0
- data/sources/python/strcat.python-2.python +0 -0
- data/sources/python/sumcol.python-2.python +0 -0
- data/sources/python/sumcol.python-3.python +0 -0
- data/sources/python/takfp.python +19 -0
- data/sources/python/tcpecho.python +67 -0
- data/sources/python/tcprequest.python +67 -0
- data/sources/python/tcpstream.python +67 -0
- data/sources/python/threadring.python +47 -0
- data/sources/python/threadring.python-2.python +40 -0
- data/sources/python/threadring.python-3.python +34 -0
- data/sources/python/wc.python-2.python +19 -0
- data/sources/python/wordfreq.python +43 -0
- data/sources/python/wordfreq.python-2.python +0 -0
- data/sources/python/wordfreq.python-3.python +28 -0
- data/sources/python/wordfreq.python-4.python +38 -0
- data/sources/python/wordfreq.python-5.python +39 -0
- data/sources/ruby/ackermann.ruby +17 -0
- data/sources/ruby/ackermann.ruby-5.ruby +153 -0
- data/sources/ruby/ary.ruby +22 -0
- data/sources/ruby/binarytrees.ruby-2.ruby +55 -0
- data/sources/ruby/chameneos.ruby-2.ruby +71 -0
- data/sources/ruby/dispatch.ruby +114 -0
- data/sources/ruby/echo.ruby +41 -0
- data/sources/ruby/except.ruby +61 -0
- data/sources/ruby/except.ruby-2.ruby +61 -0
- data/sources/ruby/fannkuch.ruby +42 -0
- data/sources/ruby/fasta.ruby +81 -0
- data/sources/ruby/fibo.ruby +15 -0
- data/sources/ruby/harmonic.ruby-2.ruby +15 -0
- data/sources/ruby/hash.ruby +19 -0
- data/sources/ruby/hash2.ruby +23 -0
- data/sources/ruby/heapsort.ruby +55 -0
- data/sources/ruby/hello.ruby +6 -0
- data/sources/ruby/knucleotide.ruby-2.ruby +44 -0
- data/sources/ruby/lists.ruby +46 -0
- data/sources/ruby/mandelbrot.ruby-3.ruby +63 -0
- data/sources/ruby/matrix.ruby +40 -0
- data/sources/ruby/matrix.ruby-2.ruby +30 -0
- data/sources/ruby/message.ruby +29 -0
- data/sources/ruby/message.ruby-2.ruby +24 -0
- data/sources/ruby/meteor.ruby +386 -0
- data/sources/ruby/meteor.ruby-2.ruby +561 -0
- data/sources/ruby/methcall.ruby +58 -0
- data/sources/ruby/methcall.ruby-2.ruby +54 -0
- data/sources/ruby/moments.ruby +64 -0
- data/sources/ruby/nbody.ruby-2.ruby +145 -0
- data/sources/ruby/nestedloop.ruby +22 -0
- data/sources/ruby/nsieve.ruby +36 -0
- data/sources/ruby/nsieve.ruby-2.ruby +25 -0
- data/sources/ruby/nsievebits.ruby-2.ruby +42 -0
- data/sources/ruby/objinst.ruby +58 -0
- data/sources/ruby/partialsums.ruby +39 -0
- data/sources/ruby/pidigits.ruby +92 -0
- data/sources/ruby/pidigits.ruby-2.ruby +109 -0
- data/sources/ruby/prodcons.ruby +41 -0
- data/sources/ruby/random.ruby +17 -0
- data/sources/ruby/recursive.ruby-2.ruby +53 -0
- data/sources/ruby/regexdna.ruby +32 -0
- data/sources/ruby/regexdna.ruby-2.ruby +38 -0
- data/sources/ruby/regexmatch.ruby +33 -0
- data/sources/ruby/revcomp.ruby +28 -0
- data/sources/ruby/reversefile.ruby +7 -0
- data/sources/ruby/sieve.ruby +30 -0
- data/sources/ruby/spectralnorm.ruby +48 -0
- data/sources/ruby/spellcheck.ruby +18 -0
- data/sources/ruby/spellcheck.ruby-2.ruby +0 -0
- data/sources/ruby/strcat.ruby +12 -0
- data/sources/ruby/strcat.ruby-2.ruby +12 -0
- data/sources/ruby/sumcol.ruby +12 -0
- data/sources/ruby/sumcol.ruby-2.ruby +5 -0
- data/sources/ruby/takfp.ruby +15 -0
- data/sources/ruby/tcpecho.ruby +45 -0
- data/sources/ruby/tcprequest.ruby +45 -0
- data/sources/ruby/tcpstream.ruby +45 -0
- data/sources/ruby/threadring.ruby +61 -0
- data/sources/ruby/threadring.ruby-2.ruby +33 -0
- data/sources/ruby/wc.ruby +15 -0
- data/sources/ruby/wordfreq.ruby +17 -0
- data/sources/ruby/wordfreq.ruby2.ruby +0 -0
- data/test/fixtures/sources/gcc/ackermann.gcc-2.gcc +93 -0
- data/test/fixtures/sources/python/ackermann.python +21 -0
- data/test/fixtures/sources/ruby/ackermann.ruby +17 -0
- data/test/test_source_classifier.rb +40 -0
- data/test/test_trainer.rb +34 -0
- data/trainer.bin +1193 -0
- 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()
|