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 Benchmarks Game
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
|
|
4
|
+
# contributed by Richard Cottrill
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
use strict;
|
|
8
|
+
use warnings;
|
|
9
|
+
use threads;
|
|
10
|
+
use threads::shared;
|
|
11
|
+
use Thread::Semaphore;
|
|
12
|
+
|
|
13
|
+
my $numThreads :shared;
|
|
14
|
+
my $data :shared;
|
|
15
|
+
my $result :shared;
|
|
16
|
+
my @mutex :shared;
|
|
17
|
+
|
|
18
|
+
$numThreads = 503;
|
|
19
|
+
|
|
20
|
+
sub thr_func {
|
|
21
|
+
my ($nextThread, $thr_name);
|
|
22
|
+
$thr_name = threads->tid();
|
|
23
|
+
threads->detach();
|
|
24
|
+
if ($thr_name == $numThreads) {
|
|
25
|
+
$nextThread = 1;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
$nextThread = $thr_name + 1;
|
|
29
|
+
}
|
|
30
|
+
while (1) {
|
|
31
|
+
$mutex[$thr_name]->down();
|
|
32
|
+
if ($data) {
|
|
33
|
+
$data = --$data;
|
|
34
|
+
$mutex[$nextThread]->up();
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
$result = $thr_name;
|
|
38
|
+
$mutex[0]->up();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
$data = $ARGV[0];
|
|
44
|
+
|
|
45
|
+
$mutex[0] = new Thread::Semaphore(0);
|
|
46
|
+
{
|
|
47
|
+
for (1 .. $numThreads) {
|
|
48
|
+
$mutex[$_] = new Thread::Semaphore(0);
|
|
49
|
+
threads->create(\&thr_func);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
$mutex[1]->up();
|
|
53
|
+
$mutex[0]->down();
|
|
54
|
+
print "$result\n";
|
|
55
|
+
exit(0);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# The Computer Language Benchmarks Game
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
|
|
4
|
+
# contributed by Marc Lehmann
|
|
5
|
+
|
|
6
|
+
use strict;
|
|
7
|
+
use Coro;
|
|
8
|
+
use Coro::Semaphore;
|
|
9
|
+
|
|
10
|
+
my $threads = 503;
|
|
11
|
+
my $result;
|
|
12
|
+
my @data = $ARGV[0];
|
|
13
|
+
my @mutex;
|
|
14
|
+
|
|
15
|
+
sub thr_func {
|
|
16
|
+
my ($id, $next) = @_;
|
|
17
|
+
|
|
18
|
+
my $next = ($id + 1) % $threads;
|
|
19
|
+
|
|
20
|
+
while () {
|
|
21
|
+
$mutex[$id]->down;
|
|
22
|
+
|
|
23
|
+
if ($data[$id]) {
|
|
24
|
+
$data[$next] = $data[$id] - 1;
|
|
25
|
+
$mutex[$next]->up;
|
|
26
|
+
} else {
|
|
27
|
+
$result = $next;
|
|
28
|
+
print "$next\n";
|
|
29
|
+
exit;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
for (0 .. $threads - 1) {
|
|
36
|
+
$mutex[$_] = new Coro::Semaphore 0;
|
|
37
|
+
async \&thr_func, $_;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
$mutex[0]->up;
|
|
41
|
+
schedule;
|
|
42
|
+
|
|
43
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/perl
|
|
2
|
+
# $Id: wc.perl,v 1.1.1.1 2004-05-19 18:13:51 bfulgham Exp $
|
|
3
|
+
# http://www.bagley.org/~doug/shootout/
|
|
4
|
+
|
|
5
|
+
# this program is modified from:
|
|
6
|
+
# http://cm.bell-labs.com/cm/cs/who/bwk/interps/pap.html
|
|
7
|
+
# Timing Trials, or, the Trials of Timing: Experiments with Scripting
|
|
8
|
+
# and User-Interface Languages</a> by Brian W. Kernighan and
|
|
9
|
+
# Christopher J. Van Wyk.
|
|
10
|
+
|
|
11
|
+
use strict;
|
|
12
|
+
|
|
13
|
+
my($nl, $nw, $nc);
|
|
14
|
+
while (read(STDIN, $_, 4095)) {
|
|
15
|
+
$_ .= <STDIN>;
|
|
16
|
+
$nl += scalar(split(/\n/));
|
|
17
|
+
$nc += length;
|
|
18
|
+
$nw += scalar(split);
|
|
19
|
+
}
|
|
20
|
+
print "$nl $nw $nc\n";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/perl
|
|
2
|
+
# The Computer Language Shootout
|
|
3
|
+
# http://shootout.alioth.debian.org/
|
|
4
|
+
# contributed by Cosimo Streppone
|
|
5
|
+
|
|
6
|
+
use strict;
|
|
7
|
+
my($nl, $nw, $nc);
|
|
8
|
+
while (read(STDIN, $_, 4095)) {
|
|
9
|
+
$_ .= <STDIN>;
|
|
10
|
+
$nc += length;
|
|
11
|
+
$nw += scalar split;
|
|
12
|
+
$nl += tr/\n/\n/;
|
|
13
|
+
}
|
|
14
|
+
print "$nl $nw $nc\n";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/perl
|
|
2
|
+
# $Id: wordfreq.perl,v 1.2 2004-07-03 05:36:11 bfulgham Exp $
|
|
3
|
+
# http://shootout.alioth.debian.org/
|
|
4
|
+
|
|
5
|
+
# Tony Bowden suggested using tr versus lc and split(/[^a-z]/)
|
|
6
|
+
# Some corrections to comply with tr/wc/sort "master" implementation
|
|
7
|
+
|
|
8
|
+
use strict;
|
|
9
|
+
|
|
10
|
+
my %count = ();
|
|
11
|
+
while (read(STDIN, $_, 4095) and $_ .= <STDIN>) {
|
|
12
|
+
tr/A-Za-z/\n/cs;
|
|
13
|
+
++$count{$_} foreach split('\n', lc $_);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
my @lines = ();
|
|
17
|
+
my ($w, $c);
|
|
18
|
+
while (($w, $c) = each(%count)) {
|
|
19
|
+
next if ("$w" eq "");
|
|
20
|
+
push(@lines, sprintf("%7d %s\n", $c, $w));
|
|
21
|
+
}
|
|
22
|
+
print sort { $b cmp $a } @lines;
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
# $Id: ackermann.python,v 1.3 2005-03-16 08:37:07 bfulgham Exp $
|
|
3
|
+
# http://www.bagley.org/~doug/shootout/
|
|
4
|
+
# from Brad Knotwell
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
sys.setrecursionlimit(5000000)
|
|
8
|
+
|
|
9
|
+
def Ack(M, N):
|
|
10
|
+
if (not M):
|
|
11
|
+
return( N + 1 )
|
|
12
|
+
if (not N):
|
|
13
|
+
return( Ack(M-1, 1) )
|
|
14
|
+
return( Ack(M-1, Ack(M, N-1)) )
|
|
15
|
+
|
|
16
|
+
def main():
|
|
17
|
+
NUM = int(sys.argv[1])
|
|
18
|
+
sys.setrecursionlimit(10000)
|
|
19
|
+
print "Ack(3,%d): %d" % (NUM, Ack(3, NUM))
|
|
20
|
+
|
|
21
|
+
main()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
# $Id: ary.python,v 1.2 2004-05-22 07:25:00 bfulgham Exp $
|
|
3
|
+
# http://www.bagley.org/~doug/shootout/
|
|
4
|
+
# with help from Brad Knotwell
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
def main():
|
|
9
|
+
n = int(sys.argv[1])
|
|
10
|
+
x = n * [0]
|
|
11
|
+
y = n * [0]
|
|
12
|
+
for i in xrange(0,n):
|
|
13
|
+
x[i] = i + 1
|
|
14
|
+
for k in xrange(0,1000):
|
|
15
|
+
for i in xrange(n-1,-1,-1):
|
|
16
|
+
y[i] += x[i]
|
|
17
|
+
print y[0], y[-1]
|
|
18
|
+
|
|
19
|
+
main()
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# The Computer Language Benchmarks Game
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
#
|
|
4
|
+
# contributed by Antoine Pitrou
|
|
5
|
+
# modified by Dominique Wahli
|
|
6
|
+
# modified by Heinrich Acker
|
|
7
|
+
|
|
8
|
+
import sys, gc
|
|
9
|
+
gc.disable()
|
|
10
|
+
|
|
11
|
+
def make_tree(item, depth):
|
|
12
|
+
if not depth: return item, None, None
|
|
13
|
+
item2 = item + item
|
|
14
|
+
depth -= 1
|
|
15
|
+
return item, make_tree(item2 - 1, depth), make_tree(item2, depth)
|
|
16
|
+
|
|
17
|
+
def check_tree((item, left, right)):
|
|
18
|
+
if not left: return item
|
|
19
|
+
return item + check_tree(left) - check_tree(right)
|
|
20
|
+
|
|
21
|
+
min_depth = 4
|
|
22
|
+
max_depth = max(min_depth + 2, int(sys.argv[1]))
|
|
23
|
+
stretch_depth = max_depth + 1
|
|
24
|
+
|
|
25
|
+
print "stretch tree of depth %d\t check:" % stretch_depth, check_tree(make_tree(0, stretch_depth))
|
|
26
|
+
|
|
27
|
+
long_lived_tree = make_tree(0, max_depth)
|
|
28
|
+
|
|
29
|
+
iterations = 2**max_depth
|
|
30
|
+
for depth in xrange(min_depth, stretch_depth, 2):
|
|
31
|
+
|
|
32
|
+
check = 0
|
|
33
|
+
for i in xrange(1, iterations + 1):
|
|
34
|
+
check += check_tree(make_tree(i, depth)) + check_tree(make_tree(-i, depth))
|
|
35
|
+
|
|
36
|
+
print "%d\t trees of depth %d\t check:" % (iterations * 2, depth), check
|
|
37
|
+
iterations /= 4
|
|
38
|
+
|
|
39
|
+
print "long lived tree of depth %d\t check:" % max_depth, check_tree(long_lived_tree)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# The Computer Language Shootout Benchmarks
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
#
|
|
4
|
+
# contributed by Antoine Pitrou
|
|
5
|
+
# modified by Dominique Wahli
|
|
6
|
+
|
|
7
|
+
from sys import argv
|
|
8
|
+
|
|
9
|
+
def make_tree(item, depth):
|
|
10
|
+
if depth > 0:
|
|
11
|
+
item2 = 2 * item
|
|
12
|
+
depth -= 1
|
|
13
|
+
return (item, make_tree(item2 - 1, depth), make_tree(item2, depth))
|
|
14
|
+
else:
|
|
15
|
+
return (item, None, None)
|
|
16
|
+
|
|
17
|
+
def check_tree((item, left, right)):
|
|
18
|
+
if left is not None:
|
|
19
|
+
return item + check_tree(left) - check_tree(right)
|
|
20
|
+
else:
|
|
21
|
+
return item
|
|
22
|
+
|
|
23
|
+
def main():
|
|
24
|
+
min_depth = 4
|
|
25
|
+
max_depth = max(min_depth + 2, int(argv[1]))
|
|
26
|
+
stretch_depth = max_depth + 1
|
|
27
|
+
|
|
28
|
+
print "stretch tree of depth %d\t check: %d" % (stretch_depth, check_tree(make_tree(0, stretch_depth)))
|
|
29
|
+
|
|
30
|
+
long_lived_tree = make_tree(0, max_depth)
|
|
31
|
+
|
|
32
|
+
for depth in xrange(min_depth, stretch_depth, 2):
|
|
33
|
+
iterations = 2**(max_depth - depth + min_depth)
|
|
34
|
+
|
|
35
|
+
check = 0
|
|
36
|
+
for i in xrange(1, iterations + 1):
|
|
37
|
+
check += check_tree(make_tree(i, depth)) + check_tree(make_tree(-i, depth))
|
|
38
|
+
|
|
39
|
+
print "%d\t trees of depth %d\t check: %d" % (iterations * 2, depth, check)
|
|
40
|
+
|
|
41
|
+
print "long lived tree of depth %d\t check: %d" % (max_depth, check_tree(long_lived_tree))
|
|
42
|
+
|
|
43
|
+
if __name__ == '__main__':
|
|
44
|
+
main()
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# The Computer Language Benchmarks Game
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
# contributed by Tobias Polzin, translated from Mike Pall's Lua program
|
|
4
|
+
# modified by Josh Goldfoot to use ifs for the complement routine
|
|
5
|
+
# modified by Heinrich Acker
|
|
6
|
+
|
|
7
|
+
import sys
|
|
8
|
+
|
|
9
|
+
N = int(sys.argv[1])
|
|
10
|
+
first = second = None
|
|
11
|
+
meetings = 0
|
|
12
|
+
|
|
13
|
+
RED, BLUE, YELLOW = range(1,4)
|
|
14
|
+
|
|
15
|
+
# Create a very social creature.
|
|
16
|
+
def creature(me):
|
|
17
|
+
global N, first, second, meetings
|
|
18
|
+
met = 0
|
|
19
|
+
while 1:
|
|
20
|
+
# Meet another creature.
|
|
21
|
+
|
|
22
|
+
# Wait until meeting place clears.
|
|
23
|
+
while second:
|
|
24
|
+
yield None
|
|
25
|
+
|
|
26
|
+
other = first
|
|
27
|
+
if other:
|
|
28
|
+
# Hey, I found a new friend!
|
|
29
|
+
second = me
|
|
30
|
+
else:
|
|
31
|
+
# Sniff, nobody here (yet).
|
|
32
|
+
if N <= 0:
|
|
33
|
+
# Uh oh, the mall is closed.
|
|
34
|
+
meetings += met
|
|
35
|
+
yield None
|
|
36
|
+
|
|
37
|
+
# The mall was closed, so everyone is faded.
|
|
38
|
+
print meetings
|
|
39
|
+
sys.exit()
|
|
40
|
+
|
|
41
|
+
N -= 1
|
|
42
|
+
first = me
|
|
43
|
+
while not second:
|
|
44
|
+
yield None # Wait for another creature.
|
|
45
|
+
other = second
|
|
46
|
+
|
|
47
|
+
first = second = None
|
|
48
|
+
yield None
|
|
49
|
+
|
|
50
|
+
# perform meeting
|
|
51
|
+
met += 1
|
|
52
|
+
if me != other:
|
|
53
|
+
if me == BLUE:
|
|
54
|
+
me = other == RED and YELLOW or RED
|
|
55
|
+
elif me == RED:
|
|
56
|
+
me = other == BLUE and YELLOW or BLUE
|
|
57
|
+
else:
|
|
58
|
+
me = other == BLUE and RED or BLUE
|
|
59
|
+
|
|
60
|
+
# Trivial round-robin scheduler.
|
|
61
|
+
def schedule(threads):
|
|
62
|
+
while 1:
|
|
63
|
+
for thread in threads:
|
|
64
|
+
thread()
|
|
65
|
+
|
|
66
|
+
# A bunch of colorful creatures.
|
|
67
|
+
threads = [
|
|
68
|
+
creature(BLUE).next,
|
|
69
|
+
creature(RED).next,
|
|
70
|
+
creature(YELLOW).next,
|
|
71
|
+
creature(BLUE).next]
|
|
72
|
+
|
|
73
|
+
schedule(threads)
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# The Computer Language Benchmarks Game
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
# contributed by Tupteq
|
|
4
|
+
#
|
|
5
|
+
# Based on codes from PDF and Nice #3 version.
|
|
6
|
+
# Before use of threading.Condition I tried semaphores (code similar to
|
|
7
|
+
# C code from PDF), but it was slower.
|
|
8
|
+
|
|
9
|
+
from __future__ import with_statement # Required until Python 2.6
|
|
10
|
+
|
|
11
|
+
import sys
|
|
12
|
+
from threading import Thread, Condition
|
|
13
|
+
|
|
14
|
+
# Constatnts
|
|
15
|
+
all_colors = blue, red, yellow = "blue", "red", "yellow"
|
|
16
|
+
stop = 0, blue # Stop condition
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def complement(c1, c2):
|
|
20
|
+
# I used 'is' except '==' here, it's faster
|
|
21
|
+
return (c1 if c1 is c2
|
|
22
|
+
else (yellow if c2 is red else red) if c1 is blue
|
|
23
|
+
else (yellow if c2 is blue else blue) if c1 is red
|
|
24
|
+
else (red if c2 is blue else blue))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def print_color_changes():
|
|
28
|
+
# Print complement for each combination
|
|
29
|
+
for c1 in all_colors:
|
|
30
|
+
for c2 in all_colors:
|
|
31
|
+
print "%s + %s -> %s" % (c1, c2, complement(c1, c2))
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class Mall:
|
|
35
|
+
def __init__(self, n):
|
|
36
|
+
self.first = True
|
|
37
|
+
self.must_wait = False
|
|
38
|
+
self.counter = n
|
|
39
|
+
self.cond = Condition()
|
|
40
|
+
|
|
41
|
+
def notify(self, me):
|
|
42
|
+
# "with" makes all the job (no acquire() and release() needed)
|
|
43
|
+
with self.cond:
|
|
44
|
+
while self.must_wait and self.counter > 0:
|
|
45
|
+
self.cond.wait()
|
|
46
|
+
|
|
47
|
+
if self.first:
|
|
48
|
+
# Creature is first
|
|
49
|
+
self.a = me
|
|
50
|
+
self.first = False
|
|
51
|
+
|
|
52
|
+
while not self.first and self.counter > 0:
|
|
53
|
+
self.cond.wait()
|
|
54
|
+
|
|
55
|
+
he = self.b
|
|
56
|
+
self.must_wait = False
|
|
57
|
+
self.cond.notifyAll()
|
|
58
|
+
|
|
59
|
+
self.counter -= 1
|
|
60
|
+
else:
|
|
61
|
+
# Creature is second
|
|
62
|
+
self.b = me
|
|
63
|
+
he = self.a
|
|
64
|
+
self.first = True
|
|
65
|
+
self.must_wait = True
|
|
66
|
+
self.cond.notifyAll()
|
|
67
|
+
|
|
68
|
+
return he if self.counter >= 0 else stop
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class Creature(Thread):
|
|
72
|
+
def __init__(self, name, color, mall):
|
|
73
|
+
# Thread initialization, thread built in name is not used
|
|
74
|
+
Thread.__init__(self)
|
|
75
|
+
self.name = name
|
|
76
|
+
self.color = color
|
|
77
|
+
self.mall = mall
|
|
78
|
+
self.self_met = 0
|
|
79
|
+
self.met = 0
|
|
80
|
+
|
|
81
|
+
def run(self):
|
|
82
|
+
while 1:
|
|
83
|
+
# Go to meeting place
|
|
84
|
+
his_name, his_color = self.mall.notify((self.name, self.color))
|
|
85
|
+
if his_name == 0:
|
|
86
|
+
break
|
|
87
|
+
|
|
88
|
+
# Change color and increment counters
|
|
89
|
+
self.color = complement(self.color, his_color)
|
|
90
|
+
if self.name is his_name:
|
|
91
|
+
self.self_met += 1
|
|
92
|
+
self.met += 1
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def simulate(colors, n):
|
|
96
|
+
# Prepare and execute simulation
|
|
97
|
+
r = Mall(n)
|
|
98
|
+
creatures = [Creature(i+1, color, r) for i, color in enumerate(colors)]
|
|
99
|
+
for c in creatures:
|
|
100
|
+
c.start()
|
|
101
|
+
for c in creatures:
|
|
102
|
+
c.join()
|
|
103
|
+
|
|
104
|
+
# Prepare spellout function
|
|
105
|
+
numbers = ("zero", "one", "two", "three", "four",
|
|
106
|
+
"five", "six", "seven", "eight", "nine")
|
|
107
|
+
def spellout(i):
|
|
108
|
+
return " " + " ".join(numbers[int(x)] for x in str(i))
|
|
109
|
+
|
|
110
|
+
# Print results
|
|
111
|
+
print
|
|
112
|
+
print " " + " ".join(colors)
|
|
113
|
+
sum = 0
|
|
114
|
+
for c in creatures:
|
|
115
|
+
sum += c.met
|
|
116
|
+
print str(c.met) + spellout(c.self_met)
|
|
117
|
+
print spellout(sum)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def main():
|
|
121
|
+
n = int(sys.argv[1])
|
|
122
|
+
print_color_changes()
|
|
123
|
+
simulate([blue, red, yellow], n)
|
|
124
|
+
simulate([blue, red, yellow, red, yellow, blue, red, yellow, red, blue], n)
|
|
125
|
+
|
|
126
|
+
main()
|