Как перевести / отобразить хэши - PullRequest
0 голосов
/ 01 октября 2019

Мне дали задание создать переводчик "секретного кода". Предполагается, что он принимает данные от пользователя, а затем отображает / переводит их с использованием хеша «конвертера»Код, который у меня сейчас есть, выглядит следующим образом.

array = []

converter = {
  "A" => "Z",
  "B" => "Y",
  "C" => "X",
  "D" => "W",
  "E" => "V",
  "F" => "U",
  "G" => "T",
  "H" => "S",
  "I" => "R",
  "J" => "Q",
  "K" => "P",
  "L" => "O",
  "M" => "N",
  "N" => "M",
  "O" => "L",
  "P" => "K",
  "Q" => "J",
  "R" => "I",
  "S" => "H",
  "T" => "G",
  "U" => "F",
  "V" => "E",
  "W" => "D",
  "X" => "C",
  "Y" => "B",
  "Z" => "A"
}

puts "Enter a phrase to translate"
start = gets.chomp

array = start.split("")

start_hash = {"input" => array}

print start_hash["input"]

index = 0

while index < start_hash["input"].length
  print start_hash["input"]
  index += 1
end  

Я не уверен на 100%, что я на правильном пути. Поэтому, если я введу код, результат будет примерно таким:

code = xlwv

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

Спасибо!

1 Ответ

1 голос
/ 02 октября 2019

Есть более простые способы сделать то, что вы ищете. Так как вы сделали попытку, прежде чем просить о помощи, я сломаю это для вас.

В частности, map - это самый простой способ пройти через массив и преобразовать его значения во что-то еще. Прежде чем я объясню, как это сделать, у вас есть пара других проблем.

Во-первых, если вы ищете заглавные буквы в хеш-коде, вам нужно, чтобы ваш ввод был заглавным. Итак:

puts "Enter a phrase to translate:"
phrase = gets.chomp.upcase

Теперь chars проще, чем использовать split(''), и делает то же самое:

arr = phrase.chars

Далее, вы можете использовать map для изменения массива:

new_arr = arr.map do |c|
  converter[c]
end

Это будет проходить по вашему массиву один за другим, устанавливая c равным каждому значению элемента массива (другими словами, каждому символу) по очереди. Затем результат того, что находится внутри вашего цикла do, подключается к массиву. Когда map достигает последнего элемента в отображаемом массиве, он возвращает новый массив, в который он вставляет значения.

Итак, c становится вашим хеш-ключом, а converter[c] являетсяхэш-значение для этого ключа. Это хэш-значение - это значение, которое вставляется в ваш новый массив. Результатом вызова map будет ваша зашифрованная строка в виде массива.

Наконец, объедините результат вызова map в строку:

new_phrase = new_arr.join

Теперь,вам не нужны все эти строки кода и дополнительные переменные, чтобы получить этот результат - я сделал это, чтобы помочь вам взглянуть на проблему по шагам за раз. После того, как вы использовали gets для получения переменной phrase, вы можете легко вытащить оставшуюся часть кода в одну строку:

new_phrase = phrase.chars.map { |c| converter[c] }.join

И вот она у вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...