Skip to content

Instantly share code, notes, and snippets.

@DavidPu
Last active February 23, 2017 19:10
Show Gist options
  • Select an option

  • Save DavidPu/3427265 to your computer and use it in GitHub Desktop.

Select an option

Save DavidPu/3427265 to your computer and use it in GitHub Desktop.
#include<stdio.h>
#include<stdlib.h>
#define N 10L
#define GET_VALUE(i, j, k, l) (N * N * N * i + N * N * j + N * k + l)
#ifndef MIN
#define MIN(a,b) ((a) < (b) ? (a) : (b))
#endif
int quad_array[N][N][N][N];
static int *getter(int i, int j, int k, int l, int *is_dup)
{
long pos;
long min;
int *p = (int*)&quad_array;
pos = min = GET_VALUE(i, j, k, l);
min = MIN(min, GET_VALUE(i, j, l, k));
min = MIN(min, GET_VALUE(j, i, l, k));
min = MIN(min, GET_VALUE(j, i, k, l));
min = MIN(min, GET_VALUE(k, l, i, j));
min = MIN(min, GET_VALUE(k, l, j, i));
min = MIN(min, GET_VALUE(l, k, i, j));
min = MIN(min, GET_VALUE(l, k, j, i));
*is_dup = pos != min;
return p + min;
}
int main(int argc, char* argv[])
{
int i, j, k, l;
int is_dup;
int val;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
for (k = 0; k < N; k++)
for (l = 0; l < N; l++) {
quad_array[i][j][k][l] = GET_VALUE(i, j, k, l);
printf("%d ", quad_array[i][j][k][l]);
}
printf("\n");
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
for (k = 0; k < N; k++)
for (l = 0; l < N; l++) {
val = *(getter(i, j, k, l, &is_dup));
printf("%d %d\n", val, is_dup);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment