program topprijs; { TOPPRIJS LogiKwiz in de KIJK van januari 1997 Als er EEn topsport is, dan is het wel bergbeklimmen. Doorgaans lezen we in de kranten over allerlei grote namen die met honderden dragers een top in de Himalaya beklimmen. Maar er zijn ook tal van mindere goden actief. In deze logikwiz volgen we vijf (nog) onbekende Nederlanders die de hoogste toppen in Zwitserland hebben geprobeerd te beklimmen. Bij deze vijf is het misschien niet ten onrechte dat ze niet bekend zijn, want elke expeditie ging letterlijk en figuurlijk de mist in. Wie probeerde welke berg te beklimmen, en waarom ging het mis? 1. Wim van Egen probeerde het EEn niveau hoger dan de expeditie die door een navigatiefout aan de verkeerde berg was begonnen. Deze stond niet onder leiding van Frits Wisselaar. 2. Degene die op weg naar het hoogste punt van Zwitserland door een lawine werd overvallen, beklom niet de Weishorn. 3. Op de Dom werd men uitgeschakeld door een ongeval. De Dom is minder hoog dan de berg van Frits Wisselaar maar hoger dan de Matterhorn, die door Hans Belen werd beklommen, en de Combin. 4. De hevige sneeuwval vond op een lagere berg plaats dan de Weishorn, maar op een hogere berg dan die van Jos Sluyter. } type byte_row = array[1..5] of byte; word_row = array[1..5] of word; const meters : word_row = (4314, 4478, 4505, 4545, 4634); Frits_Wisselaar : byte = 1; Hans_Belen : byte = 2; Jan_Dozijn : byte = 3; Jos_Sluyter : byte = 4; Wim_van_Egen : byte = 5; Verkeerde_berg : byte = 1; Lawine : byte = 2; Ongeval : byte = 3; Sneeuwval : byte = 4; Zware_storm : byte = 5; Combin : byte = 1; Dom : byte = 2; Dufour_Spitze : byte = 3; Matterhorn : byte = 4; Weishorn : byte = 5; var hoogte_berg, berg_hoogte : byte_row; klimmer_berg, berg_klimmer : byte_row; incident_berg, berg_incident : byte_row; hoogte_klimmer, klimmer_hoogte : byte_row; hoogte_incident, incident_hoogte : byte_row; klimmer_incident, incident_klimmer : byte_row; fac5, k1, k2, k3 : Longint; i : 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 klimmer : string_row = ('Frits Wisselaar ', 'Hans Belen ', 'Jan Dozijn ', 'Jos Sluyter ', 'Wim van Egen '); incident : string_row = ('Verkeerde berg ', 'Lawine ', 'Ongeval ', 'Sneeuwval ', 'Zware storm '); berg : string_row = ('Combin ', 'Dom ', 'Dufour Spitze ', 'Matterhorn ', 'Weishorn '); var uitkomst : text; begin Assign(uitkomst,'uitkomst'); Rewrite(uitkomst); Writeln; for i := 1 to 5 do begin Writeln(berg[i] , meters[hoogte_berg[i]],' ',klimmer[klimmer_berg[i]] , incident[incident_berg[i]] ); Writeln(uitkomst, berg[i] , meters[hoogte_berg[i]],' ',klimmer[klimmer_berg[i]] , incident[incident_berg[i]] ); end; Close(uitkomst); end; { MAIN program } begin fac5 := 1*2*3*4*5; for k1 := 1 to fac5 do begin permut(k1,5,hoogte_berg); for i := 1 to 5 do berg_hoogte[hoogte_berg[i]] := i; { .. De Dom is [ ... ] hoger dan de Matterhorn, ... } goed := hoogte_berg[Dom] > hoogte_berg[Matterhorn]; if not goed then Continue; { .. en de Combin. } goed := hoogte_berg[Dom] > hoogte_berg[Combin]; if not goed then Continue; { 2. ... op weg naar het hoogste punt ... niet de Weishorn. } goed := hoogte_berg[Weishorn] <> 5; if not goed then Continue; for k2 := 1 to fac5 do begin permut(k2,5,klimmer_berg); for i := 1 to 5 do berg_klimmer[klimmer_berg[i]] := i; for i := 1 to 5 do hoogte_klimmer[i] := hoogte_berg[berg_klimmer[i]]; for i := 1 to 5 do klimmer_hoogte[hoogte_klimmer[i]] := i; { .. De Dom is minder hoog dan de berg van Frits Wisselaar } goed := hoogte_berg[Dom] < hoogte_klimmer[Frits_Wisselaar]; if not goed then Continue; { .. de Matterhorn, die door Hans Belen werd beklommen, } goed := Matterhorn = berg_klimmer[Hans_Belen]; if not goed then Continue; for k3 := 1 to fac5 do begin permut(k3,5,incident_berg); for i := 1 to 5 do berg_incident[incident_berg[i]] := i; for i := 1 to 5 do hoogte_incident[i] := hoogte_berg[berg_incident[i]]; for i := 1 to 5 do klimmer_incident[i] := klimmer_berg[berg_incident[i]]; for i := 1 to 5 do incident_hoogte[hoogte_incident[i]] := i; for i := 1 to 5 do incident_klimmer[klimmer_incident[i]] := i; { 1. Wim van Egen probeerde het EEn niveau hoger dan de expeditie die door een navigatiefout aan de verkeerde berg was begonnen. Deze stond niet onder leiding van Frits Wisselaar. } goed := Wim_van_Egen <> klimmer_incident[Verkeerde_berg]; if not goed then Continue; goed := klimmer_incident[Verkeerde_berg] <> Frits_Wisselaar; if not goed then Continue; goed := hoogte_klimmer[Wim_van_Egen] = hoogte_incident[Verkeerde_berg] + 1; if not goed then Continue; { 2. Degene die op weg naar het hoogste punt van Zwitserland door een lawine werd overvallen, beklom niet de Weishorn. } goed := hoogte_incident[Lawine] = 5; if not goed then Continue; goed := berg_incident[Lawine] <> Weishorn; if not goed then Continue; { 3. Op de Dom werd men uitgeschakeld door een ongeval. } goed := berg_incident[Ongeval] = Dom; if not goed then Continue; { 4. De hevige sneeuwval vond op een lagere berg plaats dan de Weishorn, maar op een hogere berg dan die van Jos Sluyter. } goed := hoogte_incident[Sneeuwval] < hoogte_berg[Weishorn]; if not goed then Continue; goed := hoogte_incident[Sneeuwval] > hoogte_klimmer[Jos_Sluyter]; if not goed then Continue; Oplossing; end; end; end; end.