MORSE_ALPHABET = Hash.new([]).merge!({ " "=>[0], "A"=>[1, 0, 1, 1, 1], "B"=>[1, 1, 1, 0, 1, 0, 1, 0, 1], "C"=>[1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1], "D"=>[1, 1, 1, 0, 1, 0, 1], "E"=>[1], "F"=>[1, 0, 1, 0, 1, 1, 1, 0, 1], "G"=>[1, 1, 1, 0, 1, 1, 1, 0, 1], "H"=>[1, 0, 1, 0, 1, 0, 1], "I"=>[1, 0, 1], "J"=>[1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1], "K"=>[1, 1, 1, 0, 1, 0, 1, 1, 1], "L"=>[1, 0, 1, 1, 1, 0, 1, 0, 1], "M"=>[1, 1, 1, 0, 1, 1, 1], "N"=>[1, 1, 1, 0, 1], "O"=>[1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1], "P"=>[1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1], "Q"=>[1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1], "R"=>[1, 0, 1, 1, 1, 0, 1], "S"=>[1, 0, 1, 0, 1], "T"=>[1, 1, 1], "U"=>[1, 0, 1, 0, 1, 1, 1], "V"=>[1, 0, 1, 0, 1, 0, 1, 1, 1], "W"=>[1, 0, 1, 1, 1, 0, 1, 1, 1], "X"=>[1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1], "Y"=>[1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1], "Z"=>[1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1], "1"=>[1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1], "2"=>[1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1], "3"=>[1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1], "4"=>[1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1], "5"=>[1, 0, 1, 0, 1, 0, 1, 0, 1], "6"=>[1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1], "7"=>[1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1], "8"=>[1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1], "9"=>[1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1], "0"=>[1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1], "/"=>[1,1,1,0,1,0,1,0,1,1,1,0,1] }) def calculate_bitstream(message) bits = [] message.upcase.each_char do |letter| bits += MORSE_ALPHABET[letter] bits += [0, 0, 0] end bits.pop 3 self.bitstream = bits end