Проект: Базовые элементы Ruby
Не забывайте использовать Git для фиксации изменений в ваших проектах!
К этому уроку вы уже должны чувствовать себя уверенно при работе со строками, массивами и хешами. Мы решим пару классических вступительных задач, чтобы помочь вам укрепить свои знания и разогреться при работе над небольшми проектами. Вам потребуется вспомнить некоторые свои базовые знания и провести некоторую подготовительную работу, но вам должно хватит для проекта того, что вы уже знаете.
Вы можете делать все в консоли IRB или создать отдельный скрипт для запуска в командной строке, если вы знаете как это сделать (мы расскажем об этом в следующих уроках).
Внимание: если вы не хотите писать и запускать свой Ruby код, вы можете использовать IRB из командной строки (набрав irb
), или запускать скрипт из файла с помощью
$ ruby полное_имя_файла.rb
, или использовать онлайн-интерпретатор на сайте repl.it
Разминка
Сделайте простой Счетчик введенных слов с Codecademy.
Проект 1: Шифр Цезаря.
Информация с Википедиии
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на 3, А была бы заменена на Г, Б станет Д, и так далее. Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами.
Вот краткое видео о нем из Гарвардского класса CS50.
Ваша задача
Реализовать алгоритм шифра Цезаря, который принимает строку и число характеризующее сдвиг, а затем возвращает измененную строку:
caesar_cipher('What a string!', 5)
=> "Bmfy f xywnsl!"
Советы
- вам необходимо помнить как конвертировать строку в число.
- не забудьте что после
z
идетa
- не забудьте что регистр букв не должен меняться.
Проект 2: Помощник в торгах
Ваша задача
Реализуйте метод #stock_picker
, который принимает массив цен, одна цена для каждого дня. Метод должен вернуть пару дней - оптимальный день для покупки и оптимальный день для продажи. Дни начинаются с 0.
stock_picker([17,3,6,9,15,8,6,1,10])
=> [1,4] # for a profit of $15 - $3 == $12
Советы
- Помните, что прежде чем продавать, надо купить
- Будьте внимательнее с пограничными случаями, когда наименьшая цена в последний день и когда наибольшая цена в первый день.
Проект 3: Подстроки
Ваша задача
Реализовать метод #substrings
, который принимает строку в качестве первого аргумента и массив подстрок (словарь) в качестве второго аргумента. Метод должен вернуть хеш, содержащий каждую подстроку (независимо от регистра букв), которая была найдена в строке, и количество вхождений этой подстроки в строку.
dictionary = ['below','down','go','going','horn','how','howdy','it','i','low','own','part','partner','sit']
=> ['below','down','go','going','horn','how','howdy','it','i','low','own','part','partner','sit']
substrings('below', dictionary)
=> {'below'=>1, 'low'=>1}
Убедитесь что метод корректно работает со строкой в которой несколько слов
substrings('Howdy partner, sit down! How's it going?', dictionary)
=> {'down'=>1, 'how'=>2, 'howdy'=>1,'go'=>1, 'going'=>1, 'it'=>2, 'i'=> 3, 'own'=>1,'part'=>1,'partner'=>1,'sit'=>1}
Советы
- Вспомните, как конвертировать строки в массивы и обратно.