Проект: Базовые элементы 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}

Советы

  • Вспомните, как конвертировать строки в массивы и обратно.

Поделиться уроком: