Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mo 10.12.07 06:29 
Hallo,

Dieses Rätsel hatte mich ein wenig verwirrt, da ich von so vielen Leuten mitbekommen habe, dass sie daran fast verzweifelt sind.
Allerdings hatte ich die Lösung bereits. ;)
Mein Programm war ursprünglich länger, da ich den Text schon recht früh raus hatte und dachte, man müsse das fehlende Stück wieder in ein Bild wandeln um daraus die Lösung abzulesen, dabei war die Lösung scheinbar schon im Text gegeben.
Deshalb gibt es hier nur den relevanten Teil.

Meine Lösung sieht so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
const
  morse: array[1..26] of string = ('.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..');
  alphabet: array[1..26] of char = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function MorseToChar(acode: string): char;
var
  i: integer;
begin
  result := ' ';
  for i := 1 to 26 do
    if morse[i] = acode then
    begin
      result := alphabet[i];
      break;
    end;
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: integer;
  astr, codestr: string;
begin
  memo1.clear;
  astr := '';
  codestr := '';
  for j := 0 to image1.height - 1 do
    for i := 0 to image1.width - 1 do
    begin
      // kurz
      if (image1.canvas.pixels[i, j] = 32768) then
        codestr := codestr + '.';
      // lang
      if (image1.canvas.pixels[i, j] = 16711680) then
        codestr := codestr + '-';
      // nichts
      if (image1.canvas.pixels[i, j] = 12632256) then
      begin
        astr := astr + MorseToChar(codestr) + ' ';
        codestr := '';
      end;
    end;
  memo1.lines.Add(astr);  
end;

Es ist nicht die beste Lösung, aber so funktioniert das Zurückwandeln in ein Bild am einfachsten ;)
Dieses mal gab es nicht viel zu optimieren, aber wer will .... :P

mfg