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