program test; type byte_row = array[1..5] of byte; word_row = array[1..5] of word; const geboorte : word_row = (1814, 1851, 1855, 1875, 1880); sterf : word_row = (1896, 1925, 1941, 1956, 1960); locatie : byte_row = (1,2,3,4,5); Assoer : byte = 1; Babylon : byte = 2; Knossos : byte = 3; Oer : byte = 4; Olympia : byte = 5; Andrae : byte = 1; Curtius : byte = 2; Evans : byte = 3; Koldewey : byte = 4; Woolley : byte = 5; var jaar1, jaar2, oud : byte_row ; archeoloog : byte_row; fac5, kg, ks, kl : Longint; i, degene : byte; goed : boolean; procedure permut(L : Longint; n : byte; var r : byte_row); { * Permutations of array r[n] * -------------------------- * L = ordinal number (input) * n = number of entries in: (input) * r = row of permutations (output) } var h : Longint; k,p,q,s,m,t : byte; begin { Init: } h:=1; for k := 1 to n do begin h:=h*k ; r[k]:=k; end; { Body: } for k := 1 to n do begin p:=n-k+1; h:=h div p; q:=(((L-1) div h) mod p)+1; if q=1 then Continue; { Rotate data: } s:=r[k+q-1]; for m:=1 to q-1 do begin t:=k+q-m; r[t]:=r[t-1]; end; r[k]:=s; end; end; procedure Oplossing; type string_row = array[1..5] of string; const naam : string_row = ('Walter Andrae ','Ernst Curtius ', 'Arthur Evans ','Robert Koldewey','Leonard Woolley'); plaats : string_row = ('Assoer','Babylon','Knossos','Oer','Olympia'); var uitkomst : text; begin Assign(uitkomst,'uitkomst'); Rewrite(uitkomst); for i := 1 to 5 do begin Writeln(naam[i],' ' , geboorte[jaar1[i]],' ',sterf[jaar2[i]],' ' , plaats[locatie[i]] ); Writeln(uitkomst, naam[i],' ' , geboorte[jaar1[i]],' ',sterf[jaar2[i]],' ' , plaats[locatie[i]] ); end; Close(uitkomst); end; { MAIN program } begin fac5 := 1*2*3*4*5; for kg := 1 to fac5 do begin { Geboortejaar: } permut(kg,5,jaar1); for ks := 1 to fac5 do begin { Sterfjaar: } permut(ks,5,jaar2); { Ouderdom: } for i := 1 to 5 do begin oud[i] := byte(sterf[jaar2[i]] - geboorte[jaar1[i]]); end; { 1) Geen van de vijf werd ouder dan honderd jaar. } goed := true; for i := 1 to 5 do begin goed := goed and (oud[i] <= 100); end; if not goed then Continue; { 3) Woolley werd 80 jaar oud. } goed := (oud[Woolley] = 80); if not goed then Continue; { 4) maar [Andrae werd] ouder dan de archeoloog die in 1855 was geboren. } for i := 1 to 5 do if geboorte[jaar1[i]] = 1855 then degene := i; goed := oud[Andrae] > oud[degene]; if not goed then Continue; for kl := 1 to fac5 do begin { Opgraving: } permut(kl,5,locatie); for i := 1 to 5 do { Inverse: } archeoloog[locatie[i]] := i; { 2) Evans deed opgravingen in Knossos. } goed := locatie[Evans] = Knossos; if not goed then Continue; degene := archeoloog[Olympia]; { Degene die in Olympia actief was, overleed niet in 1941. } goed := not (sterf[jaar2[degene]] = 1941); if not goed then Continue; { 4) Andrae werd minder oud dan degene die opgravingen deed te Olympia } goed := oud[Andrae] < oud[degene]; if not goed then Continue; degene := archeoloog[Oer]; { 5) Koldewey werd minder oud dan degene die in Oer actief was } goed := oud[Koldewey] < oud[degene]; if not goed then Continue; { die op zijn beurt weer minder oud werd dan de archeoloog in Assoer. } goed := oud[degene] < oud[archeoloog[Assoer]]; if not goed then Continue; Oplossing; end; end; end; end.