debug compare string tool, and modify permutation functions
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
CC=gcc
|
CC=gcc
|
||||||
TOOLDIR=$(PWD)/../ytools_t
|
TOOLDIR=$(PWD)/../ytools_t
|
||||||
|
|
||||||
INCLUDE_DIR=$(TOOLDIR)/src
|
INCLUDE_DIR=$(TOOLDIR)/include
|
||||||
CFLAGS=-I$(INCLUDE_DIR) -I./src
|
CFLAGS=-I$(INCLUDE_DIR) -I./src
|
||||||
|
|
||||||
#SRC_DIR=$(ROOT_DIR)/src
|
#SRC_DIR=$(ROOT_DIR)/src
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ size_t TabToPlaceOpt1_##type(const PERMUTATION_##type *p){\
|
|||||||
}\
|
}\
|
||||||
else if (mx > tb[i]) {\
|
else if (mx > tb[i]) {\
|
||||||
size_t pli = 0; /* si c est le plus à droite 0 si pas de superieur à lui, on incremente si on trouve plus petit*/\
|
size_t pli = 0; /* si c est le plus à droite 0 si pas de superieur à lui, on incremente si on trouve plus petit*/\
|
||||||
for (size_t j = sz - 1; j > i; j--) {\
|
for (long int j = sz - 1; j > i; j--) {\
|
||||||
if (tb[i] > tb[j]) {\
|
if (tb[i] > tb[j]) {\
|
||||||
pli++;\
|
pli++;\
|
||||||
}\
|
}\
|
||||||
@@ -174,12 +174,19 @@ size_t TabToPlaceNotab_##type(const PERMUTATION_##type *p){\
|
|||||||
/*complexité sz*sz/2 */\
|
/*complexité sz*sz/2 */\
|
||||||
PERMUTATION_TYPE_SIZE_T * PlaceToTab_##type(PERMUTATION_##type *p, size_t pl){\
|
PERMUTATION_TYPE_SIZE_T * PlaceToTab_##type(PERMUTATION_##type *p, size_t pl){\
|
||||||
size_t sz = p->size;\
|
size_t sz = p->size;\
|
||||||
PERMUTATION_TYPE_SIZE_T *t_p = CREATE_PERMUTATION_TYPE_SIZE_T(sz);\
|
/*PERMUTATION_TYPE_SIZE_T *t_p = CREATE_PERMUTATION_TYPE_SIZE_T(sz);*/\
|
||||||
size_t *tb= t_p->perm;\
|
PERMUTATION_TYPE_SIZE_T *t_p = TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(p);\
|
||||||
|
type *save_perm = malloc(sz*sizeof(type));\
|
||||||
|
long int *tb= t_p->perm;\
|
||||||
size_t a = pl;\
|
size_t a = pl;\
|
||||||
size_t pltbi;\
|
size_t pltbi;\
|
||||||
size_t size = 1;\
|
/*size_t size = 1;*/\
|
||||||
for (long int i = 0;i < sz;i++) tb[i] = 0;\
|
for (long int i = 0;i < sz;i++) {\
|
||||||
|
/*tb[i] = 0;*/\
|
||||||
|
save_perm[tb[i]]=p->perm[i];\
|
||||||
|
PRINT_DEBUG_("%ld => %s \n",tb[i],type##_TO_STR(p->perm[i]));\
|
||||||
|
tb[i]=0;\
|
||||||
|
}\
|
||||||
\
|
\
|
||||||
for (long int i = sz - 1; i >= 0; i--) {\
|
for (long int i = sz - 1; i >= 0; i--) {\
|
||||||
pltbi = a % (i + 1);\
|
pltbi = a % (i + 1);\
|
||||||
@@ -188,7 +195,7 @@ PERMUTATION_TYPE_SIZE_T * PlaceToTab_##type(PERMUTATION_##type *p, size_t pl){\
|
|||||||
tb[sz - 1 - pltbi] = i;\
|
tb[sz - 1 - pltbi] = i;\
|
||||||
}\
|
}\
|
||||||
else {\
|
else {\
|
||||||
size_t lt = 0, j = sz - 1;\
|
long int lt = 0, j = sz - 1;\
|
||||||
while (lt < pltbi && j >= 0) {\
|
while (lt < pltbi && j >= 0) {\
|
||||||
if (tb[j--] < i) {\
|
if (tb[j--] < i) {\
|
||||||
lt++;\
|
lt++;\
|
||||||
@@ -201,7 +208,8 @@ PERMUTATION_TYPE_SIZE_T * PlaceToTab_##type(PERMUTATION_##type *p, size_t pl){\
|
|||||||
}\
|
}\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
for (long int i = 0;i < sz;i++) p->perm[i] = p->perm[tb[i]];\
|
/*for (long int i = 0;i < sz;i++) p->perm[i] = save_perm[tb[i]];*/\
|
||||||
|
for (long int i = 0;i < sz;i++) p->perm[i] = save_perm[tb[i]];\
|
||||||
return t_p;\
|
return t_p;\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
|
|||||||
@@ -157,30 +157,51 @@ TEST(){
|
|||||||
TEST(){
|
TEST(){
|
||||||
|
|
||||||
PERMUTATION_TYPE_CHAR *p_char = CREATE_PERMUTATION_TYPE_CHAR(6);
|
PERMUTATION_TYPE_CHAR *p_char = CREATE_PERMUTATION_TYPE_CHAR(6);
|
||||||
|
/*
|
||||||
p_char->perm[0]='B';
|
p_char->perm[0]='B';
|
||||||
p_char->perm[1]='A';
|
p_char->perm[1]='A';
|
||||||
p_char->perm[2]='Y';
|
p_char->perm[2]='Y';
|
||||||
p_char->perm[3]='C';
|
p_char->perm[3]='C';
|
||||||
p_char->perm[4]='D';
|
p_char->perm[4]='D';
|
||||||
p_char->perm[5]='Z';
|
p_char->perm[5]='Z';
|
||||||
|
*/
|
||||||
|
p_char->perm[0]='6';
|
||||||
|
p_char->perm[1]='1';
|
||||||
|
p_char->perm[2]='2';
|
||||||
|
p_char->perm[3]='3';
|
||||||
|
p_char->perm[4]='4';
|
||||||
|
p_char->perm[5]='5';
|
||||||
|
p_char->perm[6]='\0';
|
||||||
|
|
||||||
PRINTF("init :%s \n",p_char->perm);
|
PRINTF("init :%s \n",p_char->perm);
|
||||||
PERMUTATION_TYPE_SIZE_T *tab_45 = TRANSLATE_TO_SET_THEORIC_SIZE_T_TYPE_CHAR(p_char);
|
PERMUTATION_TYPE_SIZE_T *tab_45 = TRANSLATE_TO_SET_THEORIC_SIZE_T_TYPE_CHAR(p_char);
|
||||||
for(size_t i=0; i<p_char->size; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]);
|
for(size_t i=0; i<p_char->size; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]);
|
||||||
|
|
||||||
|
//
|
||||||
size_t pl = TabToPlaceAlgo_TYPE_CHAR(p_char);
|
size_t pl = TabToPlaceAlgo_TYPE_CHAR(p_char);
|
||||||
//size_t pl = TabToPlaceOpt1_TYPE_CHAR(p_char);
|
//size_t pl = TabToPlaceOpt1_TYPE_CHAR(p_char);
|
||||||
PRINTF("sa place est :%ld \n", pl);
|
PRINTF("sa place est :%ld \n", pl);
|
||||||
|
long int rank=450-1;
|
||||||
|
/* in the article the rank is between 1 to n! , here the rank is between 0 to n! -1 */
|
||||||
|
tab_45 = PlaceToTab_TYPE_CHAR(p_char, rank);
|
||||||
|
|
||||||
tab_45 = PlaceToTab_TYPE_CHAR(p_char, pl+1);
|
char * expect_res="652413";
|
||||||
|
/*EXPECT_EQ_TYPE_STRING("652413", expect_res);*/ /* the base is 1,2,3,4,5,6 */
|
||||||
|
EXPECT_EQ_TYPE_STRING(expect_res, p_char->perm); /* the base is 1,2,3,4,5,6 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* for(size_t i=0; i<p_char->size; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]);
|
||||||
|
PRINTF("ret %ld :%s \n",rank,p_char->perm);
|
||||||
|
|
||||||
|
for(long int j=0; j<6; ++j){
|
||||||
|
tab_45 = PlaceToTab_TYPE_CHAR(p_char, j);
|
||||||
|
|
||||||
for(size_t i=0; i<p_char->size; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]);
|
for(size_t i=0; i<p_char->size; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]);
|
||||||
/* tab_45 = PlaceToTab_TYPE_CHAR(p_char,45);
|
PRINTF("ret %ld :%s \n",j,p_char->perm);
|
||||||
|
}
|
||||||
PRINTF("ret :%s \n",p_char->perm);
|
|
||||||
for(size_t i=0; i<sz; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|||||||
Binary file not shown.
@@ -102,8 +102,10 @@ TYPE_STRING TYPE_STRING_TO_STR(TYPE_STRING var){
|
|||||||
int
|
int
|
||||||
COMPARE_N_TYPE_STRING(const void *a,const void* b)
|
COMPARE_N_TYPE_STRING(const void *a,const void* b)
|
||||||
{
|
{
|
||||||
PRINT_DEBUG_("a=%s, b=%s\n",(char*)a, (char*)b);
|
char **aa=(char**)a;
|
||||||
return strcmp(( char*)a,( char*)b);
|
char **bb=(char**)b;
|
||||||
|
PRINT_DEBUG_("a=%s, b=%s\n",*aa, *bb);
|
||||||
|
return strcmp(*aa,*bb);
|
||||||
}
|
}
|
||||||
|
|
||||||
void COPY_ARRAY_TYPE_STRING(char** dst, const char** src, size_t size)
|
void COPY_ARRAY_TYPE_STRING(char** dst, const char** src, size_t size)
|
||||||
|
|||||||
Reference in New Issue
Block a user