1
Name:
Anonymous
2013-01-07 12:41
THE CHALLENGE:
Implement ``Tohosort'' (
http://www.freewebs.com/tohosort/ )
66 in 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.
67
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;
}