Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

★ /prog/ challenge No. 666 ★ (Easy)

Name: Anonymous 2013-01-07 12:41

THE CHALLENGE:
Implement ``Tohosort'' (http://www.freewebs.com/tohosort/) 66in Lisp99 in your programming language of choice.

Post the source code of your implementation. It should at least read the input from stdin and print a sorted list after making the comparisons.

Deadline: 2013-01-21 00:00.

The programs will be judged by elegance, speed and number of comparisons made using a random list that will be published the day of the deadline. The winner will be awarded with Ten (10) שקליםSuss (that's Suss-shekels for you goyim), which is enough to pay the fee needed to cross the Sanzu River by ferry.

Name: Anonymous 2013-01-17 14:21

static uint32_t
getbits(void)
{
    uint32_t i, ret;
    char buf[3], c;
    buf[2] = 0, i = 0, ret = 0;
    printf(FOPSTR);
    while((c = getc(stdin)) != EOF)
    {
        if(isdigit(c))
        {
            if(i > 1) printf("2 digits motherfucker!\n"), abort();
            buf[i++] = c;
        }
        else if(isspace(c))
        {
            switch(atoi(buf)) {
            case 1: SETB(ret, HRtP);        break;
            case 2: SETB(ret, SoEW);        break;
            case 3: SETB(ret, PoDD);        break;
            case 4: SETB(ret, LLS);            break;
            case 5: SETB(ret, MS);            break;
            case 6: SETB(ret, EoSD);        break;
            case 7: SETB(ret, PCB);            break;
            case 8: SETB(ret, IN);            break;
            case 9: SETB(ret, PoFV);        break;
            case 10: SETB(ret, MoF);        break;
            case 11: SETB(ret, SA);            break;
            case 12: SETB(ret, UFO);        break;
            case 13: SETB(ret, TD);            break;
            case 14: SETB(ret, StB);        break;
            case 15: SETB(ret, DS);            break;
            case 16: SETB(ret, FW);            break;
            case 17: SETB(ret, IaMP);        break;
            case 18: SETB(ret, SWR);        break;
            case 19: SETB(ret, SOKU);        break;
            case 20: SETB(ret, HM);            break;
            case 21: SETB(ret, PC98);        break;
            case 22: SETB(ret, STG);        break;
            case 23: SETB(ret, PC98_STG);        break;
            case 24: SETB(ret, PHANTASMAGORIA);    break;
            case 25: SETB(ret, WINDOWS);        break;
            case 26: SETB(ret, WINDOWS_STG);    break;
            case 27: SETB(ret, FIGHTER);        break;
            case 28: SETB(ret, AYA_GAMES);        break;
            case 29: SETB(ret, MUSIC);        break;
            case 30: SETB(ret, DiPP);        break;
            case 31: SETB(ret, GFC);        break;
            case 32: SETB(ret, ZUN_MUSIC_COL);    break;
            case 33: SETB(ret, AUS);        break;
            case 34: SETB(ret, PRINT_WORKS);    break;
            case 35: SETB(ret, COMICS);        break;
            case 36: SETB(ret, KOURINDOU);        break;
            case 37: SETB(ret, MOON_WORKS);        break;
            case 38: SETB(ret, FAIRY_WORKS);    break;
            case 39: SETB(ret, WaHH);        break;
            case 40: SETB(ret, FS);            break;
            case 41: SETB(ret, LORE);        break;
            case 42: SETB(ret, BAiJR);        break;
            case 43: SETB(ret, PMiSS);        break;
            case 44: SETB(ret, GoM);        break;
            case 45: SETB(ret, SoPM);        break;
            default: return 0;
            }
            buf[0] = 0;
            buf[1] = 0;
            i = 0;
            if(c == '\n') break;
        }
        else return 0;
    }
    return ret;
}

static __inline void
printties(th *t, int i)
{
    while(t != NULL) printf("%3d: %s\n", i, t->name), t = t->tie;
}

#define PRINTSLW(t,i)    printf("%3d: %s\n", i, t->name)

static void
printls(void)
{
    printf("\n\n+++\n");
    th *l, *t;
    int i;
    for(i = 1, l = ls.top , t = l ;t != NULL; l = l->pre, t = l)
    {
        if(ISU(t))
        {
            printties(t, -1);
            break;
        }
        else
        {
            while(t != NULL)
            {
                if(t->tie != NULL) printties(t, i);
                else PRINTSLW(t,i);
                t = t->win;
                i++;
            }
        }
    }
    printf("+++\n\n");
}

#define APPLY_FILTER_INNER(flt,t,i)\
for(;i < thlen;)\
{\
    if(ISB(ths[i].app, flt))\
    {\
        list(t, &ths[i++]);\
        t = NULL;\
        break;\
    }\
    else i++;\
}

#define APPLY_FILTER(flt)    \
th * t;\
int i;\
for(i = 0; i< thlen;)\
{\
    if(ISB(ths[i].app, flt))\
    {\
        t = &ths[i++];\
        APPLY_FILTER_INNER(flt,t,i);\
    }\
    else i++;\
}\
if(t != NULL) pushb(t);\

int
main(void)
{
    setlocale(LC_ALL, "C");
    uint32_t flt;
    flt = getbits();
    if(flt)
    {
        APPLY_FILTER(flt);
    }
    else
    {
        int i = 0, j = 1;
        for(; i < thlen && j < thlen; i += 2, j += 2)
            list(&ths[j], &ths[i]);
        if(j == thlen) pushb(&ths[i]);
    }
    dicksort();
    printls();
    return EXIT_SUCCESS;
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List