Skip to content

Instantly share code, notes, and snippets.

@Nullreff
Last active December 14, 2015 03:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nullreff/5019929 to your computer and use it in GitHub Desktop.
Save Nullreff/5019929 to your computer and use it in GitHub Desktop.
Morse code brute force solver
# ruby morse-solver.rb "-...--.-."
bgn
bgte
bmae
bmen
bmete
bmr
bqe
btc
btke
btnn
btnte
bttae
btten
bttete
bttr
dac
dake
dann
dante
datae
daten
datete
datr
degn
degte
demae
demen
demete
demr
deqe
detc
detke
detnn
detnte
dettae
detten
dettete
dettr
dpn
dpte
dwae
dwen
dwete
dwr
neac
neake
neann
neante
neatae
neaten
neatete
neatr
neegn
neegte
neemae
neemen
neemete
neemr
neeqe
neetc
neetke
neetnn
neetnte
neettae
neetten
neettete
neettr
nepn
nepte
newae
newen
newete
newr
nign
nigte
nimae
nimen
nimete
nimr
niqe
nitc
nitke
nitnn
nitnte
nittae
nitten
nittete
nittr
nuc
nuke
nunn
nunte
nutae
nuten
nutete
nutr
teeac
teeake
teeann
teeante
teeatae
teeaten
teeatete
teeatr
teeegn
teeegte
teeemae
teeemen
teeemete
teeemr
teeeqe
teeetc
teeetke
teeetnn
teeetnte
teeettae
teeetten
teeettete
teeettr
teepn
teepte
teewae
teewen
teewete
teewr
teign
teigte
teimae
teimen
teimete
teimr
teiqe
teitc
teitke
teitnn
teitnte
teittae
teitten
teittete
teittr
teuc
teuke
teunn
teunte
teutae
teuten
teutete
teutr
tiac
tiake
tiann
tiante
tiatae
tiaten
tiatete
tiatr
tiegn
tiegte
tiemae
tiemen
tiemete
tiemr
tieqe
tietc
tietke
tietnn
tietnte
tiettae
tietten
tiettete
tiettr
tipn
tipte
tiwae
tiwen
tiwete
tiwr
tsgn
tsgte
tsmae
tsmen
tsmete
tsmr
tsqe
tstc
tstke
tstnn
tstnte
tsttae
tstten
tsttete
tsttr
tvc
tvke
tvnn
tvnte
tvtae
tvten
tvtete
tvtr
#/usr/bin/ruby
abort("Usage: morse-solver.rb [code]") if ARGV.length != 1
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"
}
def get_letters(input_code)
MORSE.each do |code, letter|
next unless input_code.start_with?(code)
remainder = input_code.sub(/^#{code}/, "")
if remainder.empty?
yield letter
else
get_letters(remainder) {|part| yield letter + part }
end
end
end
get_letters(ARGV[0]) do |found|
puts found
end
# ruby morse-solver.rb "..-....-..."
bgn
bgte
bmae
bmen
bmete
bmr
bqe
btc
btke
btnn
btnte
bttae
btten
bttete
bttr
dac
dake
dann
dante
datae
daten
datete
datr
degn
degte
demae
demen
demete
demr
deqe
detc
detke
detnn
detnte
dettae
detten
dettete
dettr
dpn
dpte
dwae
dwen
dwete
dwr
neac
neake
neann
neante
neatae
neaten
neatete
neatr
neegn
neegte
neemae
neemen
neemete
neemr
neeqe
neetc
neetke
neetnn
neetnte
neettae
neetten
neettete
neettr
nepn
nepte
newae
newen
newete
newr
nign
nigte
nimae
nimen
nimete
nimr
niqe
nitc
nitke
nitnn
nitnte
nittae
nitten
nittete
nittr
nuc
nuke
nunn
nunte
nutae
nuten
nutete
nutr
teeac
teeake
teeann
teeante
teeatae
teeaten
teeatete
teeatr
teeegn
teeegte
teeemae
teeemen
teeemete
teeemr
teeeqe
teeetc
teeetke
teeetnn
teeetnte
teeettae
teeetten
teeettete
teeettr
teepn
teepte
teewae
teewen
teewete
teewr
teign
teigte
teimae
teimen
teimete
teimr
teiqe
teitc
teitke
teitnn
teitnte
teittae
teitten
teittete
teittr
teuc
teuke
teunn
teunte
teutae
teuten
teutete
teutr
tiac
tiake
tiann
tiante
tiatae
tiaten
tiatete
tiatr
tiegn
tiegte
tiemae
tiemen
tiemete
tiemr
tieqe
tietc
tietke
tietnn
tietnte
tiettae
tietten
tiettete
tiettr
tipn
tipte
tiwae
tiwen
tiwete
tiwr
tsgn
tsgte
tsmae
tsmen
tsmete
tsmr
tsqe
tstc
tstke
tstnn
tstnte
tsttae
tstten
tsttete
tsttr
tvc
tvke
tvnn
tvnte
tvtae
tvten
tvtete
tvtr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment