Напишите программу, которая читает слово и определяет, сколько слов, с таким же количеством букв, что и ввод, может представлять - PullRequest
0 голосов
/ 23 декабря 2019

Это часть проблемы азбуки Морзе. Я хочу выяснить, сколько слов можно сделать из закодированного азбуки Морзе, чтобы полученное слово имело ту же длину, что и ввод.

morseCode = {"A":".-","B":"-...","C":"-.-."}
morseCode["D"] = "-.."
morseCode["E"] = "."
morseCode["F"] = "..-."
morseCode["G"] = "--."
morseCode["H"] = "...."
morseCode["I"] = ".."
morseCode["J"] = ".---"
morseCode["K"] = "-.-"
morseCode["L"] = ".-.."
morseCode["M"] = "--"
morseCode["N"] = "-."
morseCode["O"] = "---"
morseCode["P"] = ".--."
morseCode["Q"] = "--.-"
morseCode["R"] = ".-."
morseCode["S"] = "..."
morseCode["T"] = "-"
morseCode["U"] = "..-"
morseCode["V"] = "...-"
morseCode["W"] = ".--"
morseCode["X"] = "-..-"
morseCode["Y"] = "-.--"
morseCode["Z"] = "--.."

#Retrieve end-user's message and convert it to upper case.
message = input("Type a message to convert in morse code (e.g. \"SOS\"?)").upper()
encodedMessage = ""

#Convert each letter into Morse code:
for character in message:
  #Check that the character is in the Morse Code dictionary (e.g letter of the alphabet)
  if character in morseCode:
    encodedMessage += morseCode[character] 
  else:
    #Replace unrecognised characters with a space
    encodedMessage += ""

#Display the message in Morse code:
print("Your message in Morse code is:")
print(encodedMessage)

Ввод: eta

Ваше сообщение на азбуке Морзе: .-.-

Вывод: 3

Как 3 слова такой же длины, как и эта, можно сделать с помощьюкодированный азбукой Морзе. (eta, ent, aet)

Я не могу понять, как найти количество слов, которое можно составить с помощью азбуки Морзе.

1 Ответ

1 голос
/ 23 декабря 2019

Примерно так без оптимизации:

morseCode = {
    "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 countWords(msg, length, collected = ''):
    if not msg:
        if not length:
            return [collected]
        return []
    current = []
    for letter, code in morseCode.items():
        if msg.startswith(code):
            current.extend(countWords(msg[len(code):], length - 1, collected + letter))
    return current

if __name__ == '__main__':
    #Retrieve end-user's message and convert it to upper case.
    message = input('Type a message to convert in morse code (e.g. "SOS"): ').upper()
    encodedMessage = ""

    #Convert each letter into morse code:
    for character in message:
      #Check that the character is in the moreCode dictionary (e.g letter of the alphabet)
      if character in morseCode:
        encodedMessage += morseCode[character] 
      else:
        #Replace unrecognised characters with a space
        encodedMessage += ""

    #Display the message in morse code:
    print("Your message in morse code is:", encodedMessage)

    matches = countWords(encodedMessage, len(message))
    print("There are", len(matches), "that match:")
    for word in matches:
        print(word)

и ваш пример:

>py bla.py
Type a message to convert in morse code (e.g. "SOS"): ent
Your message in morse code is: .-.-
There are 3 that match:
AET
ENT
ETA
...