Ich versuche, eine Zeichenfolge von Morse-Code in Wörter zu konvertieren. Ich habe die Zeichenfolge in Wörter aufgeteilt. Dann spalte ich jedes Wort in eine zweite Reihe von Buchstaben und Zahlen.Konvertieren Zeichenfolge durch Hash
def self.decode(str)
decoded = ""
arr = []
p arr = str.split(' ')
p arr.map! { |i| i.split(' ') }
arr.each do |r|
r.each do |i|
decoded += @morse.invert[i].to_s[-1]
end
end
p decoded
end
In meinem hash verwende ich Nummern. Sie beginnen mit N
. In , die -1
ist die N
fallenlassen.
ich diesen Fehler:
`+': no implicit conversion of nil into String
ich herausfinden kann, wie in der Vergangenheit es aber bekommen, weil ich in dem Array keinen nil
Wert sehen.
class Morse
@morse = {
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: '--..',
' ': ' ' ,
N1: '.----',
N2: '..---',
N3: '...--',
N4: '....-',
N5: '.....',
N6: '-....',
N7: '--...',
N8: '---..',
N9: '----.',
N0: '-----'
}
def self.encode(str)
encoded = ""
sym_temp = ""
str = str.upcase!
str.each_char do |c|
ascii_check = c.ord
if ascii_check.between?(65,90)
temp = str[c].to_sym
encoded += "#{@morse[temp]}" + " "
elsif ascii_check.between?(48,57)
temp = "N".concat(str[c]).to_sym
encoded += "#{@morse[temp]}" + " "
elsif ascii_check ===(32)
temp = str[c].to_sym
encoded += "#{@morse[temp]}"
end
end
p encoded
end
def self.decode(str)
decoded = ""
arr = []
# str.split(' ').map do |i|
p arr = str.split(' ')
p arr.map! { |i| i.split(' ') }
arr.each do |r|
r.each do |i|
p decoded += @morse.invert[i].to_s[-1].to_s
end
end
p decoded
end
# def self.read_file
# # @Temp = File.read("preamble_encode.txt").chomp
# # File.open('hiscore.txt'){|f| f.lines.map{|l| l.chomp!.split(',')}}
# # @Temp = File.foreach("preamble_encode.txt", 'r') {|f| f.lines.map{|l| l.chomp}}
# end
# def self.write_file
# # Temp2 = File.open('preamble_decode.txt', 'w') do |f|
# # f.puts Temp2
# # end
# end
end
test = "Abc 1oL!"
test2 = ".-- . - .... . .--. . --- .--. .-.. ."
Morse.encode(test)
Morse.decode(test2)
eine Sache, es zu verfolgen, schnell tun:
aus irgendeinem Grund Wenn die Schlüssel von
CharactersToMorse
Symbole sein müssen, die Methoden ändern. Ändern Sie die Addierlogik wie folgt: decodiert + = @ morse.invert [i] .to_s [-1] .to_s – pramod