Чтение слова в массив [ruby] - PullRequest
1 голос
/ 01 октября 2019

Попытка создать зашифрованный шифр в Ruby. Проблема, с которой я сталкиваюсь, заключается в том, что когда программа достигает цикла while, она выполняет только желаемую операцию с самой последней буквой введенного слова. Прежде чем углубляться в то, что я пробовал, найдите код:

#!/usr/bin/ruby


#print 65.chr  ASCII code for A
#print 97.chr  ASCII code for a

a = 0
b = 97
d = []
e = 0

# Just to print the alphabet alongside the ASCII value 
# (For sanity checking)

while a <= 25
  print b.chr + " "
  print b.to_s + "\n"
  a = a + 1
  b = b + 1
end

puts "\n Please enter a word to translate"
word = gets.strip

# The desired effect is to move the letter along by key value

puts "Please enter a key"
k = gets.chomp.to_i

# In its current state, what happens is only the last char
# is moved along by the key value. 

while e <= word.length
  word.each_byte do |c|
    d[e] = c + k
  end
  e = e + 1
end


puts d

Я думаю, что проблема заключается в логике цикла while. Я собираюсь атаковать это, читая предварительно преобразованное слово в массив, в отличие от использования объекта .each_byte.

Я не знаю, как это сделать, и руководства / вопросы, которые я нашел, не совсем отвечают на вопрос. Если кто-то знает, как это сделать, или знает лучший способ решения этой проблемы, я был бы очень признателен.

Ответы [ 3 ]

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

вам не нужен последний цикл while

  word.each_byte do |c|
    d[e] = c + k
    e = e + 1
  end
0 голосов
/ 01 октября 2019

Шифр ​​Цезаря - простой шифр сдвига

word.each_byte do |c| 
  p c + k 
end
0 голосов
/ 01 октября 2019

Нечто более подробное:

alphabet = ('a'..'z').to_a
new_word = ''

puts "\n Please enter a word to translate"
word = gets.strip

puts "Please enter a key"
k = gets.chomp.to_i

word.split('').each_with_index do |letter, index|
  alphabet_index = alphabet.index(letter)
  new_index = alphabet_index + key
  new_word[index] = alphabet[new_index]
end

puts "Your translated word is #{new_word}"
...