Archived
1
0
This repository has been archived on 2025-03-31. You can view files and clone it, but cannot push or open issues or pull requests.
pascal/CONTEST/AUFG1.PAS
2001-11-30 12:14:44 +01:00

218 lines
5.9 KiB
Plaintext
Raw Permalink Blame History

{ Aufgabe f<>r den Bundeswettbewerb in Informatik
Aufgabe 1
Belagerung um Farnsworth Castle
AD 1314. Nicht mehr lange k”nnen die Ritter K”nigin Eleonores auf Farns-
worth Castle die Angreifer des Blythletwick-Clans abhalten. Die einzige
Hoffnung der K”nigin ist die Benachrichtigung ihres Sohnes John, der sich
mit Julee, der Prinzessin des Clans, verlobt hat. W„re sie auf Farnsworth,
m<>áten die Blythlethwicks verhandeln. Doch die K”nigin kann sich nicht
sicher sein, daá ihr Bote nicht abgefangen wird. W<>rde ihr Plan bekannt,
w„re Blutvergieáen unvermeidbar. Eleonore schickt darum zwei Boten: Einen
mit einer verschl<68>sselten Botschaft, den anderen mit einem Schl<68>ssel. Bei
der Verschl<68>sselung geht sie folgendermaáen vor: Sie schneidet eine qua-
dratische Schablone aus Leder, die in quadratische Felder eingeteilt ist.
Manche dieser Felder sind ausgeschnitten. Diese Schablone legt die K”nigin
auf ein St<53>ck Papier und schreibt die ersten Buchstaben ihrer Botschaft
von links nach rechts, oben nach unten, durch die ausgeschnittenen Felder.
Dann dreht sie die Schablone um 90 Grad im Uhrzeigersinn, schreibt weiter
und wiederholt diesen Vorgang noch zwei weitere Male.
Die Nachricht ist:
KOMM UND BRING JULEE NACH FARNSWORTH
Schablone und verschl<68>sselte Nachricht sehen so aus:
ÛÛ ÛÛ BRKOAE
ÛÛÛÛ Û ER IMN
Û Û ÛÛ NMS WN
ÛÛÛÛÛÛ OGA CJ
ÛÛ Û UHRNUD
ÛÛÛÛÛ L FTH
1. Welchen Anforderungen m<>ssen Anzahl und Anordnung der L”cher gen<65>gen,
damit die Schablone zur Verschl<68>sselung geeignet ist?
2. Gib ein einfaches Verfahren f<>r den Entwurf von geeigneten Schablonen
an.
3. Schreibe ein Programm, das anhand einer gegebenen Schablone eine Nach-
richt ver- und entschl<68>sseln kann. Wie sieht die mit der obigen Scha-
blone verschl<68>sselte Fassung folgender R<>ckantwort aus?
JULEE MIT STALLKNECHT DURCHGEBRANNT
}
program Belagerung_um_Farnsworth_Castle;
{ L”sung ausgearbeitet von Markus Birth }
uses Crt;
var Template: array[1..6] of string[6];
chosen: char;
i, j: integer;
MaxC: integer;
procedure InitTemplate;
begin
Template[1] := '001100';
Template[2] := '000010';
Template[3] := '010100';
Template[4] := '000000';
Template[5] := '100101';
Template[6] := '100000';
end;
procedure WriteTemplate(y,x: integer);
begin
GotoXY(x,y);
MaxC := 0;
for i:=1 to 6 do begin
for j:=1 to 6 do begin
if Copy(Template[i],j,1)='0' then Write('Û') else begin
Write('ú');
Inc(MaxC);
end;
end;
GotoXY(x,y+i);
end;
MaxC := MaxC * 4;
end;
procedure TurnTemplate;
var Temp: array[1..6] of string[6];
begin
for i := 1 to 6 do begin
Temp[i] := Template[i];
Template[i] := '';
end;
for i := 1 to 6 do begin
for j := 1 to 6 do Template[i] := Template[i] + Copy(Temp[7-j],i,1);
end;
end;
procedure Coding;
var Text2Code: string;
take, curchar: integer;
const xco = 3;
yco = 3;
begin
curchar := 1;
ClrScr;
TextColor(White);
Write('Text eingeben (max. ', MaxC, ' Zeichen): ');
TextColor(LightGray);
ReadLn(Text2Code);
TextColor(White);
Write('Anzahl Buchstaben: ');
TextColor(LightGray);
WriteLn(Length(Text2Code));
TextColor(White);
for take := 1 to 4 do begin
WriteTemplate(yco+1, xco+10);
for i := 1 to 6 do begin
for j := 1 to 6 do begin
if Copy(Template[i],j,1)='1' then begin
GotoXY(xco+j,yco+i);
Write(Copy(Text2Code,curchar,1));
GotoXY(xco+17+curchar,yco+6);
Write(Copy(Text2Code,curchar,1));
Inc(curchar);
end;
Delay(50);
end;
end;
TurnTemplate;
end;
GotoXY(3, yco+10);
TextColor(Yellow);
WriteLn('Taste dr<64>cken, wenn bereit...');
ReadKey;
end;
procedure DeCoding;
var Coded: array[1..6] of string[6];
take, curchar: integer;
const xco = 19;
yco = 2;
begin
curchar := 1;
ClrScr;
WriteLn('Pro Zeile nur 6 Buchstaben!');
for i := 1 to 6 do begin
Write('Zeile ', i, ': ');
ReadLn(Coded[i]);
GotoXY(1,i+1);
WriteLn(' ');
end;
for take := 1 to 4 do begin
WriteTemplate(yco, xco);
for i := 1 to 6 do begin
for j := 1 to 6 do begin
if Copy(Template[i],j,1)='1' then begin
GotoXY(xco+curchar+8,yco+5);
Write(Copy(Coded[i],j,1));
Inc(curchar);
GotoXY(j+9, i+1);
Write(' ');
end;
Delay(50);
end;
end;
TurnTemplate;
end;
GotoXY(3, yco+10);
TextColor(Yellow);
WriteLn('Taste dr<64>cken, wenn bereit...');
ReadKey;
end;
begin
ClrScr;
TextColor(White);
WriteLn('-=ðþ Belagerung um Farnsworth Castle þð=-');
TextColor(Cyan);
WriteLn('Aufgabe 1 vom Bundeswettbewerb f<>r Informatik 97');
TextColor(LightGray);
WriteLn;
WriteLn('Umgesetzt von Markus Birth');
InitTemplate;
TextColor(Yellow);
WriteLn('Verwendete Schablone mit Drehergebnissen:');
TextColor(LightGray);
Delay(500);
WriteTemplate(6,1);
TextColor(DarkGray);
TurnTemplate;
Delay(500);
WriteTemplate(6,11);
TurnTemplate;
Delay(500);
WriteTemplate(6,21);
TurnTemplate;
Delay(500);
WriteTemplate(6,31);
TurnTemplate;
TextColor(Yellow);
WriteLn;
Write('Maximale Zeichenanzahl: ');
TextColor(LightGray);
WriteLn(MaxC);
WriteLn;
Write('Wollen Sie ');
TextColor(Yellow);
Write('v');
TextColor(LightGray);
Write('erschl<68>sseln oder ');
TextColor(Yellow);
Write('e');
TextColor(LightGray);
Write('ntschl<68>sseln (andere Taste - quit)? ');
chosen := UpCase(ReadKey);
if chosen='V' then Coding;
if chosen='E' then DeCoding;
end.