/* ********************************************** 
             Vowel-counting xmas tree.
  
   Usage
   -----
   1) Compile using gcc/compatible
   2) ./a.out "a string to count vowels in"
   3) enjoy!

   Special Features
   ----------------
   * Works without creating any variables
     (reuses calling ones to count)
   * Optimised for English letter probabilities.
   * Looks like a fucking tree.

   Steve Wattam, 06-12-11,
   stephenwattam.com
 * *********************************************** */
#include <stdio.h>
#define I int
#define B C(C(b))
#define C(a) *a
#define P ++ 
#define F(a) a P
#define A(a, b) t(a,b,&&)
#define O(a, b) t(a,b,||)
#define t(a,b,c) a c b
#define b(a) (a)
#define E(a) t(B,a,==)
#define r return
#define z 0
#define i if
#define w while
#define l(a, b) t(a,b,<=)
#define g(a, b) t(a,b,>=)
#define p(a, b) a(b)
#define h(a) a;
#define k(a,b) a b
#define f(a, b) h(a b)
#define c(a, b) a, b
#define o printf
#define q(a) #a[0]
#define m(a) #a
#define M m(%i vowels found.\n)
#define d do
#define n(a, b) main(a, b)
#define X(a, b, c) a c{b}


                        X
                       (I,
                      t(f(
                     p(i,A(
                    F(b),(t(
                   a,2,-=))))
                  ,r z),h(p(o,
                 c(M,a))),f(f(d
                ,(A(g(B,q(A)),A(
                      l(B,
                     q(u)),
                    A(t(B,1,
                   &),A((O(E(
                  q(e)),O(E(q(
                 a)),O(E(q(o)),
                O(E(q(i)),O(E(q(
               u)),O(E(q(E)),O(E(
              q(A)),O(E(q(O)),O(E(
             q(I)),E(q(U)))))))))))
            ),F(a))))))),p(w,F(C((C(
                     b)))))
                     )),n(k
                     (I,a),
                   k(char,B)))
