chrislo-sourceclassifier 0.2.0 → 0.2.1
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 +0 -312
- data/Rakefile +2 -2
- data/sourceclassifier.gemspec +6 -6
- metadata +4 -316
- data/sources/gcc/ackermann.gcc-2.gcc +0 -93
- data/sources/gcc/ackermann.gcc-3.gcc +0 -20
- data/sources/gcc/ary.gcc +0 -40
- data/sources/gcc/binarytrees.gcc +0 -136
- data/sources/gcc/binarytrees.gcc-2.gcc +0 -140
- data/sources/gcc/binarytrees.gcc-3.gcc +0 -134
- data/sources/gcc/chameneos.gcc +0 -117
- data/sources/gcc/chameneos.gcc-2.gcc +0 -134
- data/sources/gcc/chameneos.gcc-3.gcc +0 -120
- data/sources/gcc/chameneosredux.gcc +0 -306
- data/sources/gcc/echo.gcc +0 -144
- data/sources/gcc/except.gcc +0 -52
- data/sources/gcc/fannkuch.gcc +0 -105
- data/sources/gcc/fannkuch.gcc-2.gcc +0 -94
- data/sources/gcc/fasta.gcc +0 -158
- data/sources/gcc/fasta.gcc-2.gcc +0 -132
- data/sources/gcc/fasta.gcc-3.gcc +0 -145
- data/sources/gcc/fasta.gcc-4.gcc +0 -141
- data/sources/gcc/fibo.gcc +0 -20
- data/sources/gcc/harmonic.gcc +0 -22
- data/sources/gcc/hash.gcc +0 -31
- data/sources/gcc/hash2.gcc +0 -38
- data/sources/gcc/heapsort.gcc +0 -72
- data/sources/gcc/hello.gcc-2.gcc +0 -12
- data/sources/gcc/hello.gcc-3.gcc +0 -20
- data/sources/gcc/knucleotide.gcc +0 -173
- data/sources/gcc/knucleotide.gcc-2.gcc +0 -168
- data/sources/gcc/lists.gcc +0 -226
- data/sources/gcc/magicsquares.gcc +0 -378
- data/sources/gcc/mandelbrot.gcc +0 -84
- data/sources/gcc/mandelbrot.gcc-2.gcc +0 -63
- data/sources/gcc/mandelbrot.gcc-3.gcc +0 -91
- data/sources/gcc/mandelbrot.gcc-4.gcc +0 -78
- data/sources/gcc/matrix.gcc +0 -66
- data/sources/gcc/message.gcc-2.gcc +0 -72
- data/sources/gcc/message.gcc-3.gcc +0 -64
- data/sources/gcc/methcall.gcc +0 -89
- data/sources/gcc/moments.gcc +0 -120
- data/sources/gcc/nbody.gcc +0 -142
- data/sources/gcc/nbody.gcc-2.gcc +0 -143
- data/sources/gcc/nbody.gcc-3.gcc +0 -142
- data/sources/gcc/nestedloop.gcc +0 -25
- data/sources/gcc/nsieve.gcc +0 -35
- data/sources/gcc/nsievebits.gcc-2.gcc +0 -37
- data/sources/gcc/nsievebits.gcc-3.gcc +0 -53
- data/sources/gcc/objinst.gcc +0 -95
- data/sources/gcc/partialsums.gcc +0 -86
- data/sources/gcc/partialsums.gcc-3.gcc +0 -81
- data/sources/gcc/partialsums.gcc-4.gcc +0 -68
- data/sources/gcc/pidigits.gcc +0 -105
- data/sources/gcc/primes.gcc +0 -75
- data/sources/gcc/prodcons.gcc +0 -86
- data/sources/gcc/random.gcc +0 -29
- data/sources/gcc/raytracer.gcc +0 -125
- data/sources/gcc/raytracer.gcc-2.gcc +0 -181
- data/sources/gcc/recursive.gcc +0 -68
- data/sources/gcc/recursive.gcc-2.gcc +0 -55
- data/sources/gcc/regexdna.gcc-2.gcc +0 -126
- data/sources/gcc/regexmatch.gcc +0 -136
- data/sources/gcc/revcomp.gcc +0 -85
- data/sources/gcc/revcomp.gcc-2.gcc +0 -88
- data/sources/gcc/revcomp.gcc-4.gcc +0 -71
- data/sources/gcc/reversefile.gcc +0 -103
- data/sources/gcc/reversefile.gcc-2.gcc +0 -56
- data/sources/gcc/sieve.gcc +0 -34
- data/sources/gcc/spectralnorm.gcc +0 -54
- data/sources/gcc/spellcheck.gcc +0 -72
- data/sources/gcc/spellcheck.gcc-2.gcc +0 -61
- data/sources/gcc/strcat.gcc +0 -38
- data/sources/gcc/sumcol.gcc-2.gcc +0 -98
- data/sources/gcc/sumcol.gcc-3.gcc +0 -22
- data/sources/gcc/sumcol.gcc-4.gcc +0 -18
- data/sources/gcc/sumcol.gcc-5.gcc +0 -32
- data/sources/gcc/takfp.gcc +0 -23
- data/sources/gcc/tcp-stream.gcc +0 -122
- data/sources/gcc/tcpecho.gcc +0 -122
- data/sources/gcc/tcpecho.gcc-2.gcc +0 -136
- data/sources/gcc/tcprequest.gcc +0 -122
- data/sources/gcc/threadring.gcc +0 -73
- data/sources/gcc/wc.gcc +0 -52
- data/sources/gcc/wc.gcc-2.gcc +0 -40
- data/sources/gcc/wc.gcc-3.gcc +0 -46
- data/sources/gcc/wordfreq.gcc-2.gcc +0 -85
- data/sources/perl/ackermann.perl +0 -28
- data/sources/perl/ackermann.perl-2.perl +0 -25
- data/sources/perl/ackermann.perl-3.perl +0 -20
- data/sources/perl/ackermann.perl-4.perl +0 -18
- data/sources/perl/ary.perl +0 -25
- data/sources/perl/ary.perl-2.perl +0 -23
- data/sources/perl/binarytrees.perl +0 -66
- data/sources/perl/binarytrees.perl-2.perl +0 -71
- data/sources/perl/chameneos.perl +0 -67
- data/sources/perl/echo.perl +0 -81
- data/sources/perl/except.perl +0 -73
- data/sources/perl/fannkuch.perl +0 -44
- data/sources/perl/fannkuch.perl-2.perl +0 -38
- data/sources/perl/fasta.perl +0 -112
- data/sources/perl/fasta.perl-2.perl +0 -135
- data/sources/perl/fasta.perl-4.perl +0 -122
- data/sources/perl/fibo.perl +0 -15
- data/sources/perl/fibo.perl-2.perl +0 -0
- data/sources/perl/fibo.perl-3.perl +0 -0
- data/sources/perl/harmonic.perl +0 -7
- data/sources/perl/hash.perl +0 -23
- data/sources/perl/hash.perl-2.perl +0 -17
- data/sources/perl/hash.perl-3.perl +0 -24
- data/sources/perl/hash2.perl +0 -16
- data/sources/perl/heapsort.perl +0 -65
- data/sources/perl/heapsort.perl-2.perl +0 -0
- data/sources/perl/hello.perl +0 -5
- data/sources/perl/knucleotide.perl-2.perl +0 -30
- data/sources/perl/lists.perl +0 -48
- data/sources/perl/mandelbrot.perl-2.perl +0 -32
- data/sources/perl/matrix.perl +0 -59
- data/sources/perl/matrix.perl-2.perl +0 -0
- data/sources/perl/matrix.perl-3.perl +0 -0
- data/sources/perl/message.perl +0 -27
- data/sources/perl/methcall.perl +0 -66
- data/sources/perl/moments.perl +0 -44
- data/sources/perl/nbody.perl +0 -108
- data/sources/perl/nestedloop.perl +0 -28
- data/sources/perl/nsieve.perl-2.perl +0 -41
- data/sources/perl/nsieve.perl-4.perl +0 -43
- data/sources/perl/nsievebits.perl +0 -37
- data/sources/perl/objinst.perl +0 -73
- data/sources/perl/partialsums.perl-3.perl +0 -31
- data/sources/perl/pidigits.perl +0 -52
- data/sources/perl/pidigits.perl-2.perl +0 -47
- data/sources/perl/process.perl +0 -50
- data/sources/perl/prodcons.perl +0 -47
- data/sources/perl/random.perl-4.perl +0 -17
- data/sources/perl/recursive.perl-2.perl +0 -57
- data/sources/perl/regexdna.perl +0 -48
- data/sources/perl/regexdna.perl-2.perl +0 -43
- data/sources/perl/regexdna.perl-3.perl +0 -50
- data/sources/perl/regexdna.perl-4.perl +0 -49
- data/sources/perl/regexdna.perl-5.perl +0 -42
- data/sources/perl/regexdna.perl-6.perl +0 -43
- data/sources/perl/regexmatch.perl +0 -35
- data/sources/perl/revcomp.perl-2.perl +0 -34
- data/sources/perl/reversefile.perl +0 -8
- data/sources/perl/reversefile.perl-2.perl +0 -0
- data/sources/perl/reversefile.perl-3.perl +0 -0
- data/sources/perl/sieve.perl +0 -23
- data/sources/perl/spectralnorm.perl-2.perl +0 -54
- data/sources/perl/spellcheck.perl +0 -24
- data/sources/perl/strcat.perl +0 -13
- data/sources/perl/strcat.perl-2.perl +0 -0
- data/sources/perl/sumcol.perl +0 -8
- data/sources/perl/takfp.perl +0 -23
- data/sources/perl/takfp.perl-3.perl +0 -20
- data/sources/perl/tcpecho.perl +0 -61
- data/sources/perl/tcprequest.perl +0 -61
- data/sources/perl/tcpstream.perl +0 -61
- data/sources/perl/threadring.perl +0 -55
- data/sources/perl/threadring.perl-2.perl +0 -43
- data/sources/perl/wc.perl +0 -20
- data/sources/perl/wc.perl-2.perl +0 -14
- data/sources/perl/wordfreq.perl +0 -22
- data/sources/perl/wordfreq.perl-3.perl +0 -0
- data/sources/perl/wordfreq.perl3.perl +0 -0
- data/sources/python/ackermann.python +0 -21
- data/sources/python/ary.python +0 -19
- data/sources/python/binarytrees.python +0 -39
- data/sources/python/binarytrees.python-3.python +0 -44
- data/sources/python/chameneos.python-6.python +0 -73
- data/sources/python/chameneosredux.python +0 -126
- data/sources/python/chameneosredux.python-2.python +0 -122
- data/sources/python/dispatch.python +0 -176
- data/sources/python/dispatch.python-2.python +0 -136
- data/sources/python/echo.python +0 -64
- data/sources/python/except.python +0 -62
- data/sources/python/fannkuch.python +0 -50
- data/sources/python/fannkuch.python-2.python +0 -54
- data/sources/python/fasta.python-2.python +0 -79
- data/sources/python/fibo.python +0 -17
- 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 +0 -9
- data/sources/python/hash.python +0 -21
- data/sources/python/hash.python-2.python +0 -0
- data/sources/python/hash2.python +0 -30
- data/sources/python/heapsort.python-3.python +0 -66
- data/sources/python/hello.python +0 -5
- data/sources/python/implicitode.python +0 -231
- data/sources/python/knucleotide.python +0 -55
- data/sources/python/lists.python +0 -44
- data/sources/python/magicsquares.python +0 -145
- data/sources/python/mandelbrot.python +0 -44
- data/sources/python/mandelbrot.python-2.python +0 -35
- data/sources/python/mandelbrot.python-3.python +0 -46
- data/sources/python/matrix.python +0 -34
- data/sources/python/matrix.python-2.python +0 -23
- data/sources/python/message.python +0 -24
- data/sources/python/message.python-2.python +0 -20
- data/sources/python/message.python-3.python +0 -19
- data/sources/python/meteor.python +0 -210
- data/sources/python/meteor.python-2.python +0 -192
- data/sources/python/methcall.python +0 -51
- data/sources/python/moments.python +0 -65
- data/sources/python/nbody.python +0 -123
- data/sources/python/nbody.python-2.python +0 -120
- data/sources/python/nestedloop.python +0 -24
- data/sources/python/nsieve.python +0 -27
- data/sources/python/nsieve.python-2.python +0 -23
- data/sources/python/nsieve.python-4.python +0 -25
- data/sources/python/nsievebits.python +0 -27
- data/sources/python/nsievebits.python-2.python +0 -43
- data/sources/python/objinst.python +0 -53
- data/sources/python/partialsums.python +0 -37
- data/sources/python/partialsums.python-2.python +0 -35
- data/sources/python/partialsums.python-3.python +0 -48
- data/sources/python/pidigits.python +0 -38
- data/sources/python/pidigits.python-3.python +0 -63
- data/sources/python/pidigits.python-4.python +0 -24
- data/sources/python/process.python +0 -51
- data/sources/python/process.python-2.python +0 -133
- data/sources/python/prodcons.python +0 -51
- data/sources/python/prodcons.python-2.python +0 -0
- data/sources/python/random.python +0 -27
- data/sources/python/raytracer.python +0 -203
- data/sources/python/recursive.python +0 -35
- data/sources/python/regexdna.python +0 -39
- data/sources/python/regexdna.python-2.python +0 -34
- data/sources/python/regexmatch.python +0 -36
- data/sources/python/revcomp.python-3.python +0 -31
- data/sources/python/reversefile.python +0 -13
- data/sources/python/reversefile.python-2.python +0 -0
- data/sources/python/reversefile.python-3.python +0 -0
- data/sources/python/sieve.python +0 -50
- data/sources/python/spectralnorm.python-2.python +0 -36
- data/sources/python/spellcheck.python +0 -17
- data/sources/python/strcat.python +0 -35
- 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 +0 -19
- data/sources/python/tcpecho.python +0 -67
- data/sources/python/tcprequest.python +0 -67
- data/sources/python/tcpstream.python +0 -67
- data/sources/python/threadring.python +0 -47
- data/sources/python/threadring.python-2.python +0 -40
- data/sources/python/threadring.python-3.python +0 -34
- data/sources/python/wc.python-2.python +0 -19
- data/sources/python/wordfreq.python +0 -43
- data/sources/python/wordfreq.python-2.python +0 -0
- data/sources/python/wordfreq.python-3.python +0 -28
- data/sources/python/wordfreq.python-4.python +0 -38
- data/sources/python/wordfreq.python-5.python +0 -39
- data/sources/ruby/ackermann.ruby +0 -17
- data/sources/ruby/ackermann.ruby-5.ruby +0 -153
- data/sources/ruby/ary.ruby +0 -22
- data/sources/ruby/binarytrees.ruby-2.ruby +0 -55
- data/sources/ruby/chameneos.ruby-2.ruby +0 -71
- data/sources/ruby/dispatch.ruby +0 -114
- data/sources/ruby/echo.ruby +0 -41
- data/sources/ruby/except.ruby +0 -61
- data/sources/ruby/except.ruby-2.ruby +0 -61
- data/sources/ruby/fannkuch.ruby +0 -42
- data/sources/ruby/fasta.ruby +0 -81
- data/sources/ruby/fibo.ruby +0 -15
- data/sources/ruby/harmonic.ruby-2.ruby +0 -15
- data/sources/ruby/hash.ruby +0 -19
- data/sources/ruby/hash2.ruby +0 -23
- data/sources/ruby/heapsort.ruby +0 -55
- data/sources/ruby/hello.ruby +0 -6
- data/sources/ruby/knucleotide.ruby-2.ruby +0 -44
- data/sources/ruby/lists.ruby +0 -46
- data/sources/ruby/mandelbrot.ruby-3.ruby +0 -63
- data/sources/ruby/matrix.ruby +0 -40
- data/sources/ruby/matrix.ruby-2.ruby +0 -30
- data/sources/ruby/message.ruby +0 -29
- data/sources/ruby/message.ruby-2.ruby +0 -24
- data/sources/ruby/meteor.ruby +0 -386
- data/sources/ruby/meteor.ruby-2.ruby +0 -561
- data/sources/ruby/methcall.ruby +0 -58
- data/sources/ruby/methcall.ruby-2.ruby +0 -54
- data/sources/ruby/moments.ruby +0 -64
- data/sources/ruby/nbody.ruby-2.ruby +0 -145
- data/sources/ruby/nestedloop.ruby +0 -22
- data/sources/ruby/nsieve.ruby +0 -36
- data/sources/ruby/nsieve.ruby-2.ruby +0 -25
- data/sources/ruby/nsievebits.ruby-2.ruby +0 -42
- data/sources/ruby/objinst.ruby +0 -58
- data/sources/ruby/partialsums.ruby +0 -39
- data/sources/ruby/pidigits.ruby +0 -92
- data/sources/ruby/pidigits.ruby-2.ruby +0 -109
- data/sources/ruby/prodcons.ruby +0 -41
- data/sources/ruby/random.ruby +0 -17
- data/sources/ruby/recursive.ruby-2.ruby +0 -53
- data/sources/ruby/regexdna.ruby +0 -32
- data/sources/ruby/regexdna.ruby-2.ruby +0 -38
- data/sources/ruby/regexmatch.ruby +0 -33
- data/sources/ruby/revcomp.ruby +0 -28
- data/sources/ruby/reversefile.ruby +0 -7
- data/sources/ruby/sieve.ruby +0 -30
- data/sources/ruby/spectralnorm.ruby +0 -48
- data/sources/ruby/spellcheck.ruby +0 -18
- data/sources/ruby/spellcheck.ruby-2.ruby +0 -0
- data/sources/ruby/strcat.ruby +0 -12
- data/sources/ruby/strcat.ruby-2.ruby +0 -12
- data/sources/ruby/sumcol.ruby +0 -12
- data/sources/ruby/sumcol.ruby-2.ruby +0 -5
- data/sources/ruby/takfp.ruby +0 -15
- data/sources/ruby/tcpecho.ruby +0 -45
- data/sources/ruby/tcprequest.ruby +0 -45
- data/sources/ruby/tcpstream.ruby +0 -45
- data/sources/ruby/threadring.ruby +0 -61
- data/sources/ruby/threadring.ruby-2.ruby +0 -33
- data/sources/ruby/wc.ruby +0 -15
- data/sources/ruby/wordfreq.ruby +0 -17
- data/sources/ruby/wordfreq.ruby2.ruby +0 -0
data/sources/gcc/raytracer.gcc
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
/* -*- mode: c -*-
|
|
2
|
-
* The Great Computer Language Shootout
|
|
3
|
-
* http://shootout.alioth.debian.org/
|
|
4
|
-
*
|
|
5
|
-
* Jon Harrop, 2005
|
|
6
|
-
* Compile: gcc -Wall -O3 -ffast-math -lm -std=c99 raytracer.c -o raytracer
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
#include <float.h>
|
|
11
|
-
#include <math.h>
|
|
12
|
-
#include <stdlib.h>
|
|
13
|
-
#include <stdio.h>
|
|
14
|
-
|
|
15
|
-
double delta;
|
|
16
|
-
|
|
17
|
-
typedef struct { double x, y, z; } Vec;
|
|
18
|
-
Vec vec(double ix, double iy, double iz)
|
|
19
|
-
{ Vec a; a.x = ix; a.y = iy; a.z = iz; return a; }
|
|
20
|
-
Vec add(Vec a, Vec b) { return vec(a.x + b.x, a.y + b.y, a.z + b.z); }
|
|
21
|
-
Vec sub(Vec a, Vec b) { return vec(a.x - b.x, a.y - b.y, a.z - b.z); }
|
|
22
|
-
Vec scale(double a, Vec b) { return vec(a * b.x, a * b.y, a * b.z); }
|
|
23
|
-
double dot(Vec a, Vec b) { return a.x*b.x + a.y*b.y + a.z*b.z; }
|
|
24
|
-
Vec unitise(Vec a) { return scale(1 / sqrt(dot(a, a)), a); }
|
|
25
|
-
|
|
26
|
-
typedef struct { Vec orig, dir; } Ray;
|
|
27
|
-
Ray ray(Vec o, Vec d) { Ray r; r.orig = o; r.dir = d; return r; }
|
|
28
|
-
|
|
29
|
-
typedef enum {SphereTag, GroupTag} Tag;
|
|
30
|
-
typedef struct { Vec center; double radius; } Sphere;
|
|
31
|
-
Sphere sphere(Vec c, double r) { Sphere s; s.center=c; s.radius=r; return s; }
|
|
32
|
-
typedef struct { Sphere bound; int n; void *child; } Group;
|
|
33
|
-
typedef struct { Tag tag; union { Sphere s; Group g; } data; } Scene;
|
|
34
|
-
|
|
35
|
-
double ray_sphere(const Ray *r, const Sphere *s) {
|
|
36
|
-
Vec v = sub(s->center, r->orig);
|
|
37
|
-
double b = dot(v, r->dir), disc = b*b - dot(v, v) + s->radius * s->radius;
|
|
38
|
-
if (disc < 0) return INFINITY;
|
|
39
|
-
double d = sqrt(disc), t2 = b + d;
|
|
40
|
-
if (t2 < 0) return INFINITY;
|
|
41
|
-
double t1 = b - d;
|
|
42
|
-
return (t1 > 0 ? t1 : t2);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
void intersect(double *lambda, Vec *normal, const Ray *r, const Scene scene) {
|
|
46
|
-
switch (scene.tag) {
|
|
47
|
-
case SphereTag : {
|
|
48
|
-
Sphere s = scene.data.s;
|
|
49
|
-
double l = ray_sphere(r, &s);
|
|
50
|
-
if (l >= *lambda) return;
|
|
51
|
-
*lambda = l;
|
|
52
|
-
*normal = unitise(add(r->orig, sub(scale(l, r->dir), s.center)));
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
case GroupTag : {
|
|
56
|
-
Group g = scene.data.g;
|
|
57
|
-
if (ray_sphere(r, &g.bound) >= *lambda) return;
|
|
58
|
-
for (int i=0; i<g.n; ++i)
|
|
59
|
-
intersect(lambda, normal, r, ((Scene *)g.child)[i]);
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
double ray_trace(Vec light, Ray r, Scene scene) {
|
|
66
|
-
double lambda = INFINITY;
|
|
67
|
-
Vec n = vec(0, 0, 0);
|
|
68
|
-
intersect(&lambda, &n, &r, scene);
|
|
69
|
-
if (lambda == INFINITY) return 0;
|
|
70
|
-
double g = dot(n, light), l = INFINITY;
|
|
71
|
-
if (g <= 0) return 0.;
|
|
72
|
-
Ray r2 = ray(add(r.orig, scale(lambda, add(r.dir, scale(delta, n)))),
|
|
73
|
-
light);
|
|
74
|
-
intersect(&l, &n, &r2, scene);
|
|
75
|
-
return (l == INFINITY ? g : 0);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
Scene create(int level, double r, double x, double y, double z) {
|
|
79
|
-
Scene scene;
|
|
80
|
-
if (level == 1) {
|
|
81
|
-
scene.tag = SphereTag;
|
|
82
|
-
scene.data.s = sphere(vec(x, y, z), r);
|
|
83
|
-
} else {
|
|
84
|
-
Group *g = &scene.data.g;
|
|
85
|
-
Scene *cs;
|
|
86
|
-
scene.tag = GroupTag;
|
|
87
|
-
g->bound = sphere(vec(x, y, z), 3*r);
|
|
88
|
-
g->n = 5;
|
|
89
|
-
g->child = cs = (Scene *)malloc(g->n * sizeof(Scene));
|
|
90
|
-
double rn = 3*r/sqrt(12.);
|
|
91
|
-
for (int i=0; i<4; ++i)
|
|
92
|
-
cs[i] = create(level-1, r/2,
|
|
93
|
-
x - ((i&1)*2-1)*rn, y + rn, z - ((i/2)*2-1)*rn);
|
|
94
|
-
cs[g->n - 1] = create(1, r, x, y, z);
|
|
95
|
-
}
|
|
96
|
-
return scene;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
void destroy(Scene scene) {
|
|
100
|
-
if (scene.tag == GroupTag) {
|
|
101
|
-
for (int i=0; i<scene.data.g.n; ++i)
|
|
102
|
-
destroy(((Scene *)scene.data.g.child)[i]);
|
|
103
|
-
free(scene.data.g.child);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
int main(int argc, char *argv[]) {
|
|
108
|
-
delta = sqrt(DBL_EPSILON);
|
|
109
|
-
int level = 6, n = (argc==2 ? atoi(argv[1]) : 256), ss = 4;
|
|
110
|
-
Vec light = sub(vec(0, 0, 0), unitise(vec(-1, -3, 2)));
|
|
111
|
-
Scene scene = create(level, 1, 0, -1, 0); // Build the scene
|
|
112
|
-
printf("P5\n%d %d\n255\n", n, n);
|
|
113
|
-
for (int y=n-1; y>=0; --y)
|
|
114
|
-
for (int x=0; x<n; ++x) {
|
|
115
|
-
double g=0;
|
|
116
|
-
for (int dx=0; dx<ss; ++dx)
|
|
117
|
-
for (int dy=0; dy<ss; ++dy) {
|
|
118
|
-
Vec d=vec(x+(double)dx/ss-n/2., y+(double)dy/ss-n/2., n);
|
|
119
|
-
g += ray_trace(light, ray(vec(0, 0, -4), unitise(d)), scene);
|
|
120
|
-
}
|
|
121
|
-
printf("%c", (char)(.5 + 255*g/(ss*ss)));
|
|
122
|
-
}
|
|
123
|
-
destroy(scene);
|
|
124
|
-
return 0;
|
|
125
|
-
}
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
#include <stdlib.h>
|
|
2
|
-
#include <stdio.h>
|
|
3
|
-
#include <math.h>
|
|
4
|
-
#include <float.h>
|
|
5
|
-
|
|
6
|
-
#ifndef INFINITY
|
|
7
|
-
# define INFINITY DBL_MAX
|
|
8
|
-
#endif
|
|
9
|
-
|
|
10
|
-
#define DELTA 1.49012e-08
|
|
11
|
-
|
|
12
|
-
typedef struct { double x, y, z; } Vec;
|
|
13
|
-
static __inline__ Vec vec(double ix, double iy, double iz)
|
|
14
|
-
{ Vec a; a.x = ix; a.y = iy; a.z = iz; return a; }
|
|
15
|
-
static __inline__ Vec add(Vec a, Vec b) { return vec(a.x + b.x, a.y + b.y, a.z + b.z); }
|
|
16
|
-
static __inline__ Vec sub(Vec a, Vec b) { return vec(a.x - b.x, a.y - b.y, a.z - b.z); }
|
|
17
|
-
static __inline__ Vec scale(double a, Vec b) { return vec(a * b.x, a * b.y, a * b.z); }
|
|
18
|
-
static __inline__ double dot(Vec a, Vec b) { return a.x*b.x + a.y*b.y + a.z*b.z; }
|
|
19
|
-
static __inline__ Vec unitise(Vec a) { return scale(1 / sqrt(dot(a, a)), a); }
|
|
20
|
-
|
|
21
|
-
typedef struct { Vec orig, dir; } Ray;
|
|
22
|
-
static __inline__ Ray ray(Vec o, Vec d) { Ray r; r.orig = o; r.dir = d; return r; }
|
|
23
|
-
|
|
24
|
-
typedef struct _tSphere Sphere;
|
|
25
|
-
typedef struct _tGroup Group;
|
|
26
|
-
typedef struct _tScene_Object Scene;
|
|
27
|
-
|
|
28
|
-
#define SCENE_OBJECT(T) \
|
|
29
|
-
void (*intersect) (T*, double *, Vec *, const Ray *); \
|
|
30
|
-
void (*destroy) (T *)
|
|
31
|
-
|
|
32
|
-
struct _tScene_Object
|
|
33
|
-
{
|
|
34
|
-
SCENE_OBJECT(Scene);
|
|
35
|
-
};
|
|
36
|
-
static Scene *scene_new (int, double, double, double, double);
|
|
37
|
-
|
|
38
|
-
struct _tSphere
|
|
39
|
-
{
|
|
40
|
-
SCENE_OBJECT(Sphere);
|
|
41
|
-
Vec center; double radius;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
static __inline__ double ray_sphere (const Ray *r, const Sphere *s)
|
|
45
|
-
{
|
|
46
|
-
double d, t1, t2;
|
|
47
|
-
Vec v = sub(s->center, r->orig);
|
|
48
|
-
double b = dot(v, r->dir), disc = b*b - dot(v, v) + s->radius * s->radius;
|
|
49
|
-
if (disc < 0) return INFINITY;
|
|
50
|
-
d = sqrt(disc), t2 = b + d;
|
|
51
|
-
if (t2 < 0) return INFINITY;
|
|
52
|
-
t1 = b - d;
|
|
53
|
-
return (t1 > 0 ? t1 : t2);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
static void sphere_intersect (Sphere *s, double *lambda, Vec *normal, const Ray *r)
|
|
57
|
-
{
|
|
58
|
-
double l = ray_sphere(r, s);
|
|
59
|
-
if (l >= *lambda) return;
|
|
60
|
-
*lambda = l;
|
|
61
|
-
*normal = unitise (add(r->orig, sub(scale(l, r->dir), s->center)));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
static void sphere_destroy (Sphere *s)
|
|
65
|
-
{
|
|
66
|
-
free ((char *)s);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
static Sphere *sphere_new (double r, double x, double y, double z)
|
|
70
|
-
{
|
|
71
|
-
Sphere *s = (Sphere *) calloc (1, sizeof (Sphere));
|
|
72
|
-
s->intersect = sphere_intersect;
|
|
73
|
-
s->destroy = sphere_destroy;
|
|
74
|
-
s->center=vec(x,y,z); s->radius=r;
|
|
75
|
-
return s;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
struct _tGroup
|
|
79
|
-
{
|
|
80
|
-
SCENE_OBJECT(Group);
|
|
81
|
-
Sphere *bound;
|
|
82
|
-
#define NUM_GROUP_MEMBERS 5
|
|
83
|
-
Scene *members[NUM_GROUP_MEMBERS];
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
static void group_intersect (Group *g, double *lambda, Vec *normal, const Ray *r)
|
|
87
|
-
{
|
|
88
|
-
int i;
|
|
89
|
-
|
|
90
|
-
if (ray_sphere (r, g->bound) >= *lambda)
|
|
91
|
-
return;
|
|
92
|
-
|
|
93
|
-
for (i = 0; i < NUM_GROUP_MEMBERS; i++)
|
|
94
|
-
{
|
|
95
|
-
Scene *s = g->members[i];
|
|
96
|
-
(*s->intersect) (s, lambda, normal, r);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
static void group_destroy (Group *g)
|
|
101
|
-
{
|
|
102
|
-
int i;
|
|
103
|
-
|
|
104
|
-
(*g->bound->destroy) (g->bound);
|
|
105
|
-
for (i = 0; i < NUM_GROUP_MEMBERS; i++)
|
|
106
|
-
{
|
|
107
|
-
Scene *s = g->members[i];
|
|
108
|
-
(*s->destroy) (s);
|
|
109
|
-
}
|
|
110
|
-
free ((char *)g);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
static Group *group_new (int level, double r, double x, double y, double z)
|
|
114
|
-
{
|
|
115
|
-
static double dz[NUM_GROUP_MEMBERS] = {-1, -1, 1, 1, 0};
|
|
116
|
-
static double dx[NUM_GROUP_MEMBERS] = {-1, 1, -1, 1, 0};
|
|
117
|
-
double rn;
|
|
118
|
-
int i;
|
|
119
|
-
Group *g = (Group *)calloc (1, sizeof (Group));
|
|
120
|
-
g->intersect = group_intersect;
|
|
121
|
-
g->destroy = group_destroy;
|
|
122
|
-
g->bound = sphere_new (3*r, x, y, z);
|
|
123
|
-
rn = 3*r/sqrt(12.0);
|
|
124
|
-
for (i = 0; i < NUM_GROUP_MEMBERS-1; i++)
|
|
125
|
-
g->members[i] = scene_new (level, 0.5*r, x-dx[i]*rn, y+rn, z-dz[i]*rn);
|
|
126
|
-
g->members[NUM_GROUP_MEMBERS-1] = scene_new (1, r, x, y, z);
|
|
127
|
-
|
|
128
|
-
return g;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
static Scene *scene_new (int level, double r, double x, double y, double z)
|
|
132
|
-
{
|
|
133
|
-
if (level == 1)
|
|
134
|
-
return (Scene *) sphere_new (r, x, y, z);
|
|
135
|
-
return (Scene *) group_new (level-1, r, x, y, z);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
static double ray_trace (Vec light, Ray r, Scene *scene)
|
|
140
|
-
{
|
|
141
|
-
double lambda = INFINITY, l, g;
|
|
142
|
-
Ray r2;
|
|
143
|
-
Vec n = vec(0, 0, 0);
|
|
144
|
-
(*scene->intersect) (scene, &lambda, &n, &r);
|
|
145
|
-
if (lambda == INFINITY) return 0.0;
|
|
146
|
-
if ((g = dot(n, light)) <= 0.0)
|
|
147
|
-
return 0.0;
|
|
148
|
-
l = INFINITY;
|
|
149
|
-
r2 = ray(add(r.orig, scale(lambda, add(r.dir, scale(DELTA, n)))), light);
|
|
150
|
-
(*scene->intersect) (scene, &l, &n, &r2);
|
|
151
|
-
return (l == INFINITY ? g : 0.0);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
int main (int argc, char *argv[])
|
|
155
|
-
{
|
|
156
|
-
int x, y, dx, dy, level, n, ss;
|
|
157
|
-
Vec light;
|
|
158
|
-
Scene *scene;
|
|
159
|
-
level = 6, n = (argc==2 ? atoi(argv[1]) : 256), ss = 4;
|
|
160
|
-
light = sub(vec(0, 0, 0), unitise(vec(-1, -3, 2)));
|
|
161
|
-
scene = scene_new (level, 1, 0, -1, 0); /* Build the scene */
|
|
162
|
-
fprintf (stdout, "P5\n%d %d\n255\n", n, n);
|
|
163
|
-
for (y=n-1; y>=0; --y)
|
|
164
|
-
{
|
|
165
|
-
for (x=0; x<n; ++x)
|
|
166
|
-
{
|
|
167
|
-
double g=0.0;
|
|
168
|
-
for (dx=0; dx<ss; ++dx)
|
|
169
|
-
{
|
|
170
|
-
for (dy=0; dy<ss; ++dy)
|
|
171
|
-
{
|
|
172
|
-
Vec d=vec(x+(double)dx/ss-n/2., y+(double)dy/ss-n/2., n);
|
|
173
|
-
g += ray_trace(light, ray(vec(0, 0, -4), unitise(d)), scene);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
putc ((char)(.5 + 255*g/(ss*ss)),stdout);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
(*scene->destroy)(scene);
|
|
180
|
-
return 0;
|
|
181
|
-
}
|
data/sources/gcc/recursive.gcc
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* The Computer Language Benchmarks Game
|
|
3
|
-
* http://shootout.alioth.debian.org/
|
|
4
|
-
|
|
5
|
-
* contributed by bearophile, Jan 24 2006
|
|
6
|
-
* modified by wolfjb, Feb 28 2007
|
|
7
|
-
* modified by alex burlyga, may 16, 2008
|
|
8
|
-
*/
|
|
9
|
-
#include <stdio.h>
|
|
10
|
-
#include <stdlib.h>
|
|
11
|
-
|
|
12
|
-
static inline int ack(register int x, register int y) __attribute__((const));
|
|
13
|
-
static inline int fib(int n) __attribute__((const));
|
|
14
|
-
static inline double fibFP(double n) __attribute__((const));
|
|
15
|
-
static inline int tak(int x, int y, int z) __attribute__((const));
|
|
16
|
-
static inline double takFP(double x, double y, double z) __attribute__((const));
|
|
17
|
-
|
|
18
|
-
static inline int ack(register int x, register int y){
|
|
19
|
-
if (x == 0) {
|
|
20
|
-
return y + 1;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return ack(x - 1, ((y | 0) ? ack(x, y - 1) : 1));
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
static inline int fib(register int n) {
|
|
27
|
-
if (n < 2) {
|
|
28
|
-
return 1;
|
|
29
|
-
}
|
|
30
|
-
return fib(n - 2) + fib(n - 1);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
static inline double fibFP(double n) {
|
|
34
|
-
if (n < 2.0) {
|
|
35
|
-
return 1.0;
|
|
36
|
-
}
|
|
37
|
-
return fibFP(n - 2.0) + fibFP(n - 1.0);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
static inline int tak(register int x, register int y, register int z) {
|
|
41
|
-
if (y < x) {
|
|
42
|
-
return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y));
|
|
43
|
-
}
|
|
44
|
-
return z;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
static inline double takFP(double x, double y, double z) {
|
|
48
|
-
if (y < x)
|
|
49
|
-
return takFP( takFP(x-1.0, y, z), takFP(y-1.0, z, x), takFP(z-1.0, x, y) );
|
|
50
|
-
return z;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
int
|
|
54
|
-
main(int argc, char ** argv) {
|
|
55
|
-
int n = 3;
|
|
56
|
-
|
|
57
|
-
if(argc > 1) {
|
|
58
|
-
n = strtol(argv[1], NULL, 10) - 1;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
printf("Ack(3,%d): %d\n", n + 1, ack(3, n+1));
|
|
62
|
-
printf("Fib(%.1f): %.1f\n", 28.0 + n, fibFP(28.0+n));
|
|
63
|
-
printf("Tak(%d,%d,%d): %d\n", 3 * n, 2 * n, n, tak(3*n, 2*n, n));
|
|
64
|
-
printf("Fib(3): %d\n", fib(3));
|
|
65
|
-
printf("Tak(3.0,2.0,1.0): %.1f\n", takFP(3.0, 2.0, 1.0));
|
|
66
|
-
|
|
67
|
-
return 0;
|
|
68
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* The Computer Language Shootout
|
|
3
|
-
* http://shootout.alioth.debian.org/
|
|
4
|
-
|
|
5
|
-
* contributed by bearophile, Jan 24 2006
|
|
6
|
-
* modified by wolfjb, Feb 28 2007
|
|
7
|
-
*/
|
|
8
|
-
#include <stdio.h>
|
|
9
|
-
|
|
10
|
-
int ack(int x, int y) {
|
|
11
|
-
if (x == 0) {
|
|
12
|
-
return y + 1;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return ack(x - 1, ((y | 0) ? ack(x, y - 1) : 1));
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
int fib(int n) {
|
|
19
|
-
if (n < 2) {
|
|
20
|
-
return 1;
|
|
21
|
-
}
|
|
22
|
-
return fib(n - 2) + fib(n - 1);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
double fibFP(double n) {
|
|
26
|
-
if (n < 2.0) {
|
|
27
|
-
return 1.0;
|
|
28
|
-
}
|
|
29
|
-
return fibFP(n - 2.0) + fibFP(n - 1.0);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
int tak(int x, int y, int z) {
|
|
33
|
-
if (y < x) {
|
|
34
|
-
return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y));
|
|
35
|
-
}
|
|
36
|
-
return z;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
double takFP(double x, double y, double z) {
|
|
40
|
-
if (y < x)
|
|
41
|
-
return takFP( takFP(x-1.0, y, z), takFP(y-1.0, z, x), takFP(z-1.0, x, y) );
|
|
42
|
-
return z;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
int main(int argc, char ** argv) {
|
|
46
|
-
int n = atoi(argv[1]) - 1;
|
|
47
|
-
|
|
48
|
-
printf("Ack(3,%d): %d\n", n + 1, ack(3, n+1));
|
|
49
|
-
printf("Fib(%.1f): %.1f\n", 28.0 + n, fibFP(28.0+n));
|
|
50
|
-
printf("Tak(%d,%d,%d): %d\n", 3 * n, 2 * n, n, tak(3*n, 2*n, n));
|
|
51
|
-
printf("Fib(3): %d\n", fib(3));
|
|
52
|
-
printf("Tak(3.0,2.0,1.0): %.1f\n", takFP(3.0, 2.0, 1.0));
|
|
53
|
-
|
|
54
|
-
return 0;
|
|
55
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
** The Computer Language Shootout
|
|
3
|
-
** http://shootout.alioth.debian.org/
|
|
4
|
-
** contributed by Mike Pall
|
|
5
|
-
**
|
|
6
|
-
** regex-dna benchmark using PCRE
|
|
7
|
-
**
|
|
8
|
-
** compile with:
|
|
9
|
-
** gcc -O3 -fomit-frame-pointer -o regexdna regexdna.c -lpcre
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
#define __USE_STRING_INLINES
|
|
13
|
-
#include <stdio.h>
|
|
14
|
-
#include <string.h>
|
|
15
|
-
#include <stdlib.h>
|
|
16
|
-
#include <pcre.h>
|
|
17
|
-
|
|
18
|
-
typedef struct fbuf {
|
|
19
|
-
char *buf;
|
|
20
|
-
size_t size, len;
|
|
21
|
-
} fbuf_t;
|
|
22
|
-
|
|
23
|
-
static void fb_init(fbuf_t *b)
|
|
24
|
-
{
|
|
25
|
-
b->buf = NULL;
|
|
26
|
-
b->len = b->size = 0;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
static char *fb_need(fbuf_t *b, size_t need)
|
|
30
|
-
{
|
|
31
|
-
need += b->len;
|
|
32
|
-
if (need > b->size) {
|
|
33
|
-
if (b->size == 0) b->size = need;
|
|
34
|
-
else while (need > b->size) b->size += b->size;
|
|
35
|
-
if (!(b->buf = realloc(b->buf, b->size))) exit(1);
|
|
36
|
-
}
|
|
37
|
-
return b->buf+b->len;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
#define FB_MINREAD (3<<16)
|
|
41
|
-
|
|
42
|
-
/* Read all of a stdio stream into dst buffer. */
|
|
43
|
-
static size_t fb_readall(fbuf_t *dst, FILE *fp)
|
|
44
|
-
{
|
|
45
|
-
char *dp;
|
|
46
|
-
int n;
|
|
47
|
-
for (dp = fb_need(dst, FB_MINREAD);
|
|
48
|
-
(n = fread(dp, 1, dst->size-dst->len, fp)) > 0;
|
|
49
|
-
dp = fb_need(dst, FB_MINREAD)) dst->len += n;
|
|
50
|
-
if (ferror(fp)) exit(1);
|
|
51
|
-
return dst->len;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/* Substitute pattern p with replacement r, copying from src to dst buffer. */
|
|
55
|
-
static size_t fb_subst(fbuf_t *dst, fbuf_t *src, const char *p, const char *r)
|
|
56
|
-
{
|
|
57
|
-
pcre *re;
|
|
58
|
-
pcre_extra *re_ex;
|
|
59
|
-
const char *re_e;
|
|
60
|
-
char *dp;
|
|
61
|
-
int re_eo, m[3], pos, rlen, clen;
|
|
62
|
-
if (!(re = pcre_compile(p, PCRE_CASELESS, &re_e, &re_eo, NULL))) exit(1);
|
|
63
|
-
re_ex = pcre_study(re, 0, &re_e);
|
|
64
|
-
for (dst->len = 0, rlen = strlen(r), pos = 0;
|
|
65
|
-
pcre_exec(re, re_ex, src->buf, src->len, pos, 0, m, 3) >= 0;
|
|
66
|
-
pos = m[1]) {
|
|
67
|
-
clen = m[0]-pos;
|
|
68
|
-
dp = fb_need(dst, clen+rlen);
|
|
69
|
-
dst->len += clen+rlen;
|
|
70
|
-
memcpy(dp, src->buf+pos, clen);
|
|
71
|
-
memcpy(dp+clen, r, rlen);
|
|
72
|
-
}
|
|
73
|
-
clen = src->len-pos;
|
|
74
|
-
dp = fb_need(dst, clen);
|
|
75
|
-
dst->len += clen;
|
|
76
|
-
memcpy(dp, src->buf+pos, clen);
|
|
77
|
-
return dst->len;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/* Count all matches with pattern p in src buffer. */
|
|
81
|
-
static int fb_countmatches(fbuf_t *src, const char *p)
|
|
82
|
-
{
|
|
83
|
-
pcre *re;
|
|
84
|
-
pcre_extra *re_ex;
|
|
85
|
-
const char *re_e;
|
|
86
|
-
int re_eo, m[3], pos, count;
|
|
87
|
-
if (!(re = pcre_compile(p, PCRE_CASELESS, &re_e, &re_eo, NULL))) exit(1);
|
|
88
|
-
re_ex = pcre_study(re, 0, &re_e);
|
|
89
|
-
for (count = 0, pos = 0;
|
|
90
|
-
pcre_exec(re, re_ex, src->buf, src->len, pos, 0, m, 3) >= 0;
|
|
91
|
-
pos = m[1]) count++;
|
|
92
|
-
return count;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
static const char *variants[] = {
|
|
96
|
-
"agggtaaa|tttaccct", "[cgt]gggtaaa|tttaccc[acg]",
|
|
97
|
-
"a[act]ggtaaa|tttacc[agt]t", "ag[act]gtaaa|tttac[agt]ct",
|
|
98
|
-
"agg[act]taaa|ttta[agt]cct", "aggg[acg]aaa|ttt[cgt]ccct",
|
|
99
|
-
"agggt[cgt]aa|tt[acg]accct", "agggta[cgt]a|t[acg]taccct",
|
|
100
|
-
"agggtaa[cgt]|[acg]ttaccct", NULL
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
static const char *subst[] = {
|
|
104
|
-
"B", "(c|g|t)", "D", "(a|g|t)", "H", "(a|c|t)", "K", "(g|t)",
|
|
105
|
-
"M", "(a|c)", "N", "(a|c|g|t)", "R", "(a|g)", "S", "(c|g)",
|
|
106
|
-
"V", "(a|c|g)", "W", "(a|t)", "Y", "(c|t)", NULL
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
int main(int argc, char **argv)
|
|
110
|
-
{
|
|
111
|
-
fbuf_t seq[2];
|
|
112
|
-
const char **pp;
|
|
113
|
-
size_t ilen, clen, slen;
|
|
114
|
-
int flip;
|
|
115
|
-
fb_init(&seq[0]);
|
|
116
|
-
fb_init(&seq[1]);
|
|
117
|
-
ilen = fb_readall(&seq[0], stdin);
|
|
118
|
-
clen = fb_subst(&seq[1], &seq[0], ">.*|\n", "");
|
|
119
|
-
for (pp = variants; *pp; pp++)
|
|
120
|
-
printf("%s %d\n", *pp, fb_countmatches(&seq[1], *pp));
|
|
121
|
-
for (slen = 0, flip = 1, pp = subst; *pp; pp += 2, flip = 1-flip)
|
|
122
|
-
slen = fb_subst(&seq[1-flip], &seq[flip], *pp, pp[1]);
|
|
123
|
-
printf("\n%zu\n%zu\n%zu\n", ilen, clen, slen);
|
|
124
|
-
return 0;
|
|
125
|
-
}
|
|
126
|
-
|