65
Name:
Anonymous
2013-01-17 14:21
static th ths[] =
{
_2HU(REIMU, "Reimu Hakurei"), _2HU(MARI, "Marisa Kirisame"),
_2HU(PATCHY, "Patchouli Knowledge"),
_2HU(REMI, "Remilia Scarlet"), _2HU(AYA, "Aya Shameimaru"),
_2HU(YUKARI, "Yukari Yakumo"), _2HU(PADS, "Sakuya Izayoi"),
_2HU(YUYU, "Yuyuko Saigyouji"), _2HU(YOUMU, "Youmu Konpaku"),
_2HU(ALICE, "Alice Margatroid"),
_2HU(CIRNO, "Cirno"),
_2HU(SUIKA, "Suika Ibuki"), _2HU(RAN, "Ran Yakumo"),
_2HU(CHEN, "Chen"), _2HU(SUWAKO, "Suwako Moriya"),
_2HU(KANAKO, "Kanako Yasaka"), _2HU(SANAE, "Sanae Kochiya"),
_2HU(NITORI, "Nitori Kawashiro"),
_2HU(FLANDRE, "Flandre Scarlet"),
_2HU(TEI, "Inaba Tei"), _2HU(HONG, "Hong Meiling"),
_2HU(EIRIN, "Eirin Yagokoro"), _2HU(UDONGE, "Reisen Udongein Inaba"),
_2HU(KOMACHI, "Komachi Onozuka"),
_2HU(LUNA, "Luna Child"),
_2HU(MYSTIA, "Mystia Lorelei"), _2HU(NAZRIN, "Nazrin"),
_2HU(OKUU, "Utsuho Reiuji"), _2HU(NUE, "Nue Houjuu"),
_2HU(STAR, "Star Sapphire"), _2HU(SUNNY, "Sunny Milk"),
_2HU(LILY, "Lily White"), _AKI("Shizuha"),
_AKI("Minoriko"), _2HU(HINA, "Hina Kagiyama"),
_2HU(KUMOI, "Ichirin Kumoi"), _2HU(WRIGGLE, "Wriggle Nightbug"),
_2HU(MOKOU, "Fujiwara no Mokou"),
_2HU(KAGUYA, "Kaguya Houraisan"),
_2HU(KEINE, "Keine Kamishirasawa"),
_2HU(LETTY, "Letty Whiterock"), _2HU(RUMIA, "Rumia"),
PHU("Lunasa"), PHU("Lyrica"),
PHU("Merlin"), _2HU(YUUKA, "Yuuka Kazami"),
_2HU(KISUME, "Kisume"), _2HU(TENSHI, "Tenshi Hinanawi"),
_2HU(PARSEE, "Parsee Mizuhashi"),
_2HU(YUUGI, "Yuugi Hoshiguma"), KHU("Satori"), KHU("Koishi"),
_2HU(MURASA, "Minamitsu Murasa"),
_2HU(KOGASA, "Kogasa Tatara"), _2HU(YAMA, "Eiki Shiki Yamaxanadu"),
_2HU(MIMA, "Mima"), _2HU(YAMAME, "Yamame Kurodani"),
_2HU(ORIN, "Rin Kaenbyou"), _2HU(SHOU, "Shou Toramaru"),
_2HU(MOMIJI, "Momiji Inubashiri"),
_2HU(UNZAN, "Unzan"), _2HU(MEDI, "Medicine Melancholy"),
_2HU(IKU, "Iku Nagae"), _2HU(YOSHIKA, "Yoshika Miyako"),
_2HU(SEIGA, "Seiga Kaku"), _2HU(MAMIZOU, "Mamizou Futatsuiwa"),
_2HU(HATATE, "Hatate Himekaidou"),
_2HU(HIJIRI, "Byakuren Hijiri"),
_2HU(GENJI, "Genji"), _2HU(SHANGHAI, "Shanghai"),
_2HU(AKYU, "Hieda no Akyu"), _2HU(FUTO, "Mononobe no Futo"),
_2HU(KYOUKO, "Kyouko Kasodani"),
_2HU(RINNOSUKE, "Rinnosuke Morichika"),
_2HU(DAICHAN, "Daiyousei"), _2HU(TOJIKO, "Soga no Tojiko"),
_2HU(MIKO, "Toyosatomimi no Miko"),
_2HU(KASEN, "Ibara Kasen"), _2HU(KOA, "Koakuma"),
_2HU(HOURAI, "Hourai"), _2HU(SOKU, "Goliath Doll"),
_2HU(FS, "Kosuzu Motoori"), MHU("Reisen 2"),
WHU("Toyohime"), WHU("Yorihime"),
_PoDD("Ellen"), _PoDD("Kotohime"),
_PoDD("Kana"), _PoDD("Rikako"),
_PoDD("Chiyuri"), _PoDD("Yumemi"),
_PoDD("Ruukoto"), _MS("Sara"),
_MS("Louise"), _MS("Yuki"),
_MS("Mai"), _MS("Yumeko"),
_MS("Shinki"), _LLS("Orange"),
_LLS("Kurumi"), _LLS("Elly"),
_LLS("Mugetsu"), _LLS("Gengetsu"),
_SoEW("Rika"), _SoEW("Flower Tank"),
_SoEW("Evil Eye Sigma"), _SoEW("Meira"),
_HRtP("Shingyoku"), _HRtP("Yuugen Magan"),
_HRtP("Elis"), _HRtP("Sariel"),
_HRtP("Kikuri"), _HRtP("Konngara"),
_GFC("Renko Usami"), _GFC("Maribel Hearn"),
_2HU(EoSD, "Rin Satsuki"), _2HU(KOURINDOU, "`Tokiko'"),
NM(SoEW, "Tank"), _SoEW("`Noroiko'"),
NM(SoEW, "Magic Things"), NM(SoEW, "Angel"),
NHU(LLS, "Flower"), _LLS("Magic Mirror (Demon)"),
_MS("Magic Mirror (Angel)"), NM(LLS, "Ball of light"),
NM(MS, "Card"), NM(TD, "Divine Spirit"),
NM(LLS, "Fairy(?)"), NM(MS, "Demon"),
UHU(DiPP, "girl on DiPP Jacket"),
UHU(WaHH, "Dragon"), _2HU(PMiSS, "Dragon God"),
/* stage chara */
_2HU(FAIRY_MAID, "Fairy Maid"), _2HU(EVIL_EYE, "Evil Eye"),
_SoEW("Five Magic Stones"), _2HU(HAIRBALL, "Hairball"),
_PoDD("Hoshizako"), _2HU(BAKEBAKE, "Bakebake"),
_2HU(SUNFLOWER_FAIRY, "Sunflower Fairy"),
_2HU(ZOMBIE_FAIRY, "Zombie Fairy"),
/* weapons chara */
_PoDD("Mimi-chan"),
/* animals */
_2HU(SOKU, "Giant Catfish"), _2HU(BAiJR, "Giant Toad"),
_2HU(WaHH, "Unnamed Dapeng"), _2HU(MOON_WORKS, "Sake bug"),
/* pets */
_2HU(AYA_CROW, "Aya's Crow"), _MS("Alice's Cat"),
_PoDD("Sokrates"), _2HU(FAIRY_WORKS, "Tsuchinoko"),
UHU(WaHH, "Raijuu"), _2HU(WaHH, "Kanda"),
_2HU(WaHH, "Kume")
};
66
Name:
Anonymous
2013-01-17 14:21
static thls ls;
static size_t thlen = (sizeof(ths) / sizeof(th));
#define SETB(x, b) (x |= b)
#define ISB(x, b) (x & b)
#define ISU(x) ISB(x->_, UNKNOWN)
static __inline int
select_(void)
{
int selection = 0;
int i = scanf("%d", &selection);
if(i == 1) return selection;
else if(i == EOF) printf("scanf eofuk'd; no 2hus for you\n"), abort();
return -1;
}
#define NEWL(e) ls.btm = e, ls.top = e
static __inline void
pushb(th *t)
{
if(ls.btm != NULL) t->pre = ls.top, ls.top = t;
else NEWL(t);
}
static __inline void
pushf(th *t)
{
if(ls.btm != NULL) ls.btm->pre = t, ls.btm = t;
else NEWL(t);
}
#define WIN_(w,l) w->win = l
#define TIE_(t,x) t->tie = x
static __inline void
addt(th **a, th *b)
{
th *t = (*a);
for(; t->tie != NULL; t = t->tie);
TIE_(t, b), b->win = NULL;
}
static __inline void
pushu(th *t)
{
if(ls.btm != NULL)
{
if(ISU(ls.btm)) addt(&ls.btm, t);
}
else SETB(t->_, UNKNOWN), pushf(t);
}
#define USTR "\n0 - Both are unknown"
#define THSTR "\n1 - %s\n2 - %s"
#define TIESTR "\n3 - Tie"
#define U2STR "\n4 - Don't know %s\n5 - Don't know %s\n"
#define PRIN2HU(x,y) printf(THSTR TIESTR "\n:", x->name, y->name)
#define PRINTUHU(x,y) printf(USTR THSTR TIESTR U2STR ":",\
x->name, y->name, x->name, y->name)
static void
dicksort(void)
{
th *n1, *n2, *pw;
if(ISU(ls.top)) return;
while((ls.top->pre != NULL) && !ISU(ls.top->pre))
{
pw = NULL, n1 = ls.top, n2 = n1->pre;
ls.top->pre = n2->pre, n2->pre = NULL;
INNERLOOP:
PRIN2HU(n1, n2);
switch(select_()) {
case 1:
pw = n1;
n1 = n1->win;
if(!n1)
{
WIN_(pw, n2);
continue;
}
goto INNERLOOP;
case 2:
{
th *ne = n2->win;
if(n1 == ls.top)
{
n2->pre = ls.top->pre;
ls.top->pre = NULL;
ls.top = n2;
}
else
pw->win = n2;
WIN_(n2, n1);
if(ne == NULL)
continue;
pw = n2;
n2 = ne;
goto INNERLOOP;
}
case 3:
{
th *ne = n2->win, *te = n1->win;
addt(&n1, n2);
pw = n1;
n1 = te, n2 = ne;
if(n1 == NULL && n2 == NULL)
continue;
else if(n1 == NULL)
{
pw->win = n2;
continue;
}
else if(n2 == NULL)
{
pw->win = n1;
continue;
}
else
goto INNERLOOP;
}
default:
goto INNERLOOP;
}
}
}
static void
list(th *th1, th *th2)
{
while(1)
{
PRINTUHU(th1, th2);
switch(select_()) {
case 0: TIE_(th1, th2); pushu(th1); return;
case 1: WIN_(th1, th2); pushb(th1); return;
case 2: WIN_(th2, th1); pushb(th2); return;
case 3: TIE_(th1, th2); pushb(th1); return;
case 4: pushu(th1); pushb(th2); return;
case 5: pushu(th2); pushb(th1); return;
default: continue;
}
}
}
#define FOPT "Filter options:\n"
#define FR1 "\t 0 - ALL\t 1 - HRtP\t 2 - SoEW\t 3 - PoDD\n"
#define FR2 "\t 4 - LLS\t 5 - MS\t\t 6 - EoSD\t 7 - PCB\n"
#define FR3 "\t 8 - IN\t\t 9 - PoFV\t10 - MoF\t11 - SA\n"
#define FR4 "\t12 - UFO\t13 - TD\t\t14 - StB\t15 - DS\n"
#define FR5 "\t16 - FW\t\t17 - IaMP\t18 - SWR\t19 - SOKU\n"
#define FR6 "\t20 - HM\t\t21 - PC98\t22 - STG\t23 - PC98 STG\n"
#define FR7 "\t24 - PHANTASM\t25 - Windows\t26 - WIN STG\t27 - Fighter\n"
#define FR8 "\t28 - Aya games\n\t29 - Music\t30 - DiPP\t31 - GFC\n"
#define FR9 "\t32 - ZUN music\t33 - Akyu Untouched\n\t34 - Print\t35 - Manga\n"
#define FR10 "\t36 - Kourindou\t37 - Bougetsu\t38 - Sangetsu\t39 - Ibarakasen\n"
#define FR11 "\t40 - Suzunaan\t41 - Lore\t42 - BAiJR/SDV\t43 - PMiSS\n"
#define FR12 "\t44 - Grimoire\t45 - Symposium\n"
#define FDOPT "default: ALL\n:"
#define FOPSTR FOPT FR1 FR2 FR3 FR4 FR5 FR6 FR7 FR8 FR9 FR10 FR11 FR12 FDOPT
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;
}