英数字をモールス信号に変換して3進数表現する

注意事項

このサイト内で公開していることがらについて
使用や利用によるいかなる損失に対しても責任を負いませんのでご了承ください。
著作物に関する著作権について
原則としてすべて運営者(EponaLab)にあります。

仕様

  • 数字の1は「トン」を表します。
  • 数字の2は「ツー」を表します。

ソースコード


program MorseCoding(input, output);
type MorseCode = array [1 .. 128] of integer;

{モールス符号への変換表の作成(3進数)}
procedure InitMorseCode(var m : MorseCode);
var i : integer;
begin
    for i := 1 to 128 do
        m[i] := 0;

    {Definition}
    {0 <-> none}
    {1 <-> .}
    {2 <-> -}

    {0 .. 9}
    m[48] := 242;
    m[49] := 161;
    m[50] := 134;
    m[51] := 125;
    m[52] := 122;
    m[53] := 121;
    m[54] := 202;
    m[55] := 229;
    m[56] := 238;
    m[57] := 241;

    {A .. Z}
    m[65] := 5;
    m[66] := 67;
    m[67] := 70;
    m[68] := 22;
    m[69] := 1;
    m[70] := 43;
    m[71] := 25;
    m[72] := 40;
    m[73] := 4;
    m[74] := 53;
    m[75] := 23;
    m[76] := 49;
    m[77] := 8;
    m[78] := 7;
    m[79] := 26;
    m[80] := 52;
    m[81] := 77;
    m[82] := 16;
    m[83] := 13;
    m[84] := 2;
    m[85] := 14;
    m[86] := 41;
    m[87] := 17;
    m[88] := 68;
    m[89] := 71;
    m[90] := 76;

    {a .. z}
    m[97] := 5;
    m[98] := 67;
    m[99] := 70;
    m[100] := 22;
    m[101] := 1;
    m[102] := 43;
    m[103] := 25;
    m[104] := 40;
    m[105] := 4;
    m[106] := 53;
    m[107] := 23;
    m[108] := 49;
    m[109] := 8;
    m[110] := 7;
    m[111] := 26;
    m[112] := 52;
    m[113] := 77;
    m[114] := 16;
    m[115] := 13;
    m[116] := 2;
    m[117] := 14;
    m[118] := 41;
    m[119] := 17;
    m[120] := 68;
    m[121] := 71;
    m[122] := 76
end;

{0以外の数を出力する}
procedure PrintNonZero(x : integer);
begin
    if (x mod 3) <> 0 then
        write(x mod 3)
end;

{10進数を3進数展開して出力}
procedure TransDig(x : integer);
begin
    if x < 3 then
        PrintNonZero(x)
    else
    begin
        TransDig(x div 3);
        PrintNonZero(x mod 3)
    end
end;

procedure main;
var c : char;
        m : MorseCode;
begin
    InitMorseCode(m);
    while not eof do
    begin
        while not eoln do
        begin
            read(c);
            TransDig(m[ord(c)])
        end;
        readln;
        writeln
    end;
    readln
end;

begin
    main
end.