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.
Files changed (316) hide show
  1. data/Manifest +0 -312
  2. data/Rakefile +2 -2
  3. data/sourceclassifier.gemspec +6 -6
  4. metadata +4 -316
  5. data/sources/gcc/ackermann.gcc-2.gcc +0 -93
  6. data/sources/gcc/ackermann.gcc-3.gcc +0 -20
  7. data/sources/gcc/ary.gcc +0 -40
  8. data/sources/gcc/binarytrees.gcc +0 -136
  9. data/sources/gcc/binarytrees.gcc-2.gcc +0 -140
  10. data/sources/gcc/binarytrees.gcc-3.gcc +0 -134
  11. data/sources/gcc/chameneos.gcc +0 -117
  12. data/sources/gcc/chameneos.gcc-2.gcc +0 -134
  13. data/sources/gcc/chameneos.gcc-3.gcc +0 -120
  14. data/sources/gcc/chameneosredux.gcc +0 -306
  15. data/sources/gcc/echo.gcc +0 -144
  16. data/sources/gcc/except.gcc +0 -52
  17. data/sources/gcc/fannkuch.gcc +0 -105
  18. data/sources/gcc/fannkuch.gcc-2.gcc +0 -94
  19. data/sources/gcc/fasta.gcc +0 -158
  20. data/sources/gcc/fasta.gcc-2.gcc +0 -132
  21. data/sources/gcc/fasta.gcc-3.gcc +0 -145
  22. data/sources/gcc/fasta.gcc-4.gcc +0 -141
  23. data/sources/gcc/fibo.gcc +0 -20
  24. data/sources/gcc/harmonic.gcc +0 -22
  25. data/sources/gcc/hash.gcc +0 -31
  26. data/sources/gcc/hash2.gcc +0 -38
  27. data/sources/gcc/heapsort.gcc +0 -72
  28. data/sources/gcc/hello.gcc-2.gcc +0 -12
  29. data/sources/gcc/hello.gcc-3.gcc +0 -20
  30. data/sources/gcc/knucleotide.gcc +0 -173
  31. data/sources/gcc/knucleotide.gcc-2.gcc +0 -168
  32. data/sources/gcc/lists.gcc +0 -226
  33. data/sources/gcc/magicsquares.gcc +0 -378
  34. data/sources/gcc/mandelbrot.gcc +0 -84
  35. data/sources/gcc/mandelbrot.gcc-2.gcc +0 -63
  36. data/sources/gcc/mandelbrot.gcc-3.gcc +0 -91
  37. data/sources/gcc/mandelbrot.gcc-4.gcc +0 -78
  38. data/sources/gcc/matrix.gcc +0 -66
  39. data/sources/gcc/message.gcc-2.gcc +0 -72
  40. data/sources/gcc/message.gcc-3.gcc +0 -64
  41. data/sources/gcc/methcall.gcc +0 -89
  42. data/sources/gcc/moments.gcc +0 -120
  43. data/sources/gcc/nbody.gcc +0 -142
  44. data/sources/gcc/nbody.gcc-2.gcc +0 -143
  45. data/sources/gcc/nbody.gcc-3.gcc +0 -142
  46. data/sources/gcc/nestedloop.gcc +0 -25
  47. data/sources/gcc/nsieve.gcc +0 -35
  48. data/sources/gcc/nsievebits.gcc-2.gcc +0 -37
  49. data/sources/gcc/nsievebits.gcc-3.gcc +0 -53
  50. data/sources/gcc/objinst.gcc +0 -95
  51. data/sources/gcc/partialsums.gcc +0 -86
  52. data/sources/gcc/partialsums.gcc-3.gcc +0 -81
  53. data/sources/gcc/partialsums.gcc-4.gcc +0 -68
  54. data/sources/gcc/pidigits.gcc +0 -105
  55. data/sources/gcc/primes.gcc +0 -75
  56. data/sources/gcc/prodcons.gcc +0 -86
  57. data/sources/gcc/random.gcc +0 -29
  58. data/sources/gcc/raytracer.gcc +0 -125
  59. data/sources/gcc/raytracer.gcc-2.gcc +0 -181
  60. data/sources/gcc/recursive.gcc +0 -68
  61. data/sources/gcc/recursive.gcc-2.gcc +0 -55
  62. data/sources/gcc/regexdna.gcc-2.gcc +0 -126
  63. data/sources/gcc/regexmatch.gcc +0 -136
  64. data/sources/gcc/revcomp.gcc +0 -85
  65. data/sources/gcc/revcomp.gcc-2.gcc +0 -88
  66. data/sources/gcc/revcomp.gcc-4.gcc +0 -71
  67. data/sources/gcc/reversefile.gcc +0 -103
  68. data/sources/gcc/reversefile.gcc-2.gcc +0 -56
  69. data/sources/gcc/sieve.gcc +0 -34
  70. data/sources/gcc/spectralnorm.gcc +0 -54
  71. data/sources/gcc/spellcheck.gcc +0 -72
  72. data/sources/gcc/spellcheck.gcc-2.gcc +0 -61
  73. data/sources/gcc/strcat.gcc +0 -38
  74. data/sources/gcc/sumcol.gcc-2.gcc +0 -98
  75. data/sources/gcc/sumcol.gcc-3.gcc +0 -22
  76. data/sources/gcc/sumcol.gcc-4.gcc +0 -18
  77. data/sources/gcc/sumcol.gcc-5.gcc +0 -32
  78. data/sources/gcc/takfp.gcc +0 -23
  79. data/sources/gcc/tcp-stream.gcc +0 -122
  80. data/sources/gcc/tcpecho.gcc +0 -122
  81. data/sources/gcc/tcpecho.gcc-2.gcc +0 -136
  82. data/sources/gcc/tcprequest.gcc +0 -122
  83. data/sources/gcc/threadring.gcc +0 -73
  84. data/sources/gcc/wc.gcc +0 -52
  85. data/sources/gcc/wc.gcc-2.gcc +0 -40
  86. data/sources/gcc/wc.gcc-3.gcc +0 -46
  87. data/sources/gcc/wordfreq.gcc-2.gcc +0 -85
  88. data/sources/perl/ackermann.perl +0 -28
  89. data/sources/perl/ackermann.perl-2.perl +0 -25
  90. data/sources/perl/ackermann.perl-3.perl +0 -20
  91. data/sources/perl/ackermann.perl-4.perl +0 -18
  92. data/sources/perl/ary.perl +0 -25
  93. data/sources/perl/ary.perl-2.perl +0 -23
  94. data/sources/perl/binarytrees.perl +0 -66
  95. data/sources/perl/binarytrees.perl-2.perl +0 -71
  96. data/sources/perl/chameneos.perl +0 -67
  97. data/sources/perl/echo.perl +0 -81
  98. data/sources/perl/except.perl +0 -73
  99. data/sources/perl/fannkuch.perl +0 -44
  100. data/sources/perl/fannkuch.perl-2.perl +0 -38
  101. data/sources/perl/fasta.perl +0 -112
  102. data/sources/perl/fasta.perl-2.perl +0 -135
  103. data/sources/perl/fasta.perl-4.perl +0 -122
  104. data/sources/perl/fibo.perl +0 -15
  105. data/sources/perl/fibo.perl-2.perl +0 -0
  106. data/sources/perl/fibo.perl-3.perl +0 -0
  107. data/sources/perl/harmonic.perl +0 -7
  108. data/sources/perl/hash.perl +0 -23
  109. data/sources/perl/hash.perl-2.perl +0 -17
  110. data/sources/perl/hash.perl-3.perl +0 -24
  111. data/sources/perl/hash2.perl +0 -16
  112. data/sources/perl/heapsort.perl +0 -65
  113. data/sources/perl/heapsort.perl-2.perl +0 -0
  114. data/sources/perl/hello.perl +0 -5
  115. data/sources/perl/knucleotide.perl-2.perl +0 -30
  116. data/sources/perl/lists.perl +0 -48
  117. data/sources/perl/mandelbrot.perl-2.perl +0 -32
  118. data/sources/perl/matrix.perl +0 -59
  119. data/sources/perl/matrix.perl-2.perl +0 -0
  120. data/sources/perl/matrix.perl-3.perl +0 -0
  121. data/sources/perl/message.perl +0 -27
  122. data/sources/perl/methcall.perl +0 -66
  123. data/sources/perl/moments.perl +0 -44
  124. data/sources/perl/nbody.perl +0 -108
  125. data/sources/perl/nestedloop.perl +0 -28
  126. data/sources/perl/nsieve.perl-2.perl +0 -41
  127. data/sources/perl/nsieve.perl-4.perl +0 -43
  128. data/sources/perl/nsievebits.perl +0 -37
  129. data/sources/perl/objinst.perl +0 -73
  130. data/sources/perl/partialsums.perl-3.perl +0 -31
  131. data/sources/perl/pidigits.perl +0 -52
  132. data/sources/perl/pidigits.perl-2.perl +0 -47
  133. data/sources/perl/process.perl +0 -50
  134. data/sources/perl/prodcons.perl +0 -47
  135. data/sources/perl/random.perl-4.perl +0 -17
  136. data/sources/perl/recursive.perl-2.perl +0 -57
  137. data/sources/perl/regexdna.perl +0 -48
  138. data/sources/perl/regexdna.perl-2.perl +0 -43
  139. data/sources/perl/regexdna.perl-3.perl +0 -50
  140. data/sources/perl/regexdna.perl-4.perl +0 -49
  141. data/sources/perl/regexdna.perl-5.perl +0 -42
  142. data/sources/perl/regexdna.perl-6.perl +0 -43
  143. data/sources/perl/regexmatch.perl +0 -35
  144. data/sources/perl/revcomp.perl-2.perl +0 -34
  145. data/sources/perl/reversefile.perl +0 -8
  146. data/sources/perl/reversefile.perl-2.perl +0 -0
  147. data/sources/perl/reversefile.perl-3.perl +0 -0
  148. data/sources/perl/sieve.perl +0 -23
  149. data/sources/perl/spectralnorm.perl-2.perl +0 -54
  150. data/sources/perl/spellcheck.perl +0 -24
  151. data/sources/perl/strcat.perl +0 -13
  152. data/sources/perl/strcat.perl-2.perl +0 -0
  153. data/sources/perl/sumcol.perl +0 -8
  154. data/sources/perl/takfp.perl +0 -23
  155. data/sources/perl/takfp.perl-3.perl +0 -20
  156. data/sources/perl/tcpecho.perl +0 -61
  157. data/sources/perl/tcprequest.perl +0 -61
  158. data/sources/perl/tcpstream.perl +0 -61
  159. data/sources/perl/threadring.perl +0 -55
  160. data/sources/perl/threadring.perl-2.perl +0 -43
  161. data/sources/perl/wc.perl +0 -20
  162. data/sources/perl/wc.perl-2.perl +0 -14
  163. data/sources/perl/wordfreq.perl +0 -22
  164. data/sources/perl/wordfreq.perl-3.perl +0 -0
  165. data/sources/perl/wordfreq.perl3.perl +0 -0
  166. data/sources/python/ackermann.python +0 -21
  167. data/sources/python/ary.python +0 -19
  168. data/sources/python/binarytrees.python +0 -39
  169. data/sources/python/binarytrees.python-3.python +0 -44
  170. data/sources/python/chameneos.python-6.python +0 -73
  171. data/sources/python/chameneosredux.python +0 -126
  172. data/sources/python/chameneosredux.python-2.python +0 -122
  173. data/sources/python/dispatch.python +0 -176
  174. data/sources/python/dispatch.python-2.python +0 -136
  175. data/sources/python/echo.python +0 -64
  176. data/sources/python/except.python +0 -62
  177. data/sources/python/fannkuch.python +0 -50
  178. data/sources/python/fannkuch.python-2.python +0 -54
  179. data/sources/python/fasta.python-2.python +0 -79
  180. data/sources/python/fibo.python +0 -17
  181. data/sources/python/fibo.python-2.python +0 -0
  182. data/sources/python/fibo.python-3.python +0 -0
  183. data/sources/python/harmonic.python-2.python +0 -9
  184. data/sources/python/hash.python +0 -21
  185. data/sources/python/hash.python-2.python +0 -0
  186. data/sources/python/hash2.python +0 -30
  187. data/sources/python/heapsort.python-3.python +0 -66
  188. data/sources/python/hello.python +0 -5
  189. data/sources/python/implicitode.python +0 -231
  190. data/sources/python/knucleotide.python +0 -55
  191. data/sources/python/lists.python +0 -44
  192. data/sources/python/magicsquares.python +0 -145
  193. data/sources/python/mandelbrot.python +0 -44
  194. data/sources/python/mandelbrot.python-2.python +0 -35
  195. data/sources/python/mandelbrot.python-3.python +0 -46
  196. data/sources/python/matrix.python +0 -34
  197. data/sources/python/matrix.python-2.python +0 -23
  198. data/sources/python/message.python +0 -24
  199. data/sources/python/message.python-2.python +0 -20
  200. data/sources/python/message.python-3.python +0 -19
  201. data/sources/python/meteor.python +0 -210
  202. data/sources/python/meteor.python-2.python +0 -192
  203. data/sources/python/methcall.python +0 -51
  204. data/sources/python/moments.python +0 -65
  205. data/sources/python/nbody.python +0 -123
  206. data/sources/python/nbody.python-2.python +0 -120
  207. data/sources/python/nestedloop.python +0 -24
  208. data/sources/python/nsieve.python +0 -27
  209. data/sources/python/nsieve.python-2.python +0 -23
  210. data/sources/python/nsieve.python-4.python +0 -25
  211. data/sources/python/nsievebits.python +0 -27
  212. data/sources/python/nsievebits.python-2.python +0 -43
  213. data/sources/python/objinst.python +0 -53
  214. data/sources/python/partialsums.python +0 -37
  215. data/sources/python/partialsums.python-2.python +0 -35
  216. data/sources/python/partialsums.python-3.python +0 -48
  217. data/sources/python/pidigits.python +0 -38
  218. data/sources/python/pidigits.python-3.python +0 -63
  219. data/sources/python/pidigits.python-4.python +0 -24
  220. data/sources/python/process.python +0 -51
  221. data/sources/python/process.python-2.python +0 -133
  222. data/sources/python/prodcons.python +0 -51
  223. data/sources/python/prodcons.python-2.python +0 -0
  224. data/sources/python/random.python +0 -27
  225. data/sources/python/raytracer.python +0 -203
  226. data/sources/python/recursive.python +0 -35
  227. data/sources/python/regexdna.python +0 -39
  228. data/sources/python/regexdna.python-2.python +0 -34
  229. data/sources/python/regexmatch.python +0 -36
  230. data/sources/python/revcomp.python-3.python +0 -31
  231. data/sources/python/reversefile.python +0 -13
  232. data/sources/python/reversefile.python-2.python +0 -0
  233. data/sources/python/reversefile.python-3.python +0 -0
  234. data/sources/python/sieve.python +0 -50
  235. data/sources/python/spectralnorm.python-2.python +0 -36
  236. data/sources/python/spellcheck.python +0 -17
  237. data/sources/python/strcat.python +0 -35
  238. data/sources/python/strcat.python-2.python +0 -0
  239. data/sources/python/sumcol.python-2.python +0 -0
  240. data/sources/python/sumcol.python-3.python +0 -0
  241. data/sources/python/takfp.python +0 -19
  242. data/sources/python/tcpecho.python +0 -67
  243. data/sources/python/tcprequest.python +0 -67
  244. data/sources/python/tcpstream.python +0 -67
  245. data/sources/python/threadring.python +0 -47
  246. data/sources/python/threadring.python-2.python +0 -40
  247. data/sources/python/threadring.python-3.python +0 -34
  248. data/sources/python/wc.python-2.python +0 -19
  249. data/sources/python/wordfreq.python +0 -43
  250. data/sources/python/wordfreq.python-2.python +0 -0
  251. data/sources/python/wordfreq.python-3.python +0 -28
  252. data/sources/python/wordfreq.python-4.python +0 -38
  253. data/sources/python/wordfreq.python-5.python +0 -39
  254. data/sources/ruby/ackermann.ruby +0 -17
  255. data/sources/ruby/ackermann.ruby-5.ruby +0 -153
  256. data/sources/ruby/ary.ruby +0 -22
  257. data/sources/ruby/binarytrees.ruby-2.ruby +0 -55
  258. data/sources/ruby/chameneos.ruby-2.ruby +0 -71
  259. data/sources/ruby/dispatch.ruby +0 -114
  260. data/sources/ruby/echo.ruby +0 -41
  261. data/sources/ruby/except.ruby +0 -61
  262. data/sources/ruby/except.ruby-2.ruby +0 -61
  263. data/sources/ruby/fannkuch.ruby +0 -42
  264. data/sources/ruby/fasta.ruby +0 -81
  265. data/sources/ruby/fibo.ruby +0 -15
  266. data/sources/ruby/harmonic.ruby-2.ruby +0 -15
  267. data/sources/ruby/hash.ruby +0 -19
  268. data/sources/ruby/hash2.ruby +0 -23
  269. data/sources/ruby/heapsort.ruby +0 -55
  270. data/sources/ruby/hello.ruby +0 -6
  271. data/sources/ruby/knucleotide.ruby-2.ruby +0 -44
  272. data/sources/ruby/lists.ruby +0 -46
  273. data/sources/ruby/mandelbrot.ruby-3.ruby +0 -63
  274. data/sources/ruby/matrix.ruby +0 -40
  275. data/sources/ruby/matrix.ruby-2.ruby +0 -30
  276. data/sources/ruby/message.ruby +0 -29
  277. data/sources/ruby/message.ruby-2.ruby +0 -24
  278. data/sources/ruby/meteor.ruby +0 -386
  279. data/sources/ruby/meteor.ruby-2.ruby +0 -561
  280. data/sources/ruby/methcall.ruby +0 -58
  281. data/sources/ruby/methcall.ruby-2.ruby +0 -54
  282. data/sources/ruby/moments.ruby +0 -64
  283. data/sources/ruby/nbody.ruby-2.ruby +0 -145
  284. data/sources/ruby/nestedloop.ruby +0 -22
  285. data/sources/ruby/nsieve.ruby +0 -36
  286. data/sources/ruby/nsieve.ruby-2.ruby +0 -25
  287. data/sources/ruby/nsievebits.ruby-2.ruby +0 -42
  288. data/sources/ruby/objinst.ruby +0 -58
  289. data/sources/ruby/partialsums.ruby +0 -39
  290. data/sources/ruby/pidigits.ruby +0 -92
  291. data/sources/ruby/pidigits.ruby-2.ruby +0 -109
  292. data/sources/ruby/prodcons.ruby +0 -41
  293. data/sources/ruby/random.ruby +0 -17
  294. data/sources/ruby/recursive.ruby-2.ruby +0 -53
  295. data/sources/ruby/regexdna.ruby +0 -32
  296. data/sources/ruby/regexdna.ruby-2.ruby +0 -38
  297. data/sources/ruby/regexmatch.ruby +0 -33
  298. data/sources/ruby/revcomp.ruby +0 -28
  299. data/sources/ruby/reversefile.ruby +0 -7
  300. data/sources/ruby/sieve.ruby +0 -30
  301. data/sources/ruby/spectralnorm.ruby +0 -48
  302. data/sources/ruby/spellcheck.ruby +0 -18
  303. data/sources/ruby/spellcheck.ruby-2.ruby +0 -0
  304. data/sources/ruby/strcat.ruby +0 -12
  305. data/sources/ruby/strcat.ruby-2.ruby +0 -12
  306. data/sources/ruby/sumcol.ruby +0 -12
  307. data/sources/ruby/sumcol.ruby-2.ruby +0 -5
  308. data/sources/ruby/takfp.ruby +0 -15
  309. data/sources/ruby/tcpecho.ruby +0 -45
  310. data/sources/ruby/tcprequest.ruby +0 -45
  311. data/sources/ruby/tcpstream.ruby +0 -45
  312. data/sources/ruby/threadring.ruby +0 -61
  313. data/sources/ruby/threadring.ruby-2.ruby +0 -33
  314. data/sources/ruby/wc.ruby +0 -15
  315. data/sources/ruby/wordfreq.ruby +0 -17
  316. data/sources/ruby/wordfreq.ruby2.ruby +0 -0
@@ -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
- }
@@ -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
-