Задание: заведите блокнот с идеями. Записывайте туда абсолютно все идеи, которые приходят вам в голову. Возможно вы вернетесь к ним через неделю, месяц, или год.
Задание: заведите блокнот с идеями. Записывайте туда абсолютно все идеи, которые приходят вам в голову. Возможно вы вернетесь к ним через неделю, месяц, или год.
Найти и установить ruby installer
Запустите программу “1+1” (без puts).
Написать программу, которая считает количество миллисекунд в сутках
Посчитать количество секунд в сутках, не выводя результат на экран с помощью puts (в irb)
Установить файловый менеджер
“Походите” по вашей файловой системе и посмотрите какие файлы и директории в ней существуют. Директории из корневого каталога (== “директории из корневой директории”) будут часто встречаться в будущем.
Разберитесь с созданием, копированием, переносом файлов и директорий. Попробуйте скопировать несколько файлов, предварительно выделив их (Ins).
Установить текстовый редактор. Попробовать создать несколько файлов в текстовом редакторе. В каждый файл запишите имя человека, которого вы знаете. Удалите файлы.
Попробовать оставить комментарии к своей программе и добавить пустые строки после gets, чтобы визуально программа выглядела “легче”.
Если у вас установлена ОС Windows, попробуйте скачать VMWare Workstation (платная программа) или VirtualBox (бесплатная). Это виртуальная машина - программа для запуска операционных систем внутри вашей ОС. Попробуйте запустить виртуальную машину и установить в ней Linux Mint Cinnamon edition. Попробуйте написать первую программу в Linux! Если не получится - ничего страшного, продолжайте обучение дальше, можно будет вернуться к этому позднее.
написать программу, которая подряд спрашивает год рождения, место рождения, номер телефона трех клиентов, после чего выводит полученную информацию полностью в виде “карточек” (в англ.языке это бы называлось baseball card, аналогия в русском языке - карточка из картотеки).
Узнайте какой тип данных у `""`. А какой тип данных у `0` (ноль)? Какой тип данных у минус единицы? Какой тип данных у округленного числа “Пи” `3.14`?
Известно, что метод `.class` для любого объекта возвращает результат. REPL читает (read), выполняет (evaluate) и печатает (print) этот результат на экран. Но если все в руби объект, то какого типа возвращается сам результат, когда мы пишем `.class`? Вот этот метод `.class` - результат какого типа он возвращает? Видно ли это из документации? Проверьте. Попробуйте написать `123.class.class` - первое выражение `123.class` вернет результат, а следующий `.class` вычислит тип этого результата.
Посмотрите документацию к методу “chomp” и “size” класса String.
Напишите программу для подсчета годовой зарплаты. Пользователь вводит размер заработной платы в месяц, а программа выводит размер заработной платы в год. Допустим, что пользователь каждый месяц хочет откладывать 15% своей зарплаты. Измените программу, чтобы она выводила не только размер заработной платы, но и размер отложенных за год средств. Измените программу, чтобы она выводила размер отложенных средств за 5 лет.
Посмотрите какие еще существуют bang-методы у класса String
Известно, что стоимость дома - 500 тысяч долларов. Человек берет дом в рассрочку на 30 лет. Чтобы выплатить дом за 30 лет, нужно платить 16666 долларов в год (это легко посчитать, разделив 500 тысяч на 30). Написать программу, которая для каждого года выводит сумму, которую осталось выплатить.
Измените программу из предыдущего задания со следующими условиями: человек берет дом не в рассрочку, а в кредит по ставке 4% годовых на оставшуюся сумму. Для каждого года посчитайте сколько денег нужно заплатить за этот год за использование кредита.
Посчитайте количество денег (total), которые мы заплатим только в виде процентов по кредиту за 30 лет.
Известно, что на Луне продают участки. Любой участок менее 50 квадратных метров стоит 1000 долларов. Участок площадью от 50 до 100 квадратных метров стоит 1500 долларов. От 100 и выше - по 25 долларов за квадратный метр. Напишите программу, которая запрашивает длину и ширину участка и выводит на экран его стоимость.
Напишите программу “иммигрант”. Программа должна задавать следующие вопросы: “У вас есть высшее образование? (y/n)”, “У вас есть опыт работы программистом? (y/n)”, “У вас более трех лет опыта? (y/n)”. За каждый положительный ответ начисляется 1 балл (переменную можно назвать score). Если набралось 2 или более баллов программа должна выводить на экран “Добро пожаловать в США”.
Посмотрите документацию по классу Range
Напишите программу, которая будет выводить случайное число от 500 до 510.
Напишите программу, которая будет выводить случайное число с дробью от 0 до 1.
Напишите программу, которая будет выводить случайное число с дробью от 2 до 4.
Измените программу, чтобы она загадывала число от 1 до 1_000_000 (1 миллиона). Чтобы можно было угадать это число, программа должна сравнивать текущий ответ пользователя и искомое число: 1) если ответ пользователя больше, то программа должна выводить на экран “Искомое число меньше вашего ответа”; 2) иначе “Искомое число больше вашего ответа”. Может показаться, что угадать это число невозможно, однако математический расчет показывает, что угадать число в этом случае можно не более, чем за 20 попыток.
Запишите следующие примеры при помощи тернарного оператора
Пример 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
С помощью символов “/”, “-”, “\”, “|” сделайте анимацию - индикатор загрузки. Если выводить эти символы по-очереди на одном и том же месте, возникает ощущение вращающегося символа.
напишите метод, который выводит на экран пароль, но в виде звездочек. Например, если пароль “secret”, метод должен вывести “Ваш пароль: ******”.
Реализуйте метод “check_victory?” (сейчас он просто возвращает значение false). В случае победы или поражения необходимо выводить полученный результат на экран. Измените 10_000 на 10 чтобы легче было отлаживать программу.
Посмотрите документацию к "ruby case statements" и замените конструкцию "if...elsif" на "case...when".
Cделать так, чтобы цикл был теоретически бесконечным. Т.е. чтобы равновероятно на свет появлялись люди и машины. Количество появившихся людей или машин должно равняться количеству погибших людей или машин. Несмотря на то, что теоретически борьба может быть бесконечной, на практике может наступить ситуация, в которой та или иная сторона выигрывает. Проверьте программу на практике, попробуйте разные значения `people` и `machines` (1000, 100, 10).
Улучшите программу "Эмулятор судного дня", добавьте как минимум еще 3 события, которые могут влиять на результат судного дня.
Определите метод, который будет вычислять случайный номер с анимацией (используйте sleep со случайной задержкой). Примените анимацию к переменным “x”, “y”, “z”.
Добавьте больше условий в игру “Однорукий бандит”, используйте свое воображение.
Если вы используете MacOS то вместо цифр в консоли используйте эмодзи. Пусть каждой цифре соответствует определенная картинка. Вы можете найти эмодзи на сайте https://emojipedia.org/ .
Напишите игру "Битва роботов".
Чтобы статистика была более наглядной, добавьте в программу выше вывод двух массивов.
Вместо бинарного значения ноль или единица пусть каждый робот имеет уровень жизни, который выражается целым числом от 1 до 100 (в самом начале это значение должно быть установлено в 100). Пусть каждая атака отнимает случайную величину жизни у робота от 30 до 100. Если уровень жизни ниже или равен нулю, робот считается уничтоженным.
Если вы не попробовали в REPL все написанное выше, то перечитайте и попробуйте
Создайте массив в 5 строк и 4 столбца, заполните каждую строку случайным значением от 1 до 5 (только одно случайное значение для каждой строки). Пример для массива 2 на 3:
[ [2, 2, 2], [5, 5, 5] ]
Создайте массив в 4 строки и 5 столбцов, заполните каждую строку случайным значением от 1 до 5 (только одно случайное значение для каждой строки).
Создайте массив 5 на 4 и заполните весь массив абсолютно случайными значениями от 0 до 9.
Попробуйте в “pry” вывести поле 10 на 10 для игры в “Морской бой”.
puts(1+1)
$ ruby
puts 1+1
2
$
$ ruby
puts 60 * 60 * 24 * 1000
(нажмите Ctrl + D)
(нажмите Enter)
86400000
$ ruby
puts 5**5 * 4**4 * 3**3 * 2**2 * 1**1
(нажмите Ctrl + D)
(нажмите Enter)
86400000
$ ruby
puts 60 * 60 * 24 * 1000 == 5**5 * 4**4 * 3**3 * 2**2 * 1**1
(нажмите Ctrl + D)
(нажмите Enter)
true
$ irb
irb(main):001:0> 60*60*24*1000
=> 86400000
irb(main):002:0>
puts "How to translate ball?"
gets
puts "How to translate door?"
gets
puts "How to translate peace?"
gets
# 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
# Программа спрашивает возраст и выводит его на экран puts "Your age?" age = gets puts "Your age is" puts age
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
# Программа спрашивает возраст и выводит его на экран puts "Your age?" age = gets puts "=" * 80 puts "Your age is " + age gets
puts "Тип данных у `""`." puts "".class puts "Тип данных у нуля." puts 0.class puts "Тип данных у минус единицы" puts -1.class puts "тип данных у округленного числа “Пи” 3.14?" puts 3.14.class gets
# 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
# Программа подсчитывает возраст в месяцах puts "Your age?" age = gets age_months = age.to_i * 12 puts "Your age is " + age_months.to_s
# Программа подсчитывает 30% налог на вводимую зарплату puts "Your salary?" salary = gets.to_i tax_rate = 0.3 puts "Tax:" puts salary * tax_rate
puts "Your age?" age = gets.to_i puts "="*80 age_months = age * 12 puts "Your age is #{age_months}"
puts "Your age?" age = gets.to_i puts "="*80 age_months = age * 12 puts "Your age is #{age_months}"
# 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}"
#Преобразование заглавных букв в строчные используя bang! и их вывод a = 'HI' b = a a.downcase! puts b
# Блок с ключевыми словами do - end 10.times do puts "Спартак - чемпион!" puts "(и Динамо тоже)" end
# Каждый месяц откладывается определенная сумма. # Программа должна выводить сколько средств будет накоплено в течение следующих 24 месяцев. sum = 0 24.times do |i| sum = sum + 500 puts "За #{i + 1} месяц у бабушки в сундуке #{sum}" end
# Каждый месяц откладывается определенная сумма. # Программа должна выводить сколько средств будет накоплено в течение следующих 24 месяцев если каждый месяц начисляется 10%. sum = 0 percent = 0 24.times do |i| sum = sum + 500 + percent percent = sum * 0.1 puts "За #{i + 1} месяц у бабушки в сундуке #{sum + percent}" end
# Известно, что стоимость дома - 500 тысяч долларов. # Человек берет дом в рассрочку на 30 лет. # Чтобы выплатить дом за 30 лет, нужно платить 16666 долларов в год (это легко посчитать разделив 500 тысяч на 30). # Написать программу, которая для каждого года выводит сумму, которую осталось выплатить. sum = 500000 annual_payment = 16666 30.times do |i| sum = sum - annual_payment puts "За #{i + 1} год осталось заплатить #{sum}" end
# Известно, что стоимость дома - 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
# Вывести на экран числа от 50 до 100, и если число четное - рядом с ним написать `true`, если нечетное - `false`. 50.upto(100) { |i| puts "#{i} - #{i.to_i.even?}" }
# Комбинирование условий puts 'Сколько вам лет?' age = gets.to_i puts 'Являетесь ли вы членом партии Единая Россия? (y/n)' answer = gets.chomp.downcase if age >= 18 and answer == 'y' puts 'Вход на сайт разрешен' end
# Напишите программу, которая спрашивает логин и пароль пользователя в консоли. # Если имя “admin” и пароль “12345”, программа должна выводить на экран “Доступ к банковской ячейке разрешен”. puts 'Введите логин?' login = gets.chomp puts 'Введите пароль' password = gets.chomp if login == 'admin' and password == '12345' puts 'Доступ к банковской ячейке разрешен' else puts "Неверный логин и/или пароль" end
# Известно, что на Луне продают участки. # Любой участок менее 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
# Напишите программу “иммигрант”. Программа должна задавать следующие вопросы: # “У вас есть высшее образование? (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
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
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
puts "Запускаем ракеты..." 5.downto(1) do |i| puts "Осталось #{i} секунд" sleep 1 end puts "Ба-бах!"
# Напишите программу, которая будет выводить случайное число от 500 до 510. random = rand(500..510) puts "#{random}"
# Напишите программу, которая будет выводить случайное число с дробью от 0 до 1. random = rand(0.00..1.00) puts "#{random}"
# Напишите программу, которая будет выводить случайное число с дробью от 2 до 4. random = rand(2.00..4.00) puts "#{random}"
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
number = rand(1..10) print 'Привет! Я загадал число от 1 до 10, попробуйте угадать: ' loop do input = gets.to_i if input == number puts 'Правильно!' exit else print 'Неправильно, попробуйте еще раз: ' end end
# Измените программу, чтобы она загадывала число от 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
puts("Is it raining? (y/n)") x = gets.chomp.downcase x == 'y' ? print('stay_home') : print('go_party')
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
def get_number(what) print "Введите #{what}: " gets.to_i end age = get_number('возраст') salary = get_number('зарплату') rockets = get_number('количество ракет для запуска')
def convert_password(password) "*" * password.length end puts "Введте ваш пароль: " user_password = STDIN.gets puts "Спасибо ваш пароль защищен #{convert_password(user_password)}"
######################################## # ОПРЕДЕЛЯЕМ ПЕРЕМЕННЫЕ ######################################## @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
######################################## # ОПРЕДЕЛЯЕМ ПЕРЕМЕННЫЕ ######################################## @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
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
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
print 'Введите число: ' counter = gets.to_i counter.times do |n| print "#{n}\r" sleep 0.5 end
arr = [] loop do print 'Введите имя и телефон человека (Enter для окончания ввода): ' entry = gets.chomp break if entry.empty? arr << entry end puts 'Ваша записная книжка:' arr.each do |element| puts element end
############################### # ОБЪЯВЛЯЕМ МАССИВЫ ############################### # массив для первой команды @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
############################### # ОБЪЯВЛЯЕМ МАССИВЫ ############################### # массив для первой команды @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
############################### # ОБЪЯВЛЯЕМ МАССИВЫ ############################### # массив для первой команды @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
Часть вывода
[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, ...