34
|
1 /*
|
|
2 * Nov 10, 2009
|
|
3 * created by gongo.
|
|
4 *
|
|
5 * Nov 10, 2009
|
|
6 * modified by kent.
|
|
7 */
|
|
8
|
|
9 #include <stdio.h>
|
|
10 #include <stdlib.h>
|
126
|
11 #include <string.h>
|
|
12 #include <time.h>
|
34
|
13
|
148
|
14 __code (*ret)(int, void*);
|
|
15 void* env;
|
34
|
16
|
|
17 __code
|
|
18 print(int *numbers)
|
|
19 {
|
|
20 printf("%d-%d-%d-%d-%d-%d\n", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5]);
|
|
21 free(numbers);
|
|
22 goto ret(0, env);
|
|
23 }
|
|
24
|
|
25 __code
|
|
26 take(int *array, int size, int length)
|
|
27 {
|
|
28 int *taked = (int*)malloc(sizeof(int)*length);
|
|
29
|
|
30 memcpy(taked, array, sizeof(int)*length);
|
|
31 free(array);
|
|
32
|
|
33 goto print(taked);
|
|
34 }
|
|
35
|
|
36 __code
|
|
37 shuffle(int *array, int size, int idx)
|
|
38 {
|
|
39 int j = random() % size;
|
|
40 int tmp = array[idx];
|
|
41 array[idx] = array[j];
|
|
42 array[j] = tmp;
|
|
43
|
|
44 if (++idx < size) {
|
|
45 goto shuffle(array, size, idx);
|
|
46 } else {
|
|
47 goto take(array, size, 6);
|
|
48 }
|
|
49 }
|
|
50
|
|
51 __code
|
|
52 range_loop(int *array, int idx, int from, int to, int step, int size)
|
|
53 {
|
|
54 array[idx] = from;
|
|
55
|
|
56 if (from+step > to) {
|
|
57 goto shuffle(array, size, 0);
|
|
58 } else {
|
|
59 goto range_loop(array, idx+1, from+step, to, step, size);
|
|
60 }
|
|
61 }
|
|
62
|
|
63 __code
|
|
64 range(int from, int to, int step)
|
|
65 {
|
|
66 int size = (to-from+1)/step;
|
|
67 int *array = (int*)malloc(sizeof(int)*size);
|
|
68
|
|
69 goto range_loop(array, 0, from, to, step, size);
|
|
70 }
|
|
71
|
|
72 int
|
|
73 main()
|
|
74 {
|
|
75 srand(time(NULL));
|
|
76 ret = _CbC_return;
|
|
77 env = _CbC_environment;
|
|
78
|
|
79 goto range(1, 43, 1);
|
|
80 }
|
|
81
|