英数字をモールス信号に変換する

注意事項

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

仕様

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

ソースコード


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

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

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

    {0 .. 9}
    m[48] := '22222';
    m[49] := '12222';
    m[50] := '11222';
    m[51] := '11122';
    m[52] := '11112';
    m[53] := '11111';
    m[54] := '21111';
    m[55] := '22111';
    m[56] := '22211';
    m[57] := '22221';

    {A .. Z}
    m[65] := '12';
    m[66] := '2111';
    m[67] := '2121';
    m[68] := '211';
    m[69] := '1';
    m[70] := '1121';
    m[71] := '221';
    m[72] := '1111';
    m[73] := '11';
    m[74] := '1222';
    m[75] := '212';
    m[76] := '1211';
    m[77] := '22';
    m[78] := '21';
    m[79] := '222';
    m[80] := '1221';
    m[81] := '2212';
    m[82] := '121';
    m[83] := '111';
    m[84] := '2';
    m[85] := '112';
    m[86] := '1112';
    m[87] := '122';
    m[88] := '2112';
    m[89] := '2122';
    m[90] := '2211';

    {a .. z}
    m[97] := '12';
    m[98] := '2111';
    m[99] := '2121';
    m[100] := '211';
    m[101] := '1';
    m[102] := '1121';
    m[103] := '221';
    m[104] := '1111';
    m[105] := '11';
    m[106] := '1222';
    m[107] := '212';
    m[108] := '1211';
    m[109] := '22';
    m[110] := '21';
    m[111] := '222';
    m[112] := '1221';
    m[113] := '2212';
    m[114] := '121';
    m[115] := '111';
    m[116] := '2';
    m[117] := '112';
    m[118] := '1112';
    m[119] := '122';
    m[120] := '2112';
    m[121] := '2122';
    m[122] := '2211'
end;

procedure main;
var c : char;
    m : MorseCode;
begin
    {モールス符号表の作成}
    InitMorseCode(m);

    while not eof do
    begin
        while not eoln do
        {行末まで変換}
        begin
            read(c);
            write(m[ord(c)])
        end;

        {読み・書きそれぞれ改行}
        readln;
        writeln
    end;
    readln
end;

begin
    main
end.