Měli sme udělat textový preprocesor -- něco na způsob céčkového preprocesoru, akorát to umělo jenom #define. Vstup byl ze souboru (a jen z něj), výstup na stdout -- výstupem byl text vzniklý expanzí zadaných maker.
Mělo to zvládat definici jak bezparametrických maker, tak maker s patametry -- to jest, #define foo bar i #define makro(a, b) (a) + (b). Syntax obvyklá, akorát se pro zjednodušení předpokládalo, že příkaz #define začíná vždy na začátku řádky (takže žádné mezery před # ani žádné mezery mezi # a define) a taky, že vstup je korektní. Mělo to zvládat i makra co se odkazují na jiná makra, to jest
#define transpozice1(a, b) b a #define transpozice2(a, b) transpozice1(b, a) transpozice2(ahoj, svete)
vyprodukuje výstup, ve kterém je "ahoj svete".
Rekurze byla explicitně zakázaná, takže jakmile by makro chtělo volat samo sebe (ať už přímo či nepřímo), tak program měl skončit s chybou. Též to mělo zvládat víceřádková makra, kde pokračování řádky se dělalo standardně zpětným lomítkem na konci řádky.
Jaká přesně je úspěšnost, to netuším -- já odcházel jako druhý úspěšný -- ale docela by mě to zajímalo. x)