Ocena użytkownikóww: ***** / 0
Nadesłany przez Nikodem Solarz, 17 stycznia 2013 22:37
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.przesun.rb:
#======================================================
#**Implementacja algorytmu szyfru z dowolnym przesunięciem
#**Narzew
#**15.01.2013
#**dla portalu algorytm.org
#**Implementacja nie obejmuje cyfr i innych znaków.
#**Obsługuje tylko 26 znaków angielskich
#**Obsługuje dowolne przesunięcie
#**Nie rozróżnia liter dużych i małych
#**Algorytm ostro zmodyfikowany :)
#======================================================
require 'jcode' # Usuń jeśli używasz Ruby 1.9
#======================================================
#**Wymagana metoda (Przerobiony zadany_element)
#======================================================
def zadany_element(x,y)
count = 0
x.each{|z|
return count if y == z
count += 1
}
return 0 # 0 zamiast false, by zapobiec błędom
end
#======================================================
#**Metoda właściwa
#======================================================
#======================================================
#**x => ciąg
#**y => przesunięcie
#**Odszyfrowanie => przesunięcie o -y
#======================================================
$alfabet = ['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 przesun(x,y)
result = ''
x = x.upcase
x.each_char{|z|
result << $alfabet[(zadany_element($alfabet,z)+y)%26]
}
return result
end