Задания из книги "Руби для романтиков"

  • Задание № 1 (стр. 10)

    Задание: заведите блокнот с идеями. Записывайте туда абсолютно все идеи, которые приходят вам в голову. Возможно вы вернетесь к ним через неделю, месяц, или год.

  • Задание № 2 (стр. 13)

    Найти и установить ruby installer

  • Задание № 3 (стр. 13)

    Запустите программу “1+1” (без puts).

  • Задание № 4 (стр. 14)

    Написать программу, которая считает количество миллисекунд в сутках

  • Задание № 5 (стр. 14)

    Посчитать количество секунд в сутках, не выводя результат на экран с помощью puts (в irb)

  • Задание № 6 (стр. 18)

    Установить файловый менеджер

  • Задание № 7 (стр. 21)

    “Походите” по вашей файловой системе и посмотрите какие файлы и директории в ней существуют. Директории из корневого каталога (== “директории из корневой директории”) будут часто встречаться в будущем.

  • Задание № 8 (стр. 21)

    Разберитесь с созданием, копированием, переносом файлов и директорий. Попробуйте скопировать несколько файлов, предварительно выделив их (Ins).

  • Задание № 9 (стр. 28)

    Установить текстовый редактор. Попробовать создать несколько файлов в текстовом редакторе. В каждый файл запишите имя человека, которого вы знаете. Удалите файлы.

  • Задание № 10 (стр. 29)

    Попробовать оставить комментарии к своей программе и добавить пустые строки после gets, чтобы визуально программа выглядела “легче”.


  • Задание № 11 (стр. 29)

    Если у вас установлена ОС Windows, попробуйте скачать VMWare Workstation (платная программа) или VirtualBox (бесплатная). Это виртуальная машина - программа для запуска операционных систем внутри вашей ОС. Попробуйте запустить виртуальную машину и установить в ней Linux Mint Cinnamon edition. Попробуйте написать первую программу в Linux! Если не получится - ничего страшного, продолжайте обучение дальше, можно будет вернуться к этому позднее.

  • Задание № 12 (стр. 31)

    написать программу, которая подряд спрашивает год рождения, место рождения, номер телефона трех клиентов, после чего выводит полученную информацию полностью в виде “карточек” (в англ.языке это бы называлось baseball card, аналогия в русском языке - карточка из картотеки).

  • Задание № 13 (стр. 36)

    Узнайте какой тип данных у `""`. А какой тип данных у `0` (ноль)? Какой тип данных у минус единицы? Какой тип данных у округленного числа “Пи” `3.14`?

  • Задание № 14 (стр. 36)

    Известно, что метод `.class` для любого объекта возвращает результат. REPL читает (read), выполняет (evaluate) и печатает (print) этот результат на экран. Но если все в руби объект, то какого типа возвращается сам результат, когда мы пишем `.class`? Вот этот метод `.class` - результат какого типа он возвращает? Видно ли это из документации? Проверьте. Попробуйте написать `123.class.class` - первое выражение `123.class` вернет результат, а следующий `.class` вычислит тип этого результата.

  • Задание № 15 (стр. 45)

    Посмотрите документацию к методу “chomp” и “size” класса String.

  • Задание № 16 (стр. 45)

    Напишите программу для подсчета годовой зарплаты. Пользователь вводит размер заработной платы в месяц, а программа выводит размер заработной платы в год. Допустим, что пользователь каждый месяц хочет откладывать 15% своей зарплаты. Измените программу, чтобы она выводила не только размер заработной платы, но и размер отложенных за год средств. Измените программу, чтобы она выводила размер отложенных средств за 5 лет.

  • Задание № 17 (стр. 47)

    Посмотрите какие еще существуют bang-методы у класса String

  • Задание № 18 (стр. 52)

    Известно, что стоимость дома - 500 тысяч долларов. Человек берет дом в рассрочку на 30 лет. Чтобы выплатить дом за 30 лет, нужно платить 16666 долларов в год (это легко посчитать, разделив 500 тысяч на 30). Написать программу, которая для каждого года выводит сумму, которую осталось выплатить.

  • Задание № 19 (стр. 52)

    Измените программу из предыдущего задания со следующими условиями: человек берет дом не в рассрочку, а в кредит по ставке 4% годовых на оставшуюся сумму. Для каждого года посчитайте сколько денег нужно заплатить за этот год за использование кредита.

  • Задание № 20 (стр. 52)

    Посчитайте количество денег (total), которые мы заплатим только в виде процентов по кредиту за 30 лет.

  • Задание № 26 (стр. 61)

    Известно, что на Луне продают участки. Любой участок менее 50 квадратных метров стоит 1000 долларов. Участок площадью от 50 до 100 квадратных метров стоит 1500 долларов. От 100 и выше - по 25 долларов за квадратный метр. Напишите программу, которая запрашивает длину и ширину участка и выводит на экран его стоимость.

  • Задание № 27 (стр. 61)

    Напишите программу “иммигрант”. Программа должна задавать следующие вопросы: “У вас есть высшее образование? (y/n)”, “У вас есть опыт работы программистом? (y/n)”, “У вас более трех лет опыта? (y/n)”. За каждый положительный ответ начисляется 1 балл (переменную можно назвать score). Если набралось 2 или более баллов программа должна выводить на экран “Добро пожаловать в США”.

  • Задание № 28 (стр. 67)

    Посмотрите документацию по классу Range

  • Задание № 29 (стр. 67)

    Напишите программу, которая будет выводить случайное число от 500 до 510.

  • Задание № 30 (стр. 67)

    Напишите программу, которая будет выводить случайное число с дробью от 0 до 1.

  • Задание № 31 (стр. 67)

    Напишите программу, которая будет выводить случайное число с дробью от 2 до 4.

  • Задание № 32 (стр. 69)

    Измените программу, чтобы она загадывала число от 1 до 1_000_000 (1 миллиона). Чтобы можно было угадать это число, программа должна сравнивать текущий ответ пользователя и искомое число: 1) если ответ пользователя больше, то программа должна выводить на экран “Искомое число меньше вашего ответа”; 2) иначе “Искомое число больше вашего ответа”. Может показаться, что угадать это число невозможно, однако математический расчет показывает, что угадать число в этом случае можно не более, чем за 20 попыток.

  • Задание № 33 (стр. 71)

    Запишите следующие примеры при помощи тернарного оператора

    Пример 1:

                          
                            if friends_are_also_coming?
                            go_party
                            else
                            stay_home
                            end                
                          
                        

    будет:

                          
                            if friends_are_also_coming? ? go_party : stay_home
                          
                        

    Пример 2:

                          
                            if friends_are_also_coming? && !is_it_raining
                            go_party
                            else
                            stay_home
                            end          
                           
                        

    будет:

                          
                            if friends_are_also_coming? && !is_it_raining ? go_party : stay_home   
                          
                        
  • Задание № 34 (стр. 73)

    С помощью символов “/”, “-”, “\”, “|” сделайте анимацию - индикатор загрузки. Если выводить эти символы по-очереди на одном и том же месте, возникает ощущение вращающегося символа.

  • Задание № 35 (стр. 75)

    напишите метод, который выводит на экран пароль, но в виде звездочек. Например, если пароль “secret”, метод должен вывести “Ваш пароль: ******”.


  • Задание № 36 (стр. 80)

    Реализуйте метод “check_victory?” (сейчас он просто возвращает значение false). В случае победы или поражения необходимо выводить полученный результат на экран. Измените 10_000 на 10 чтобы легче было отлаживать программу.

  • Задание № 37 (стр. 80)

    Посмотрите документацию к "ruby case statements" и замените конструкцию "if...elsif" на "case...when".

  • Задание № 38 (стр. 81)

    Cделать так, чтобы цикл был теоретически бесконечным. Т.е. чтобы равновероятно на свет появлялись люди и машины. Количество появившихся людей или машин должно равняться количеству погибших людей или машин. Несмотря на то, что теоретически борьба может быть бесконечной, на практике может наступить ситуация, в которой та или иная сторона выигрывает. Проверьте программу на практике, попробуйте разные значения `people` и `machines` (1000, 100, 10).

  • Задание № 39 (стр. 81)

    Улучшите программу "Эмулятор судного дня", добавьте как минимум еще 3 события, которые могут влиять на результат судного дня.

  • Задание № 40 (стр. 87)

    Определите метод, который будет вычислять случайный номер с анимацией (используйте sleep со случайной задержкой). Примените анимацию к переменным “x”, “y”, “z”.

  • Задание № 41 (стр. 87)

    Добавьте больше условий в игру “Однорукий бандит”, используйте свое воображение.

  • Задание № 42 (стр. 87)

    Если вы используете MacOS то вместо цифр в консоли используйте эмодзи. Пусть каждой цифре соответствует определенная картинка. Вы можете найти эмодзи на сайте https://emojipedia.org/ .

  • Задание № 43 (стр. 98)

    Напишите игру "Битва роботов".

  • Задание № 44 (стр. 100)

    Чтобы статистика была более наглядной, добавьте в программу выше вывод двух массивов.

  • Задание № 45 (стр. 100)

    Вместо бинарного значения ноль или единица пусть каждый робот имеет уровень жизни, который выражается целым числом от 1 до 100 (в самом начале это значение должно быть установлено в 100). Пусть каждая атака отнимает случайную величину жизни у робота от 30 до 100. Если уровень жизни ниже или равен нулю, робот считается уничтоженным.

  • Задание № 46 (стр. 113)

    Если вы не попробовали в REPL все написанное выше, то перечитайте и попробуйте

  • Задание № 47 (стр. 113)

    Создайте массив в 5 строк и 4 столбца, заполните каждую строку случайным значением от 1 до 5 (только одно случайное значение для каждой строки). Пример для массива 2 на 3:

                        [
                        [2, 2, 2],
                        [5, 5, 5]
                        ]
                      
  • Задание № 48 (стр. 113)

    Создайте массив в 4 строки и 5 столбцов, заполните каждую строку случайным значением от 1 до 5 (только одно случайное значение для каждой строки).

  • Задание № 49 (стр. 113)

    Создайте массив 5 на 4 и заполните весь массив абсолютно случайными значениями от 0 до 9.

  • Задание № 50 (стр. 117)

    Попробуйте в “pry” вывести поле 10 на 10 для игры в “Морской бой”.


Программы на ruby

  • Программа № 1 (стр. 13). puts 1+1

    puts(1+1)


    $ ruby

    puts 1+1

    2

    $

  • Программа № 2 (стр. 14). Cосчитать количество миллисекунд в сутках

    $ ruby

    puts 60 * 60 * 24 * 1000

    (нажмите Ctrl + D)

    (нажмите Enter)

    86400000

  • Программа № 3 (стр. 14). puts 5**5 * 4**4 * 3**3 * 2**2 * 1**1

    $ ruby

    puts 5**5 * 4**4 * 3**3 * 2**2 * 1**1

    (нажмите Ctrl + D)

    (нажмите Enter)

    86400000

  • Программа № 4 (стр. 14). puts 60 * 60 * 24 * 1000 == 5**5 * 4**4 * 3**3 * 2**2 * 1**1

    $ ruby

    puts 60 * 60 * 24 * 1000 == 5**5 * 4**4 * 3**3 * 2**2 * 1**1

    (нажмите Ctrl + D)

    (нажмите Enter)

    true

  • Программа № 5 (стр. 15). Запустить irb и посчитать количество секунд в сутках, не выводя результат на экран с помощью puts.

    $ irb

    irb(main):001:0> 60*60*24*1000

    => 86400000

    irb(main):002:0>

  • Программа № 6 (стр. 28). Первая программа.
    app.rb

    puts "I would hug you, but I’m just a text"

    gets

  • Программа № 7 (стр. 28). Программа для изучения иностранного языка. 3 слова.
    app 1.rb

    puts "How to translate ball?"

    gets

    puts "How to translate door?"

    gets

    puts "How to translate peace?"

    gets

  • Программа № 8 (стр. 28). Программа для изучения иностранного языка. 10 слов.
    app 2.rb

    # encoding: cp866

    puts "How to translate ball?"

    gets

    #---------------------------

    puts "How to translate door?"

    gets

    #---------------------------

    puts "How to translate peace?"

    gets

    #---------------------------

    puts "How to translate drugs?"

    gets

    #---------------------------

    puts "How to translate bus?"

    gets

    #---------------------------

    puts "How to translate sleep?"

    gets

    #---------------------------

    puts "How to translate took?"

    gets

    #---------------------------

    puts "How to translate drink?"

    gets

    #---------------------------

    puts "How to translate run?"

    gets

  • Программа № 9 (стр. 31). Программа спрашивает возраст и выводит его на экран.
    app 3.rb
                        # Программа спрашивает возраст и выводит его на экран
                        puts "Your age?"
                        age = gets
                        puts "Your age is"
                        puts age
                      
  • Программа № 10 (стр. 31). Написать программу, которая подряд спрашивает год рождения, место рождения, номер телефона трех клиентов, после чего выводит полученную информацию полностью в виде “карточек” (в англ.языке это бы называлось baseball card, аналогия в русском языке - карточка из картотеки).
    app 4.rb
                          puts "Введите год рождения первого клиента?"
                          year_of_birth_0 = gets
                          #
                          puts "Введите год рождения второго клиента?"
                          year_of_birth_1 = gets
                          #
                          puts "Введите год рождения третьего клиента?"
                          year_of_birth_2 = gets
                          #
                          puts "Введите место рождения первого клиента?"
                          place_of_birth_0 = gets
                          #
                          puts "Введите место рождения второго клиента?"
                          place_of_birth_1 = gets
                          #
                          puts "Введите место рождения третьего клиента?"
                          place_of_birth_2 = gets
                          #
                          puts "Введите телефонный номер первого клиента?"
                          phone_number_0 = gets
                          #
                          puts "Введите телефонный номер второго клиента?"
                          phone_number_1 = gets
                          #
                          puts "Введите телефонный номер третьего клиента?"
                          phone_number_2 = gets
                          #
                          puts "baseball card № 1"
                          puts year_of_birth_0.to_s.chomp + " " + place_of_birth_0.to_s.chomp + " " + phone_number_0.to_s.chomp
                          #
                          puts "baseball card № 2"
                          puts year_of_birth_1.to_s.chomp + " " + place_of_birth_1.to_s.chomp + " " + phone_number_1.to_s.chomp
                          #
                          puts "baseball card № 3"
                          puts year_of_birth_2.to_s.chomp + " " + place_of_birth_2.to_s.chomp + " " + phone_number_2.to_s.chomp
                          gets   
                        
  • Программа № 10 (стр. 33). Улучшение программы № 9. Программа спрашивает возраст и выводит его на экран.
    app 5.rb
                      # Программа спрашивает возраст и выводит его на экран
                      puts "Your age?"
                      age = gets
                      puts "=" * 80
                      puts "Your age is " + age
                      gets
                      
  • Программа № 11 (стр. 36), по заданию № 13 (стр. 36).
    app 6.rb
                          puts "Тип данных у `""`."
                          puts "".class
                          puts "Тип данных у нуля."
                          puts 0.class
                          puts "Тип данных у минус единицы"
                          puts -1.class
                          puts "тип данных у округленного числа “Пи” 3.14?"
                          puts 3.14.class
                          gets
                      
  • Программа № 12 (стр. 37). Типы данных.
    app 7.rb
                          # 
                          puts "123.is_a?(Integer)?"
                          puts 123.is_a?(Integer)
                          puts "-"*40;
                          puts "123.is_a?(String)";
                          puts 123.is_a?(String)
                          puts "-"*40;
                          puts "blabla"".is_a?(String)"
                          puts "blabla".is_a?(String)
                          puts "-"*40;
                          puts "123.is_a?(Object)"
                          puts 123.is_a?(Object)
                          puts "-"*40;
                          puts "blabla"".is_a?(Object)"
                          puts "blabla".is_a?(Object)
                          puts "-"*40;
                          gets
                      
  • Программа № 13 (стр. 40). Приведение типов.
    app 8.rb
                          # Программа подсчитывает возраст в месяцах
                          puts "Your age?"
                          age = gets
                          age_months = age.to_i * 12
                          puts "Your age is " + age_months.to_s
                      
  • Программа № 14 (стр. 41). Дробные числа.
    app 9.rb
                        # Программа подсчитывает 30% налог на вводимую зарплату
                        puts "Your salary?"
                        salary = gets.to_i
                        tax_rate = 0.3
                        puts "Tax:" 
                        puts salary * tax_rate
                      
  • Программа № 15 (стр. 42). Интерполяция строк.
    app 10.rb
                        puts "Your age?"
                        age = gets.to_i
                        puts "="*80
                        age_months = age * 12
                        puts "Your age is #{age_months}"
                      
  • Программа № 16 (стр. 43). Интерполяция строк.
    app 11.rb
                        puts "Your age?"
                        age = gets.to_i
                        puts "="*80
                        age_months = age * 12
                        puts "Your age is #{age_months}"
                      
  • Программа № 17 (стр. 45). По заданию № 16.
    app 12.rb
                        #
                        puts "Your salary?"
                        salary_month = gets.to_i
                        tax_rate = 0.3
                        tax = salary_month * tax_rate
                        puts "="*80
                        puts "Tax on month: #{salary_month * tax_rate}"
                        annual_salary = (salary_month - tax) * 12
                        puts "Annual salary: #{annual_salary}"
                        puts "Accumulated for the year 15%: #{annual_salary * 0.15}"
                        puts "Accumulated for the 5 years 15%: #{annual_salary * 0.15 * 5}"
                      
  • Программа № 18 (стр. 46). Преобразование заглавных букв в строчные и их вывод.
    app 13.rb
                        #
                        x = 'Я МОЛОДЕЦ'
                        x = x.downcase
                        puts x
                      
  • Программа № 19 (стр. 47). Преобразование заглавных букв в строчные используя bang! и их вывод.
    app 14.rb
                          #Преобразование заглавных букв в строчные используя bang! и их вывод
                          a = 'HI'
                          b = a
                          a.downcase!
                          puts b
                      
  • Программа № 20 (стр. 48). Запись блока в фигурных скобках.
    app 15.rb
                          # Блок с фигурными скобках
                          10.times { puts 'Спартак - чемпион!' }
                      
  • Программа № 21 (стр. 49). Запись блока с ключевыми словами do - end.
    app 16.rb
                          # Блок с ключевыми словами do - end
                          10.times do
                            puts "Спартак - чемпион!"
                            puts "(и Динамо тоже)"
                            end
                      
  • Программа № 22 (стр. 50). Блок с параметром. Накопление суммы.
    app 17.rb
                          # Каждый месяц откладывается определенная сумма. 
                          # Программа должна выводить сколько средств будет накоплено в течение следующих 24 месяцев.
                          sum = 0
                          24.times do |i|
                          sum = sum + 500
                          puts "За #{i + 1} месяц у бабушки в сундуке #{sum}"
                          end
                      
  • Программа № 23 (стр. 51). Блок с параметром. Накопление суммы + проценты
    app 18.rb
                          # Каждый месяц откладывается определенная сумма. 
                          # Программа должна выводить сколько средств будет накоплено в течение следующих 24 месяцев если каждый месяц начисляется 10%.
                          sum = 0
                          percent = 0
                          24.times do |i|
                          sum = sum + 500 + percent
                          percent = sum * 0.1
                          puts "За #{i + 1} месяц у бабушки в сундуке #{sum + percent}"
                          end
                      
  • Программа № 24 (стр. 52). По заданию № 18 (стр. 52).
    app 19.rb
                          # Известно, что стоимость дома - 500 тысяч долларов. 
                          # Человек берет дом в рассрочку на 30 лет. 
                          # Чтобы выплатить дом за 30 лет, нужно платить 16666 долларов в год (это легко посчитать разделив 500 тысяч на 30). 
                          # Написать программу, которая для каждого года выводит сумму, которую осталось выплатить.
            
                          sum = 500000
                          annual_payment = 16666
                          30.times do |i|
                          sum = sum - annual_payment
                          puts "За #{i + 1} год осталось заплатить #{sum}"
                          end
                      
  • Программа № 25 (стр. 52). По заданию № 19 (стр. 52).
    app 20.rb
                          # Известно, что стоимость дома - 500 тысяч долларов. 
                          # Человек берет дом в рассрочку на 30 лет в кредит по ставке 4% годовых на оставшуюся сумму 
                          # Написать программу, которая рассчитывает на каждый год сумму использования кредита.
            
                          sum = 500000
                          annual_payment = 16666
                          annual_percent = 0.04
                          30.times do |i|
                          sum = sum - annual_payment
                          percent = sum * annual_percent
                          puts "За #{i + 1} год осталось заплатить #{annual_payment + percent}"
                          end
                      
  • Программа № 26 (стр. 55). По заданию № 21 (стр. 55).
    app 22.rb
                          # Вывести на экран числа от 50 до 100
            
                          50.upto(100) { |i| puts "#{i}" }
                      
  • Программа № 27 (стр. 55). По заданию № 22 (стр. 55).
    app 23.rb
                          # Вывести на экран числа от 50 до 100, и если число четное - рядом с ним написать `true`, если нечетное - `false`.
            
                          50.upto(100) { |i| puts "#{i} - #{i.to_i.even?}" }
                      
  • Программа № 28 (стр. 60). Комбинирование условий.
    app 24.rb
                          # Комбинирование условий
            
                          puts 'Сколько вам лет?'
                          age = gets.to_i
                          puts 'Являетесь ли вы членом партии Единая Россия? (y/n)'
                          answer = gets.chomp.downcase
                          if age >= 18 and answer == 'y'
                          puts 'Вход на сайт разрешен'
                          end
                      
  • Программа № 28 (стр. 61). По заданию № 25 (стр. 61).
    app 25.rb
                          # Напишите программу, которая спрашивает логин и пароль пользователя в консоли. 
                          # Если имя “admin” и пароль “12345”, программа должна выводить на экран “Доступ к банковской ячейке разрешен”.
            
                          puts 'Введите логин?'
                          login = gets.chomp
                          puts 'Введите пароль'
                          password = gets.chomp
                          if login == 'admin' and password == '12345'
                          puts 'Доступ к банковской ячейке разрешен'
                          else
                            puts "Неверный логин и/или пароль"
                          end
                      
  • Программа № 29 (стр. 61). По заданию № 26 (стр. 61).
    app 26.rb
                          # Известно, что на Луне продают участки. 
                          # Любой участок менее 50 квадратных метров стоит 1000 долларов. 
                          # Участок площадью от 50 до 100 квадратных метров стоит 1500 долларов. 
                          # От 100 и выше - по 25 долларов за квадратный метр. 
                          # Напишите программу, которая запрашивает длину и ширину участка и выводит на экран его стоимость.
            
                          puts "Введите длину?"
                          length = gets.to_i
                          puts "Введите ширину"
                          width = gets.to_i
                          square = width * length
                          puts "#{square} M2"
            
                          if square < 50
                          puts "Участок площадью #{square} M2 стоит 1000 долларов"
                          elsif square > 50 && square <= 100   
                          puts "Участок площадью #{square} M2 стоит 1500 долларов" 
                          else 
                            puts "Участок площадью #{square} M2 стоит #{square * 25}"
                          end
                          gets
                      
  • Программа № 30 (стр. 61). По заданию № 27 (стр. 61). 1 вариант.
    app 27-1.rb
                          # Напишите программу “иммигрант”. Программа должна задавать следующие вопросы: 
                          # “У вас есть высшее образование? (y/n)”, “У вас есть опыт работы программистом? (y/n)”, 
                          # “У вас более трех лет опыта? (y/n)”. 
                          # За каждый положительный ответ начисляется 1 балл (переменную можно назвать score). 
                          # Если набралось 2 или более баллов программа должна выводить на экран “Добро пожаловать в США”.
                          puts 'У вас есть высшее образование? (y/n)'
                          answer_education = gets.chomp.downcase
                          puts 'У вас есть опыт работы программистом? (y/n)'
                          answer_experience = gets.chomp.downcase
                          puts 'У вас более трех лет опыта? (y/n)'
                          answer_experience_3_years = gets.chomp.downcase
            
                          score = 0
                          if answer_education == 'y'
                            score = score + 1
                          end
                          if answer_experience == 'y'
                            score = score + 1
                          end
                          if answer_experience_3_years == 'y'
                            score = score + 1
                          end
                          puts "#{score}"
                          if score >= 2
                          puts 'Добро пожаловать в США'
                          gets
                          end
                      
  • Программа № 31 (стр. 61). По заданию № 27 (стр. 61). 2 вариант.
    app 27-2.rb
                          questions = ['У вас есть высшее образование? (y/n)',
                                      'У вас есть опыт работы программистом? (y/n)',
                                      'У вас более трех лет опыта? (y/n)']
                          answers = []
                          
                          questions.each do |question|
                            puts question
                            answer = gets.chomp.downcase
                            answers << answer if answer == 'y'
                          end
                          if answers.count >= 2
                            puts 'Добро пожаловать в США'
                          else
                            puts 'Недостаточно положительных ответов'
                          end
                          gets
                      
  • Программа № 32 (стр. 61). По заданию № 27 (стр. 61). 3 вариант.
    app 27-3.rb
                                questions = ['У вас есть высшее образование? (y/n)',
                                            'У вас есть опыт работы программистом? (y/n)',
                                            'У вас более трех лет опыта? (y/n)']
                                
                                answers = 0
                                
                                questions.each do |question|
                                  puts question
                                  answers += 1 if gets.chomp.casecmp('y').zero?
                                end
                                
                                if answers >= 2
                                  puts 'Добро пожаловать в США'
                                else
                                  puts 'Недостаточно положительных ответов'
                                end
                                gets
                            
  • Программа № 33 (стр. 62). Некоторые полезные функции языка руби.
    app 28.rb
                                puts "Запускаем ракеты..."
                                5.downto(1) do |i|
                                puts "Осталось #{i} секунд"
                                sleep 1
                                end
                                puts "Ба-бах!"
                            
  • Программа № 34 по заданию № 29 (стр. 67). Генерация случайных целых чисел.
    app 29.rb
                                # Напишите программу, которая будет выводить случайное число от 500 до 510.
                                random = rand(500..510)
                                puts "#{random}"
                            
  • Программа № 35 по заданию № 30 (стр. 67). Генерация случайных дробных чисел.
    app 30.rb
                                # Напишите программу, которая будет выводить случайное число с дробью от 0 до 1.
                                random = rand(0.00..1.00)
                                puts "#{random}"
                            
  • Программа № 36 по заданию № 31 (стр. 67). Генерация случайных дробных чисел.
    app 31.rb
                          # Напишите программу, которая будет выводить случайное число с дробью от 2 до 4.
                          random = rand(2.00..4.00)
                          puts "#{random}"
                      
  • Программа № 37 (стр. 62). Угадай число. 1 версия.
    app 32-1.rb
                          number = rand(1..10)
                          print 'Привет! Я загадал число от 1 до 10, попробуйте угадать: '
                          loop do
                            input = gets.to_i
                            if input == number
                              puts 'Правильно!'
                              exit
                            end
                            if input != number
                              print 'Неправильно, попробуйте еще раз: '
                            end
                          end
                      
  • Программа № 38 (стр. 62). Угадай число. 2 версия.
    app 32-2.rb
                        number = rand(1..10)
                        print 'Привет! Я загадал число от 1 до 10, попробуйте угадать: '
                        loop do
                          input = gets.to_i
                          if input == number
                            puts 'Правильно!'
                            exit
                            else
                            print 'Неправильно, попробуйте еще раз: '
                          end
                        end
                      
  • Программа № 39 (стр. 69). По заданию № 32 (стр. 69).
    app 33.rb
                          # Измените программу, чтобы она загадывала число от 1 до 1_000_000 (1 миллиона). 
                          # Чтобы можно было угадать это число, программа должна сравнивать текущий ответ пользователя и искомое число: 
                          # 1) если ответ пользователя больше, то программа должна выводить на экран “Искомое число меньше вашего ответа”; 
                          # 2) иначе “Искомое число больше вашего ответа”. 
                          # Может показаться, что угадать это число невозможно, 
                          # однако математический расчет показывает, что угадать число в этом случае можно не более, чем за 20 попыток.
            
                          number = rand(1..1000000)
                            i = 0
                          print 'Привет! Я загадал число от 1 до 1000000, попробуйте угадать: '
                          loop do
                            input = gets.to_i
                            if input > number
                                i += 1
                              puts 'Искомое число меньше вашего ответа'
                              elsif input < number
                                i += 1
                              print 'Искомое число больше вашего ответа '
                              else input == number
                              puts 'Правильно!'
                              puts "Число попыток: #{i}"
                            end
                          end
                              
                          gets
                      
  • Программа № 40 (стр. 70). Тернарный оператор.
    app 34.rb
                          puts("Is it raining? (y/n)")
                          x = gets.chomp.downcase
                          x == 'y' ? print('stay_home') : print('go_party')
                      
  • Программа № 41 (стр. 72). Индикатор форматирования.
    app 35.rb
                          print 'Formatting hard drive'
                          100_000.times do
                          print '.'
                          sleep rand(0.05..0.5)
                          end
                      
  • Программа № 42. По заданию № 34 (стр. 73).
    app 36.rb
                          x = 0.1
            
                          while true
                            print "/" + "\r"
                            sleep x
            
                            print "-" + "\r"
                            sleep x
            
                            print "\\" + "\r"
                            sleep x
            
                            print "|" + "\r"
                            sleep x
            
                            print "/" + "\r"
                            sleep x
            
                            print "-" + "\r"
                            sleep x
            
                            print "\\" + "\r"
                            sleep x
            
                            print "|" + "\r"
                            sleep x
                          end
                      
  • Программа № 43. Методы.
    app 37.rb
                          def get_number(what)
                          print "Введите #{what}: "
                          gets.to_i
                          end
                          age = get_number('возраст')
                          salary = get_number('зарплату')
                          rockets = get_number('количество ракет для запуска')
                      
  • Программа № 44. По заданию № 35 (стр. 75).
    app 38.rb
                          def convert_password(password)
                            "*" * password.length
                          end
            
                          puts "Введте ваш пароль: "
                          user_password = STDIN.gets
                          puts "Спасибо ваш пароль защищен #{convert_password(user_password)}"           
                      
  • Программа № 45. По заданию № 36 (стр. 80)
    app 39.rb
                          ########################################
                          # ОПРЕДЕЛЯЕМ ПЕРЕМЕННЫЕ
                          ########################################
                          @people = 10
                          @machines = 10
                          ########################################
                          # ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ
                          ########################################
                          # Метод возвращает случайное значение: true или false
                          def luck?
                            rand(0..1) == 1
                          end
                          
                          def boom
                            diff = rand(1..5)
                            if luck?
                              @machines -= diff
                              puts "#{diff} машин уничтожено"
                              else
                              @people -= diff
                              puts "#{diff} людей погибло"
                            end
                          end
                          
                          # Метод возвращает случайное название города
                          def random_city
                            dice = rand(1..5)
                            if dice == 1
                              'Москва'
                              elsif dice == 2
                              'Лос-Анджелес'
                              elsif dice == 3
                              'Пекин'
                              elsif dice == 4
                              'Лондон'
                              else
                              'Сеул'
                            end
                          end
                          
                          def random_sleep
                            sleep rand(0.3..1.5)
                          end
                          
                          def stats
                            puts "Осталось #{@people} людей и #{@machines} машин"
                          end
                          
                          ########################################
                          # СОБЫТИЯ
                          ########################################
                          
                          def event1
                            puts "Запущена ракета по городу #{random_city}"
                            random_sleep
                            boom
                          end
                          
                          def event2
                            puts "Применено радиоактивное оружие в городе #{random_city}"
                            random_sleep
                            boom
                          end
                          
                          def event3
                            puts "Группа солдат прорывает оборону противника в городе #{random_city}"
                            random_sleep
                            boom
                          end
                          
                          ########################################
                          # ПРОВЕРКА ПОБЕДЫ
                          ########################################
                          def check_victory?
                            if @people > 0 and @machines <= 0
                              true and puts("Люди выиграли")
                              exit
                              elsif 
                              @machines > 0 and @people <= 0
                              true and puts("Машины выиграли")
                            else
                            end
                          end
                          ########################################
                          # ГЛАВНЫЙ ЦИКЛ
                          ########################################
                          loop do
                            if check_victory?
                              exit
                            end
                            
                            dice = rand(1..3)
                            if dice == 1
                              event1
                              elsif dice == 2
                              event2
                              elsif dice == 3
                              event3
                            end
                            stats
                            random_sleep
                          end         
                      
  • Программа № 46. По заданию № 37 (стр. 80)
    app 40.rb
                          ########################################
                          # ОПРЕДЕЛЯЕМ ПЕРЕМЕННЫЕ
                          ########################################
                          @people = 10
                          @machines = 10
                          ########################################
                          # ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ
                          ########################################
                          # Метод возвращает случайное значение: true или false
                          def luck?
                            rand(0..1) == 1
                          end
                          
                          def boom
                            diff = rand(1..5)
                            if luck?
                              @machines -= diff
                              puts "#{diff} машин уничтожено"
                              else
                              @people -= diff
                              puts "#{diff} людей погибло"
                            end
                          end
                          
                          # Метод возвращает случайное название города
                          def random_city
                            dice = rand(1..5)
                            case dice
                              when 1
                              'Москва'
                              when 2
                              'Лос-Анджелес'
                              when 3
                              'Пекин'
                              when 4
                              'Лондон'
                              when 5
                              'Сеул'
                            end
                          end
                          
                          def random_sleep
                            sleep rand(0.3..1.5)
                          end
                          
                          def stats
                            puts "Осталось #{@people} людей и #{@machines} машин"
                          end
                          
                          ########################################
                          # СОБЫТИЯ
                          ########################################
                          
                          def event1
                            puts "Запущена ракета по городу #{random_city}"
                            random_sleep
                            boom
                          end
                          
                          def event2
                            puts "Применено радиоактивное оружие в городе #{random_city}"
                            random_sleep
                            boom
                          end
                          
                          def event3
                            puts "Группа солдат прорывает оборону противника в городе #{random_city}"
                            random_sleep
                            boom
                          end
                          
                          ########################################
                          # ПРОВЕРКА ПОБЕДЫ
                          ########################################
                          def check_victory?
                            if @people > 0 and @machines <= 0
                              true and puts("Люди выиграли")
                              exit
                              elsif 
                              @machines > 0 and @people <= 0
                              true and puts("Машины выиграли")
                            else
                            end
                          end
                          ########################################
                          # ГЛАВНЫЙ ЦИКЛ
                          ########################################
                          loop do
                            if check_victory?
                              exit
                            end
                            
                            dice = rand(1..3)
                            if dice == 1
                              event1
                              elsif dice == 2
                              event2
                              elsif dice == 3
                              event3
                            end
                            stats
                            random_sleep
                          end
                      
  • Программа № 47. Однорукий бандит
    app 41.rb
                          print 'Ваш возраст: '
                          age = gets.to_i
                          
                          if age < 18
                            puts 'Сожалеем, но вам нет 18'
                            exit
                          end
                          
                          balance = 20
                          
                          loop do
                            puts 'Нажмите Enter, чтобы дернуть ручку...'
                            gets
                          
                            x = rand(0..5)
                            y = rand(0..5)
                            z = rand(0..5)
                          
                            puts "Результат: #{x} #{y} #{z}"
                          
                            if x == 0 && y == 0 && z == 0
                            balance = 0
                            puts 'Ваш баланс обнулен'
                            elsif x == 1 && y == 1 && z == 1
                              balance += 10
                              puts 'Баланс увеличился на 10 долларов'
                            elsif x == 2 && y == 2 && z == 2
                              balance += 20
                              puts 'Баланс увеличился на 20 долларов'
                            else
                            balance -= 0.5
                            puts 'Баланс уменьшился на 50 центов'
                          end
                          
                          puts "Ваш баланс: #{balance} долларов"
                          
                          end
                      
  • Программа № 48. По заданию № 40 (стр. 87)
    app 43.rb
                          print 'Ваш возраст: '
                          age = gets.to_i
                          if age < 18
                            puts 'Сожалеем, но вам нет 18'
                            exit
                          end
                          
                          balance = 20
                          loop do
                            puts 'Нажмите Enter, чтобы дернуть ручку...'
                            gets
                          
                            x = rand(0..5)
                            y = rand(0..5)
                            z = rand(0..5)
                          
                            x.times do |x|
                              print "Результат: #{x} #{0} #{0}\r"
                              sleep 0.5
                            end
                          
                            y.times do |y|
                              print "Результат: #{x} #{y} #{0}\r"
                              sleep 0.5
                            end
                          
                            z.times do |z|
                              print "Результат: #{x} #{y} #{z}\r"
                              sleep 0.5
                            end
                          
                              puts "Результат: #{x} #{y} #{z}"
                          
                            if x == 0 && y == 0 && z == 0
                              balance = 0
                              puts 'Ваш баланс обнулен'
                            elsif x == 1 && y == 1 && z == 1
                              balance += 10
                              puts 'Баланс увеличился на 10 долларов'
                            elsif x == 2 && y == 2 && z == 2
                              balance += 20
                              puts 'Баланс увеличился на 20 долларов'
                            else
                              balance -= 0.5
                              puts 'Баланс уменьшился на 50 центов'
                            end
                          
                            puts "Ваш баланс: #{balance} долларов"
                          
                            if balance == 0
                              puts 'Игра завершена'
                              exit
                            end  
                          end
                      
  • Программа № 49. Анимация счетчика
    app 42.rb
                          print 'Введите число: '
                          counter = gets.to_i
                          counter.times do |n|
                            print "#{n}\r"
                            sleep 0.5
                          end
                      
  • Программа № 50. Записная книжка
    app 44.rb
                          arr = []
            
                          loop do
                            print 'Введите имя и телефон человека (Enter для окончания ввода): '
                            entry = gets.chomp
                            break if entry.empty?
                            arr << entry
                          end
                          
                          puts 'Ваша записная книжка:'
                          
                          arr.each do |element|
                            puts element
                          end
                      
  • Программа № 51. По заданию № 43 (стр. 98)
    app 45.rb
                          ###############################
                          # ОБЪЯВЛЯЕМ МАССИВЫ
                          ###############################
                          # массив для первой команды
                          @arr1 = Array.new(10, 1)
                          # массив для второй команды
                          @arr2 = Array.new(10, 1)
                          
                          ###############################
                          # АТАКА
                          ###############################
                          # Метод принимает массив для атаки
                          def attack(arr)
                            sleep 1 # добавим sleep для красоты
                            i = rand(0..9)
                            if arr[i] == 1
                              arr[i] = 0
                              puts "Робот по индексу #{i} уничтожен"
                              else
                              puts "Промазали по индексу #{i}"
                            end
                            sleep 1 # еще один sleep для красоты вывода
                          end
                          
                          ###############################
                          # ПРОВЕРКА ПОБЕДЫ
                          ###############################
                          def victory?
                            robots_left1 = @arr1.count { |x| x == 1 }
                            robots_left2 = @arr2.count { |x| x == 1 }
                              if robots_left1 == 0
                              puts "Команда 2 победила, в команде осталось #{robots_left2} роботов"
                              return true
                            end
                              if robots_left2 == 0
                              puts "Команда 1 победила, в команде осталось #{robots_left1} роботов"
                              return false
                            end
                            false
                          end
                          
                          ###############################
                          # СТАТИСТИКА
                          ###############################
                          def stats
                            # количество живых роботов для первой и второй команды
                            cnt1 = @arr1.count { |x| x == 1 }
                            cnt2 = @arr2.count { |x| x == 1 }
                            puts "1-ая команда: #{cnt1} роботов в строю"
                            puts "2-ая команда: #{cnt2} роботов в строю"
                          end
                          
                          ###############################
                          # ГЛАВНЫЙ ЦИКЛ
                          ###############################
                          loop do
                            puts 'Первая команда наносит удар...'
                            attack(@arr2)
                            exit if victory?
                            stats
                            sleep 3
                            puts # пустая строка
                            puts 'Вторая команда наносит удар...'
                            attack(@arr1)
                            exit if victory?
                            stats
                            sleep 3
                            puts # пустая строка
                          end
                      
  • Программа № 52. По заданию № 44 (стр. 100)
    app 46.rb
                          ###############################
                          # ОБЪЯВЛЯЕМ МАССИВЫ
                          ###############################
                          # массив для первой команды
                          @arr1 = Array.new(10, 1)
                          # массив для второй команды
                          @arr2 = Array.new(10, 1)
                          
                          ###############################
                          # АТАКА
                          ###############################
                          # Метод принимает массив для атаки
                          def attack(arr)
                            sleep 1 # добавим sleep для красоты
                            i = rand(0..9)
                            if arr[i] == 1
                              arr[i] = 0
                              puts "Робот по индексу #{i} уничтожен"
                              else
                              puts "Промазали по индексу #{i}"
                            end
                            sleep 1 # еще один sleep для красоты вывода
                          end
                          
                          ###############################
                          # ПРОВЕРКА ПОБЕДЫ
                          ###############################
                          def victory?
                            robots_left1 = @arr1.count { |x| x == 1 }
                            robots_left2 = @arr2.count { |x| x == 1 }
                              if robots_left1 == 0
                              puts "Команда 2 победила, в команде осталось #{robots_left2} роботов"
                              return true
                            end
                              if robots_left2 == 0
                              puts "Команда 1 победила, в команде осталось #{robots_left1} роботов"
                              return false
                            end
                            false
                          end
                          
                          ###############################
                          # СТАТИСТИКА
                          ###############################
                          def stats
                            # количество живых роботов для первой и второй команды
                            cnt1 = @arr1.count { |x| x == 1 }
                            cnt2 = @arr2.count { |x| x == 1 }
                            puts "\n"
                            puts "1-ая команда: #{cnt1} роботов в строю"
                            puts "#{@arr1}"
                            puts "2-ая команда: #{cnt2} роботов в строю"
                            puts "#{@arr2}"
                            
                          end
                          
                          ###############################
                          # ГЛАВНЫЙ ЦИКЛ
                          ###############################
                          loop do
                            puts 'Первая команда наносит удар...'
                            attack(@arr2)
                            exit if victory?
                            stats
                            sleep 3
                            puts # пустая строка
                            puts 'Вторая команда наносит удар...'
                            attack(@arr1)
                            exit if victory?
                            stats
                            sleep 3
                            puts # пустая строка
                          end
                      
  • Программа № 53. По заданию № 45 (стр. 100)
    app 47.rb
                          ###############################
                          # ОБЪЯВЛЯЕМ МАССИВЫ
                          ###############################
                          # массив для первой команды
                          @arr1 = Array.new(10, 1)
                          # массив для второй команды
                          @arr2 = Array.new(10, 1)
                          
                          ###############################
                          # АТАКА
                          ###############################
                          # Метод принимает массив для атаки
                          def attack(arr)
                            sleep 1 # добавим sleep для красоты
                            i = rand(0..9)
                            if arr[i] == 1
                              arr[i] = 0
                              puts "Робот по индексу #{i} уничтожен"
                              else
                              puts "Промазали по индексу #{i}"
                            end
                            sleep 1 # еще один sleep для красоты вывода
                          end
                          
                          ###############################
                          # ПРОВЕРКА ПОБЕДЫ
                          ###############################
                          def victory?
                            robots_left1 = @arr1.count { |x| x == 1 }
                            robots_left2 = @arr2.count { |x| x == 1 }
                              if robots_left1 == 0
                              puts "Команда 2 победила, в команде осталось #{robots_left2} роботов"
                              return true
                            end
                              if robots_left2 == 0
                              puts "Команда 1 победила, в команде осталось #{robots_left1} роботов"
                              return false
                            end
                            false
                          end
                          
                          ###############################
                          # СТАТИСТИКА
                          ###############################
                          def stats
                            # количество живых роботов для первой и второй команды
                            cnt1 = @arr1.count { |x| x == 1 }
                            cnt2 = @arr2.count { |x| x == 1 }
                            puts "\n"
                            puts "1-ая команда: #{cnt1} роботов в строю"
                            puts "#{@arr1}"
                            puts "2-ая команда: #{cnt2} роботов в строю"
                            puts "#{@arr2}"
                            
                          end
                          
                          ###############################
                          # ГЛАВНЫЙ ЦИКЛ
                          ###############################
                          loop do
                            puts 'Первая команда наносит удар...'
                            attack(@arr2)
                            exit if victory?
                            stats
                            sleep 3
                            puts # пустая строка
                            puts 'Вторая команда наносит удар...'
                            attack(@arr1)
                            exit if victory?
                            stats
                            sleep 3
                            puts # пустая строка
                          end
                      
  • Программа № 54. По заданию № 47 (стр. 113)
    app 48.rb
                          a = Array.new(5) { Array.new(4, rand(1..5))}
                          a.each {|var| p var}
                      
  • Программа № 55. По заданию № 48 (стр. 113)
    app 49.rb
                          a = Array.new(5) { Array.new(4, rand(1..5))}
                          a.each {|var| p var}
                      
  • Программа № 56. По заданию № 49 (стр. 113)
    app 50.rb
                          a = Array.new(4) { Array.new(5){ rand(rand(1..9))}}
                          a.each {|var| p var}
                      
  • Программа № 57. По заданию № 50 (стр. 117)

    Часть вывода

                            [1] pry(main)> Array.new(10) { Array.new(10) }
                            [
                                [0] [
                                    [0] nil,
                                    [1] nil,
                                    [2] nil,
                                    [3] nil,
                                    [4] nil,
                                    [5] nil,
                                    [6] nil,
                                    [7] nil,
                                    [8] nil,
                                    [9] nil
                                ],
                                [1] [
                                    [0] nil,
                                    [1] nil,
                                    [2] nil,
                                    [3] nil,
                                    [4] nil,
                                    [5] nil,
                                    [6] nil,
                                    [7] nil,
                                    [8] nil,
                                    [9] nil
                                ],
                                [2] [
                                    [0] nil,
                                    [1] nil,
                                    [2] nil,
                                    [3] nil,
                                    [4] nil,
                                    [5] nil,
                                    [6] nil,
                                    ...