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/lists.gcc
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
/* -*- mode: c -*-
|
|
2
|
-
* $Id: lists.gcc,v 1.1.1.1 2004-05-19 18:10:23 bfulgham Exp $
|
|
3
|
-
* http://www.bagley.org/~doug/shootout/
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
#include <stdio.h>
|
|
7
|
-
#include <stdlib.h>
|
|
8
|
-
#include <string.h>
|
|
9
|
-
#include <unistd.h>
|
|
10
|
-
|
|
11
|
-
#define SIZE 10000
|
|
12
|
-
|
|
13
|
-
// a simple Double Linked List
|
|
14
|
-
// the head node is special, it's val is length of list
|
|
15
|
-
typedef struct DLL {
|
|
16
|
-
int val;
|
|
17
|
-
struct DLL *next; /* points to next or head (if at tail) */
|
|
18
|
-
struct DLL *prev; /* points to prev or tail (if at head) */
|
|
19
|
-
} DLL;
|
|
20
|
-
|
|
21
|
-
inline int list_length(DLL *head) { return(head->val); }
|
|
22
|
-
inline int list_empty(DLL *head) { return(list_length(head) == 0); }
|
|
23
|
-
inline DLL *list_first(DLL *head) { return(head->next); }
|
|
24
|
-
inline DLL *list_last(DLL *head) { return(head->prev); }
|
|
25
|
-
|
|
26
|
-
void list_push_tail(DLL *head, DLL *item) {
|
|
27
|
-
DLL *tail = head->prev;
|
|
28
|
-
tail->next = item;
|
|
29
|
-
item->next = head;
|
|
30
|
-
head->prev = item;
|
|
31
|
-
item->prev = tail;
|
|
32
|
-
head->val++;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
DLL *list_pop_tail(DLL *head) {
|
|
36
|
-
DLL *prev, *tail;
|
|
37
|
-
if (list_empty(head)) return(NULL);
|
|
38
|
-
tail = head->prev;
|
|
39
|
-
prev = tail->prev;
|
|
40
|
-
prev->next = head;
|
|
41
|
-
head->prev = prev;
|
|
42
|
-
head->val--;
|
|
43
|
-
return(tail);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
void list_push_head(DLL *head, DLL *item) {
|
|
47
|
-
DLL *next = head->next;
|
|
48
|
-
head->next = item;
|
|
49
|
-
next->prev = item;
|
|
50
|
-
item->next = next;
|
|
51
|
-
item->prev = head;
|
|
52
|
-
head->val++;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
DLL *list_pop_head(DLL *head) {
|
|
56
|
-
DLL *next;
|
|
57
|
-
if (list_empty(head)) return(NULL);
|
|
58
|
-
next = head->next;
|
|
59
|
-
head->next = next->next;
|
|
60
|
-
next->next->prev = head;
|
|
61
|
-
head->val--;
|
|
62
|
-
return(next);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
int list_equal(DLL *x, DLL *y) {
|
|
66
|
-
DLL *xp, *yp;
|
|
67
|
-
// first val's checked will be list lengths
|
|
68
|
-
for (xp=x, yp=y; xp->next != x; xp=xp->next, yp=yp->next) {
|
|
69
|
-
if (xp->val != yp->val) return(0);
|
|
70
|
-
}
|
|
71
|
-
if (xp->val != yp->val) return(0);
|
|
72
|
-
return(yp->next == y);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
void list_print(char *msg, DLL *x) {
|
|
76
|
-
DLL *xp, *first = x->next;
|
|
77
|
-
int i = 0;
|
|
78
|
-
fputs(msg, stdout);
|
|
79
|
-
printf("length: %d\n", list_length(x));
|
|
80
|
-
for (xp=x->next; xp->next != first; xp=xp->next) {
|
|
81
|
-
printf("i:%3d v:%3d n:%3d p:%3d\n", ++i,
|
|
82
|
-
xp->val, xp->next->val, xp->prev->val);
|
|
83
|
-
}
|
|
84
|
-
printf("[last entry points to list head]\n");
|
|
85
|
-
printf("[val of next of tail is: %d]\n", xp->next->val);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
DLL *list_new() {
|
|
89
|
-
DLL *l = (DLL *)malloc(sizeof(DLL));
|
|
90
|
-
l->next = l;
|
|
91
|
-
l->prev = l;
|
|
92
|
-
l->val = 0;
|
|
93
|
-
return(l);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/* inclusive sequence 'from' <-> 'to' */
|
|
97
|
-
DLL *list_sequence(int from, int to) {
|
|
98
|
-
int size, tmp, i, j;
|
|
99
|
-
DLL *l;
|
|
100
|
-
if (from > to) {
|
|
101
|
-
tmp = from; from = to; to = tmp;
|
|
102
|
-
}
|
|
103
|
-
size = to - from + 1;
|
|
104
|
-
l = (DLL *)malloc((size+1) * sizeof(DLL));
|
|
105
|
-
from--;
|
|
106
|
-
for (i=0, j=1; i<size; ++i, ++j) {
|
|
107
|
-
l[i].next = &l[i+1];
|
|
108
|
-
l[j].prev = &l[j-1];
|
|
109
|
-
l[i].val = from++;
|
|
110
|
-
}
|
|
111
|
-
l[0].prev = &l[size];
|
|
112
|
-
l[size].next = &l[0];
|
|
113
|
-
l[size].prev = &l[size-1];
|
|
114
|
-
l[size].val = from;
|
|
115
|
-
l[0].val = size;
|
|
116
|
-
return(l);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
DLL *list_copy(DLL *x) {
|
|
120
|
-
int i, j, size = list_length(x);
|
|
121
|
-
DLL *xp, *l = (DLL *)malloc((size+1) * sizeof(DLL));
|
|
122
|
-
for (i=0, j=1, xp=x; i<size; i++, j++, xp=xp->next) {
|
|
123
|
-
l[i].next = &l[j];
|
|
124
|
-
l[j].prev = &l[i];
|
|
125
|
-
l[i].val = xp->val;
|
|
126
|
-
}
|
|
127
|
-
l[0].prev = &l[size];
|
|
128
|
-
l[size].next = &l[0];
|
|
129
|
-
l[size].val = list_last(x)->val;
|
|
130
|
-
return(l);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
void list_reverse (DLL *head) {
|
|
134
|
-
DLL *tmp, *p = head;
|
|
135
|
-
do {
|
|
136
|
-
tmp = p->next;
|
|
137
|
-
p->next = p->prev;
|
|
138
|
-
p->prev = tmp;
|
|
139
|
-
p = tmp;
|
|
140
|
-
} while (p != head);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
int test_lists() {
|
|
144
|
-
int len = 0;
|
|
145
|
-
// create a list of integers (li1) from 1 to SIZE
|
|
146
|
-
DLL *li1 = list_sequence(1, SIZE);
|
|
147
|
-
// copy the list to li2
|
|
148
|
-
DLL *li2 = list_copy(li1);
|
|
149
|
-
// remove each individual item from left side of li2 and
|
|
150
|
-
// append to right side of li3 (preserving order)
|
|
151
|
-
DLL *li3 = list_new();
|
|
152
|
-
// compare li2 and li1 for equality
|
|
153
|
-
if (!list_equal(li2, li1)) {
|
|
154
|
-
fprintf(stderr, "li2 and li1 are not equal\n");
|
|
155
|
-
exit(1);
|
|
156
|
-
}
|
|
157
|
-
while (!list_empty(li2)) {
|
|
158
|
-
list_push_tail(li3, list_pop_head(li2));
|
|
159
|
-
}
|
|
160
|
-
// li2 must now be empty
|
|
161
|
-
if (!list_empty(li2)) {
|
|
162
|
-
fprintf(stderr, "li2 should be empty now\n");
|
|
163
|
-
exit(1);
|
|
164
|
-
}
|
|
165
|
-
// remove each individual item from right side of li3 and
|
|
166
|
-
// append to right side of li2 (reversing list)
|
|
167
|
-
while (!list_empty(li3)) {
|
|
168
|
-
list_push_tail(li2, list_pop_tail(li3));
|
|
169
|
-
}
|
|
170
|
-
// li3 must now be empty
|
|
171
|
-
if (!list_empty(li3)) {
|
|
172
|
-
fprintf(stderr, "li3 should be empty now\n");
|
|
173
|
-
exit(1);
|
|
174
|
-
}
|
|
175
|
-
// reverse li1 in place
|
|
176
|
-
list_reverse(li1);
|
|
177
|
-
// check that li1's first item is now SIZE
|
|
178
|
-
if (list_first(li1)->val != SIZE) {
|
|
179
|
-
fprintf(stderr, "li1 first value wrong, wanted %d, got %d\n",
|
|
180
|
-
SIZE, list_first(li1)->val);
|
|
181
|
-
exit(1);
|
|
182
|
-
}
|
|
183
|
-
// check that li1's last item is now 1
|
|
184
|
-
if (list_last(li1)->val != 1) {
|
|
185
|
-
fprintf(stderr, "last value wrong, wanted %d, got %d\n",
|
|
186
|
-
SIZE, list_last(li1)->val);
|
|
187
|
-
exit(1);
|
|
188
|
-
}
|
|
189
|
-
// check that li2's first item is now SIZE
|
|
190
|
-
if (list_first(li2)->val != SIZE) {
|
|
191
|
-
fprintf(stderr, "li2 first value wrong, wanted %d, got %d\n",
|
|
192
|
-
SIZE, list_first(li2)->val);
|
|
193
|
-
exit(1);
|
|
194
|
-
}
|
|
195
|
-
// check that li2's last item is now 1
|
|
196
|
-
if (list_last(li2)->val != 1) {
|
|
197
|
-
fprintf(stderr, "last value wrong, wanted %d, got %d\n",
|
|
198
|
-
SIZE, list_last(li2)->val);
|
|
199
|
-
exit(1);
|
|
200
|
-
}
|
|
201
|
-
// check that li1's length is still SIZE
|
|
202
|
-
if (list_length(li1) != SIZE) {
|
|
203
|
-
fprintf(stderr, "li1 size wrong, wanted %d, got %d\n",
|
|
204
|
-
SIZE, list_length(li1));
|
|
205
|
-
exit(1);
|
|
206
|
-
}
|
|
207
|
-
// compare li1 and li2 for equality
|
|
208
|
-
if (!list_equal(li1, li2)) {
|
|
209
|
-
fprintf(stderr, "li1 and li2 are not equal\n");
|
|
210
|
-
exit(1);
|
|
211
|
-
}
|
|
212
|
-
len = list_length(li1);
|
|
213
|
-
free(li1);
|
|
214
|
-
free(li2);
|
|
215
|
-
free(li3);
|
|
216
|
-
// return the length of the list
|
|
217
|
-
return(len);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
int main(int argc, char *argv[]) {
|
|
221
|
-
int n = ((argc == 2) ? atoi(argv[1]) : 1);
|
|
222
|
-
int result = 0;
|
|
223
|
-
while(n--) result = test_lists();
|
|
224
|
-
printf("%d\n", result);
|
|
225
|
-
return 0;
|
|
226
|
-
}
|
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
/* The Computer Language Benchmarks Game
|
|
2
|
-
http://shootout.alioth.debian.org/
|
|
3
|
-
|
|
4
|
-
contributed contributed by Charlie Brej
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
#include <stdio.h>
|
|
8
|
-
#include <stdlib.h>
|
|
9
|
-
|
|
10
|
-
int n=0;
|
|
11
|
-
int mn=0;
|
|
12
|
-
|
|
13
|
-
typedef struct FfmCache {
|
|
14
|
-
int x;
|
|
15
|
-
int y;
|
|
16
|
-
int pm_count;
|
|
17
|
-
int pm[];
|
|
18
|
-
}FfmCache, *PtrFfmCache;
|
|
19
|
-
|
|
20
|
-
typedef struct Square {
|
|
21
|
-
struct Square* next;
|
|
22
|
-
PtrFfmCache ffm;
|
|
23
|
-
int priority;
|
|
24
|
-
int *grid;
|
|
25
|
-
int *unused;
|
|
26
|
-
}Square, *PtrSquare;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
void SquarePrint(PtrSquare square)
|
|
31
|
-
{
|
|
32
|
-
int x;
|
|
33
|
-
int y;
|
|
34
|
-
for (y=0; y<n; y++){
|
|
35
|
-
for (x=0; x<n; x++){
|
|
36
|
-
printf("%d ", square->grid[x+y*n]);
|
|
37
|
-
}
|
|
38
|
-
printf("\n");
|
|
39
|
-
}
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
PtrSquare SquareNew(void)
|
|
46
|
-
{
|
|
47
|
-
PtrSquare new_square = malloc(sizeof(Square));
|
|
48
|
-
new_square->grid = malloc(n * n * sizeof(int));
|
|
49
|
-
new_square->unused = malloc(n * n * sizeof(int));
|
|
50
|
-
new_square->next=NULL;
|
|
51
|
-
new_square->ffm=NULL;
|
|
52
|
-
new_square->priority=0;
|
|
53
|
-
return new_square;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
PtrSquare SquareNewEmpty(void)
|
|
57
|
-
{
|
|
58
|
-
int i;
|
|
59
|
-
PtrSquare new_square = SquareNew();
|
|
60
|
-
for (i=0; i<n*n; i++){
|
|
61
|
-
new_square->grid[i]=0;
|
|
62
|
-
new_square->unused[i]=1;
|
|
63
|
-
}
|
|
64
|
-
return new_square;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
PtrSquare SquareNewCopy(PtrSquare old_square)
|
|
69
|
-
{
|
|
70
|
-
int i;
|
|
71
|
-
PtrSquare new_square = SquareNew();
|
|
72
|
-
for (i=0; i<n*n; i++){
|
|
73
|
-
new_square->grid[i]=old_square->grid[i];
|
|
74
|
-
new_square->unused[i]=old_square->unused[i];
|
|
75
|
-
}
|
|
76
|
-
return new_square;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
void SquareFree(PtrSquare square)
|
|
80
|
-
{
|
|
81
|
-
free(square->ffm);
|
|
82
|
-
free(square->unused);
|
|
83
|
-
free(square);
|
|
84
|
-
return ;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
void SquareGetRow(PtrSquare square, int row, int* out_array)
|
|
88
|
-
{
|
|
89
|
-
int i;
|
|
90
|
-
for (i=0; i<n; i++){
|
|
91
|
-
out_array[i] = square->grid[row*n+i];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
void SquareGetColumn(PtrSquare square, int column, int* out_array)
|
|
96
|
-
{
|
|
97
|
-
int i;
|
|
98
|
-
for (i=0; i<n; i++){
|
|
99
|
-
out_array[i] = square->grid[n*i+column];
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
int IntArraySum(int* data)
|
|
104
|
-
{
|
|
105
|
-
int i;
|
|
106
|
-
int sum = 0;
|
|
107
|
-
for (i=0; i<n; i++){
|
|
108
|
-
sum += data[i];
|
|
109
|
-
}
|
|
110
|
-
return sum;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
int IntArrayCount0s(int* data)
|
|
114
|
-
{
|
|
115
|
-
int i;
|
|
116
|
-
int count = 0;
|
|
117
|
-
for (i=0; i<n; i++)
|
|
118
|
-
if(data[i]==0)
|
|
119
|
-
count++;
|
|
120
|
-
return count;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
int SquareNumberPresent(PtrSquare square, int number)
|
|
124
|
-
{
|
|
125
|
-
int i;
|
|
126
|
-
for (i=0; i<n*n; i++){
|
|
127
|
-
if (square->grid[i] == number) return 1;
|
|
128
|
-
}
|
|
129
|
-
return 0;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
int SquareEmptyCount(PtrSquare square)
|
|
133
|
-
{
|
|
134
|
-
int i;
|
|
135
|
-
int count=0;
|
|
136
|
-
for (i=0; i<n*n; i++){
|
|
137
|
-
if (square->grid[i] == 0) count++;
|
|
138
|
-
}
|
|
139
|
-
return count;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
void SquareGetPossibleMoves(PtrSquare square, int x, int y, int* ret_pm, int* ret_pm_count)
|
|
143
|
-
{
|
|
144
|
-
int cell_groups[4][n];
|
|
145
|
-
int cell_group_count=2;
|
|
146
|
-
int group;
|
|
147
|
-
int i, i2;
|
|
148
|
-
int cur_acc;
|
|
149
|
-
int highest_candidate = n*n;
|
|
150
|
-
int lowest_candidate = 1;
|
|
151
|
-
|
|
152
|
-
int one_possible = 0;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
SquareGetRow(square, y, cell_groups[0]);
|
|
156
|
-
SquareGetColumn(square, x, cell_groups[1]);
|
|
157
|
-
|
|
158
|
-
*ret_pm_count = 0;
|
|
159
|
-
if (x==y) {
|
|
160
|
-
for (i=0; i<n; i++)
|
|
161
|
-
cell_groups[cell_group_count][i] = square->grid[n*i+i];
|
|
162
|
-
cell_group_count++;
|
|
163
|
-
}
|
|
164
|
-
if (x + y == n - 1) {
|
|
165
|
-
for (i=0; i<n; i++)
|
|
166
|
-
cell_groups[cell_group_count][i] = square->grid[i + (n - 1 - i) * n];
|
|
167
|
-
cell_group_count++;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
for (group=0; group<cell_group_count; group++){
|
|
171
|
-
int count = 0;
|
|
172
|
-
for (i=0; i<n; i++){
|
|
173
|
-
if (cell_groups[group][i] == 0){
|
|
174
|
-
if (count++) break;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
if (count==1){
|
|
178
|
-
int new_one_possible = mn - IntArraySum(cell_groups[group]);
|
|
179
|
-
if (one_possible==0){
|
|
180
|
-
one_possible = new_one_possible;
|
|
181
|
-
if (one_possible<1 || one_possible>n*n || SquareNumberPresent(square, one_possible)) return;
|
|
182
|
-
}
|
|
183
|
-
if (one_possible != new_one_possible) return;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
if (one_possible){
|
|
187
|
-
ret_pm[0] = one_possible;
|
|
188
|
-
*ret_pm_count = 1;
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
int local_pm_count = 0;
|
|
194
|
-
int zeros[cell_group_count];
|
|
195
|
-
int highest_zero_count=0;
|
|
196
|
-
for (i=0; i<cell_group_count; i++){
|
|
197
|
-
int zero_count = IntArrayCount0s(cell_groups[i])-1;
|
|
198
|
-
zeros[i] = zero_count;
|
|
199
|
-
if (highest_zero_count < zero_count) highest_zero_count = zero_count;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
int lows[highest_zero_count];
|
|
203
|
-
int higs[highest_zero_count];
|
|
204
|
-
|
|
205
|
-
i2=0;
|
|
206
|
-
cur_acc=0;
|
|
207
|
-
for (i=0; i2<highest_zero_count; i++){
|
|
208
|
-
if(square->unused[i]){
|
|
209
|
-
cur_acc+=(i+1);
|
|
210
|
-
lows[i2]=cur_acc;
|
|
211
|
-
i2++;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
i2=0;
|
|
216
|
-
cur_acc=0;
|
|
217
|
-
for (i=n*n-1; i2<highest_zero_count; i--){
|
|
218
|
-
if(square->unused[i]){
|
|
219
|
-
cur_acc+=(i+1);
|
|
220
|
-
higs[i2]=cur_acc;
|
|
221
|
-
i2++;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
for (group=0; group<cell_group_count; group++){
|
|
226
|
-
int lft = mn - IntArraySum(cell_groups[group]);
|
|
227
|
-
int k = zeros[group];
|
|
228
|
-
int temp_highest_candidate = lft - lows[k-1];
|
|
229
|
-
int temp_lowest_candidate = lft - higs[k-1];
|
|
230
|
-
if (temp_highest_candidate<highest_candidate) highest_candidate = temp_highest_candidate;
|
|
231
|
-
if (temp_lowest_candidate>lowest_candidate) lowest_candidate = temp_lowest_candidate;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
for (i=lowest_candidate; i<=highest_candidate; i++){
|
|
235
|
-
if(square->unused[i-1]){
|
|
236
|
-
ret_pm[local_pm_count++]=i;
|
|
237
|
-
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
*ret_pm_count = local_pm_count;
|
|
244
|
-
return;
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
PtrFfmCache SquareGetFewestMoves(PtrSquare square)
|
|
251
|
-
{
|
|
252
|
-
int x,y;
|
|
253
|
-
int i;
|
|
254
|
-
if (square->ffm){
|
|
255
|
-
return square->ffm;
|
|
256
|
-
}
|
|
257
|
-
square->ffm = malloc(sizeof(FfmCache)+sizeof(int)*n*n);
|
|
258
|
-
square->ffm->pm_count=n*n+1;
|
|
259
|
-
|
|
260
|
-
for (y=0; y<n; y++)
|
|
261
|
-
for (x=0; x<n; x++){
|
|
262
|
-
int index = x + y * n;
|
|
263
|
-
if (square->grid[index] == 0){
|
|
264
|
-
int temp_list[n*n];
|
|
265
|
-
int temp_list_count;
|
|
266
|
-
SquareGetPossibleMoves(square,x,y,temp_list,&temp_list_count);
|
|
267
|
-
if (temp_list_count<square->ffm->pm_count){
|
|
268
|
-
square->ffm->pm_count = temp_list_count;
|
|
269
|
-
square->ffm->x = x;
|
|
270
|
-
square->ffm->y = y;
|
|
271
|
-
for (i=0; i<square->ffm->pm_count; i++) square->ffm->pm[i] = temp_list[i];
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
if (square->ffm->pm_count>n*n) square->ffm->pm_count=0;
|
|
278
|
-
return square->ffm;
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
int SquareGetPriority(PtrSquare square)
|
|
285
|
-
{
|
|
286
|
-
int priority;
|
|
287
|
-
if (square->priority) return square->priority;
|
|
288
|
-
PtrFfmCache ffm = SquareGetFewestMoves(square);
|
|
289
|
-
priority = ffm->pm_count + SquareEmptyCount(square);
|
|
290
|
-
square->priority = priority;
|
|
291
|
-
return priority;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
int SquareCompare(PtrSquare square1, PtrSquare square2)
|
|
295
|
-
{
|
|
296
|
-
int c = SquareGetPriority(square1) - SquareGetPriority(square2);
|
|
297
|
-
if (c==0){
|
|
298
|
-
int i;
|
|
299
|
-
for (i=0; c==0 && i<n*n; i++){
|
|
300
|
-
c = square1->grid[i] - square2->grid[i];
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return c;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
PtrSquare SquareQueueMerge(PtrSquare queue1, PtrSquare queue2)
|
|
307
|
-
{
|
|
308
|
-
if (!queue1) return queue2;
|
|
309
|
-
if (!queue2) return queue1;
|
|
310
|
-
|
|
311
|
-
PtrSquare new_queue = NULL;
|
|
312
|
-
PtrSquare* cur_ptr = &new_queue;
|
|
313
|
-
|
|
314
|
-
while (1){
|
|
315
|
-
if (SquareCompare(queue1, queue2)<0){
|
|
316
|
-
*cur_ptr = queue1;
|
|
317
|
-
cur_ptr = &queue1->next;
|
|
318
|
-
queue1 = queue1->next;
|
|
319
|
-
if (!queue1){
|
|
320
|
-
*cur_ptr = queue2;
|
|
321
|
-
return new_queue;
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
else {
|
|
325
|
-
*cur_ptr = queue2;
|
|
326
|
-
cur_ptr = &queue2->next;
|
|
327
|
-
queue2 = queue2->next;
|
|
328
|
-
if (!queue2){
|
|
329
|
-
*cur_ptr = queue1;
|
|
330
|
-
return new_queue;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
PtrSquare SquareGetSuccessorNodes(PtrSquare square)
|
|
337
|
-
{
|
|
338
|
-
int i;
|
|
339
|
-
PtrSquare square_queue = NULL;
|
|
340
|
-
PtrFfmCache ffm = SquareGetFewestMoves(square);
|
|
341
|
-
|
|
342
|
-
for (i=0; i<ffm->pm_count; i++){
|
|
343
|
-
PtrSquare new_square = SquareNewCopy(square);
|
|
344
|
-
new_square->grid[ffm->x+ffm->y*n] = ffm->pm[i];
|
|
345
|
-
new_square->unused[ffm->pm[i]-1]=0;
|
|
346
|
-
square_queue = SquareQueueMerge(square_queue, new_square);
|
|
347
|
-
}
|
|
348
|
-
return square_queue;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
int main(int argc, char **argv)
|
|
354
|
-
{
|
|
355
|
-
|
|
356
|
-
if (argv[1]) n = atoi(argv[1]);
|
|
357
|
-
else n = 5;
|
|
358
|
-
mn = n * (1 + n * n) / 2;
|
|
359
|
-
|
|
360
|
-
PtrSquare queue = SquareNewEmpty();
|
|
361
|
-
PtrSquare cur_square;
|
|
362
|
-
|
|
363
|
-
while (queue){
|
|
364
|
-
cur_square = queue;
|
|
365
|
-
queue = queue->next;
|
|
366
|
-
|
|
367
|
-
int priority = SquareGetPriority(cur_square);
|
|
368
|
-
if (!priority) break;
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
PtrSquare successor_nodes = SquareGetSuccessorNodes(cur_square);
|
|
372
|
-
queue = SquareQueueMerge(queue, successor_nodes);
|
|
373
|
-
SquareFree(cur_square);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
SquarePrint(cur_square);
|
|
377
|
-
return 0;
|
|
378
|
-
}
|