SPOILER
If you don't want to know the solution, don't execute this program.
#include <stdio.h>
int main(void)
{
int dc, dh, dl, dp, ds, de, dv;
int ma, mb, mf, ml, mm, me, mp;
int ed, ee, eh, en, ep, es, et;
/*************************************************/
/* Drivers first. */
/* de = Senna. */
/*************************************************/
for(dc = 3; dc <= 6; dc++) /* From C7, Coulthard not first or second.
From C5, not last. */
for(dh = 5; dh <= 7; dh++) /* From C2, Hakkinen not in top 4 */
if(dh != dc)
for(dl = 2; dl <= 6; dl++) /* C3: Lauda not first or last */
if(dl != dc && dl != dh)
for(dp = dl + 1; dp <= 7; dp++) /* C3: Prost finished after Lauda */
if(dp != dc && dp != dh) /* no need to test for Pr != La */
for(ds = 1; ds <= 7; ds++)
if(ds != dc && ds != dh && ds != dl && ds != dp)
for(de = 3; de <= 7; de++) /* From C7, Senna not first or second. */
if(de != dc && de != dh && de != dl && de != dp && de != ds)
for(dv = 1; dv <= 5; dv++) /* From C3, Villeneuve not 6th or 7th */
if(dv != dc && dv != dh && dv < dl && dv != ds && dv != de) /* No
need to test against Prost because Prost already known to be > Lauda */
/*************************************************/
/* Drivers done. 158 possible solutions to date. */
/*************************************************/
/* Now for manufacturers. me = Mercedes. */
/*************************************************/
for(ma = 2; ma <= 7; ma++) /* C5: Alfa not first. */
if(ma > dc) /* C5: Coulthard beat the Alfa */
for(mb = 5; mb <= 7; mb++) /* C2: Bugatti in last three. */
if(mb != ma)
if(mb != dh) /* C2: Hakkinen not in Bugatti */
for(mf = 1; mf <= 3; mf++) /* C1: Ferrari on podium */
if(mf != ma) /* Because of C1 and C2 above, no need to test Ferrari
against Bugatti */
for(ml = 1; ml <= 7; ml++)
if(ml != ma && ml != mb && ml != mf)
for(mm = 2; mm <= 7; mm++) /* C4: Maserati not first */
if(mm != ma && mm != mb && mm != mf && mm != ml)
for(me = 1; me <= 7; me++)
if(me != ds && me != dv) /* C6: neither Schu nor Ville are in the Merc */
if(me != ma && me != mb && me != mf && me != ml && me != mm)
for(mp = 3; mp <= 7; mp++) /* C7: Porsche not in top two */
if(mp != dc && mp != de) /* C7: Porsche not driven by Coulthard or
Senna */
if(mp != ma && mp != mb && mp != mf && mp != ml && mp != mm && mp != me)
/*************************************************/
/* Manufacturers done. Solutions whittled down */
/* from 158 possible solutions to a mere 5820(!) */
/*************************************************/
/* Now for engines. et = steam. */
/*************************************************/
for(ed = 1; ed <= 7; ed++)
if(ed != me) /* C6: Merc doesn't use diesel */
for(ee = 5; ee <= 7; ee++) /* C2: electric in last three */
if(ee != ed)
if(ee != mb) /* C2: Bugatti not electric */
if(ee != dh) /* C2: Hakkinen not electric */
for(eh = 1; eh <= 3; eh++) /* C1: hydro on podium */
if(eh != ed && eh != ee)
if(eh != mf) /* C1: Ferrari not hydro */
for(en = 3; en < mm; en++) /* C4: nuclear beat Maserati; C7: nuclear
not in top two. */
if(en != ed && en != ee && en != eh)
if(en != dc && en != de && en != mp) /* C7: nuclear not Coulthard,
Senna, or Porsche */
for(ep = 3; ep <= 7; ep++)
if(ep != ed && ep != ee && ep != eh && ep != en)
if(ep != dc && ep != de && ep != mp) /* C7: propane not Coulthard,
Senna, or Porsche */
for(es = 3; es <= 7; es++)
if(es != ed && es != ee && es != eh && es != en && es != ep)
if(es != dc) /* C5: Coulthard not solar */
for(et = 1; et <= 3; et++) /* C1: steam on podium */
if(et != ed && et != ee && et != eh && et != en && et != ep && et != es)
if(et != mf) /* C1: Ferrari not steam */
if(et != dl && et != ds && et != dv && et != me) /* C6: steam not
Lauda, Schu, Ville, Merc */
if(!(mf == 1 && eh == 2 && et == 3)) /* C1: the specific order 1.
Ferrari 2. Hydro 3. Steam is ruled out. */
{
int pos = 0;
char *driver[8] = {0};
char *manufacturer[8] = {0};
char *engine[8] = {0};
driver[dc] = "Coulthard";
driver[dh] = "Hakkinen";
driver[dl] = "Lauda";
driver[dp] = "Prost";
driver[ds] = "Schumacher";
driver[de] = "Senna";
driver[dv] = "Villeneuve";
manufacturer[ma] = "Alfa Romeo";
manufacturer[mb] = "Bugatti";
manufacturer[mf] = "Ferrari";
manufacturer[ml] = "Lamborghini";
manufacturer[mm] = "Maserati";
manufacturer[me] = "Mercedes-Benz";
manufacturer[mp] = "Porsche";
engine[ed] = "Diesel";
engine[ee] = "Electric";
engine[eh] = "Hydrogen";
engine[en] = "Nuclear";
engine[ep] = "Propane";
engine[es] = "Solar";
engine[et] = "Steam";
printf("Pos Driver Manufacturer Engine\n");
for(pos = 1; pos < 8; pos++)
{
printf(" %d %-10s %-13s %-8s\n", pos, driver[pos],
manufacturer[pos], engine[pos]);
}
}
return 0;
}
--
Richard Heathfield
Email: rjh at cpax dot org dot uk
"Usenet is a strange place" - dmr 29 July 1999
Sig line 4 vacant - apply within