void do_tr4(t_list **a, t_list **b, t_list **in) { int curr; int j; curr = lstlen(*b) - 1; while (lstlen(*b) > lstlen(*a)) { j = 0; while (j++ < 4) if ((*b)->val == curr || (*b)->val == curr - 1) make_move(a, b, in, PA); else make_move(a, b, in, RB); if (*a && (*a)->next && (*a)->val > (*a)->next->val) make_move(a, b, in, SA); curr -= 2; } while (lstlen(*b)) { make_move(a, b, in, PA); make_move(a, b, in, PA); if (*a && (*a)->next && (*a)->val > (*a)->next->val) make_move(a, b, in, SA); } }
void print_list_trimap(int *map1, int *map2, int *map3, t_list *l) { int count; t_list *head; int j; ft_printf("----------------------\n"); count = lstlen(l); while (l) { head = l; j = MAX(exp2(log2(count) / 2), 4); while ((l = l->next) && j--) ft_printf(C_256 "[%-3d]-" RESET_ANSI, COLOR(map1[l->val]), l->val); ft_printf(" "); j = MAX(exp2(log2(count) / 2), 4); l = head; while ((l = l->next) && j--) ft_printf(C_256 "[%-3d]-" RESET_ANSI, COLOR(map2[l->val]), l->val); ft_printf(" "); j = MAX(exp2(log2(count) / 2), 4); l = head; while ((l = l->next) && j--) ft_printf(C_256 "[%-3d]-" RESET_ANSI, COLOR(map3[l->val]), l->val); ft_printf("\n"); } }
void do_in4_in8(t_list **a, t_list **b, t_list **in) { char **patterns; int count; int *abcd; int *ops; int j; patterns = load_file("patterns/IN4"); count = lstlen(*a); abcd = make_sequence(count, 1, 1, 4); while (count) { ops = make_instr_arr(recognize_4pat(patterns, \ grab_next_n(*a, 4), abcd)); while (*ops != -1) make_move(a, b, in, *ops++); j = -1; while (++j < 4) abcd[j] = abcd[j] + 4; count -= 4; } free(abcd); free_split(patterns); }
void do_tr4_in8(t_list **a, t_list **b, t_list **in) { char **patterns; int *abcd; t_kit *k; patterns = load_file("patterns/IN8"); abcd = make_sequence(lstlen(*a) / 4 + 1, -1, 1, 4); while (lstlen(*a) != lstlen(*b)) { k = new_kit(a, b, in, abcd); do_ops_kit(make_instr_arr(recognize_8pat(patterns, \ grab_next_n(*a, 8), abcd)), k, 8, 0); add_vec(abcd, make_sequence(2, -4, 2, 4), 4); } free(abcd); free_split(patterns); }
void check(int err) { if(err) { fprintf(stderr, "utb-list: out of memory\n"); lstfree(ls); exit(1); } printf("myMalloc: prideluji 288 bajtu, celkove prideleno %d bajtu\n", 288*lstlen(ls)); }
int is_rotationally_sorted(t_list *list) { int count; t_list *l; count = lstlen(list); l = dupe_list(list); while (count--) { if (is_sorted(l)) return (1); rot_up(&l); } free_list(l); return (0); }
int status_display(t_kit *k, int *map, int *map2) { static int inst; int j; ft_printf("\e[1;1H\e[2J"); status_print(*(k->a), *(k->b), map, map2); j = lstlen(*(k->a)) > lstlen(*(k->b)) ? lstlen(*(k->a)) : lstlen(*(k->b)); while (j++ < 64) ft_printf("\n"); ft_printf("+%d, %d\n", lstlen(*(k->in)) - inst, lstlen(*(k->in))); inst = lstlen(*(k->in)); getchar(); return (1); }
void sort(t_env *e, int len) { int i; int x; int tmp; int *tab; i = -1; x = len; tmp = 0; tab = gettab(e->a->begin, len); while (x-- > 3) { ontop(e, tab[++i], lstlen(e->a)); push(e, 'b'); tmp++; if (verifsort(e->a)) break ; } if (len - tmp == 3) lsort(e); while (tmp-- > 0) push(e, 'a'); }
main(void) { struct lstnode n = {0}; int b; puts("List test program"); puts("Zadejte pismeno 0-A pro jednu z nasledujicich cinnosti:"); puts("0: Init,"); puts("1: Actualize,"); puts("2: Insert_First,"); puts("3: First,"); puts("4: Copy_First,"); puts("5: Delete_First,"); puts("6: Post_Delete,"); puts("7: Post_Insert,"); puts("8: Copy,"); puts("9: Succ,"); puts("A: Is_Active,"); puts("M: Vypis menu"); puts("CTRL+Z (Win) nebo CTRL+D (Unix): Konec programu"); menu: if(!gets(t)) goto out; printf("Vase volba=%c\n", t[0]); switch(t[0]) { case '0': puts("Init - inicializace seznamu"); break; case '1': puts("Actualize - prepis dat aktivni polozky"); /* read but discard if no active */ read(ls.active ? ls.active : &n); break; case '2': puts("Insert_First - vlozeni nove polozky na 1. misto seznamu"); read(&n); check(lstinsfirst(&ls, n)); break; case '3': puts("First - nastaveni aktivni polozky na 1.prvek"); ls.active = ls.first; break; case '4': puts("Copy_First - Vypis 1.prvku seznamu"); if(!ls.first) error("Chyba v List_Copy_First - first=NULL"); printlstnode(*ls.first); break; case '5': puts("Delete_First - vymaz 1.prvek"); b = ls.first; lstrmfirst(&ls); if(b) printf("myFree: uvolnuji 288 bajtu, celkove prideleno %d bajtu\n", 288*lstlen(ls)); break; case '6': puts("Post_Delete - vymaz prvek za aktivnim prvkem"); b = ls.first && ls.first->next; lstrmafter(&ls); if(b) printf("myFree: uvolnuji 288 bajtu, celkove prideleno %d bajtu\n", 288*lstlen(ls)); break; case '7': puts("Post_Insert - vloz novy prvek za aktivni prvek"); read(&n); if(ls.active) check(lstinsafter(ls, n)); break; case '8': puts("Copy - ziskani hodnoty aktivniho prvku "); if(!ls.active) error("List_Copy error"); printlstnode(*ls.active); break; case '9': puts("Succ - posuv ukazatel aktivniho prvku na dalsi prvek"); if(ls.active) ls.active = ls.active->next; break; case 'A': case 'a': puts("Is_Active - zjisteni, zda je seznam aktivni"); printf("Is_Active=%s\n", ls.active == ls.first && ls.first ? "true" : "false"); break; default: goto out; } printstate(); puts(""); puts("Zadejte znak 0-A, EOF(tj. CTRL+Z nebo CTRL+D)=Konec, M=Menu:"); puts("************************************************************"); goto menu; out: puts("Konec souboru, koncime."); lstfree(ls); return 0; }
void showfree() { printf("myFree: uvolnuji 288 bajtu, celkove prideleno %d bajtu\n", 288*lstlen(ls)); }