chrislo-sourceclassifier 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,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,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,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
|
+
|