From 1df018955fae4c3c266dc6b9819c34ac8533565a Mon Sep 17 00:00:00 2001 From: Artem Darius Weber Date: Sat, 21 Sep 2024 10:37:48 +0300 Subject: [PATCH] change dir structure and added lab 1 number funcations --- README.md | 48 ++----------- lab1/README.md | 67 +++++++++++++++++++ {spec => lab1/spec}/spec_02.rb | 0 {spec => lab1/spec}/spec_03.rb | 0 {src => lab1/src}/01_hello_world.rb | 0 {src => lab1/src}/02_user_interface.rb | 0 .../03_fork_02_with_exec_pasted_command.rb | 0 lab1/src/04_number_funcs.rb | 67 +++++++++++++++++++ 8 files changed, 141 insertions(+), 41 deletions(-) create mode 100644 lab1/README.md rename {spec => lab1/spec}/spec_02.rb (100%) rename {spec => lab1/spec}/spec_03.rb (100%) rename {src => lab1/src}/01_hello_world.rb (100%) rename {src => lab1/src}/02_user_interface.rb (100%) rename {src => lab1/src}/03_fork_02_with_exec_pasted_command.rb (100%) create mode 100644 lab1/src/04_number_funcs.rb diff --git a/README.md b/README.md index 465b199..fe17b76 100644 --- a/README.md +++ b/README.md @@ -2,51 +2,17 @@ --- -## 01. Hello world +Abstract: -Task: - -Установить компилятор и текстовый редактор. Реализовать и -вызвать Hello World c комментарием. (ну как всегда) - -```bash -ruby 01_hello_world.rb -``` - -Returns: - -``` -Hello, world! -``` - -## 02. User interface - -Task: - -Принять имя пользователя как аргумент программы. -Поздороваться с пользователем с использованием форматирования -строки. Спросить какой язык у пользователя любимый, в случае, если это -ruby, ответить что пользователь подлиза, иначе обязательно ответить, что -скоро будет ruby и поставить различные комментарии для нескольких -языков. - -```bash -ruby 02_user_interface.rb darius -``` - -## 03. User interface with ruby and os commands execution - -Task: +--- -3.Продолжение предыдущего задания. Попросить пользователя -ввести команду языка ruby. И команду OC. Выполнить команду руби и -команду операционной системы. +Content: -```bash -ruby 03_fork_02_with_exec_pasted_command.rb darius -``` +[Lab 1: Hello world, user interface and number funcations](https://git.djft.ru/darius-atlas/kubsu-sm5-ruby/src/branch/main/lab1) --- Author: Artem-Darius Weber -Licence: MIT \ No newline at end of file + +Licence: MIT + diff --git a/lab1/README.md b/lab1/README.md new file mode 100644 index 0000000..21c405d --- /dev/null +++ b/lab1/README.md @@ -0,0 +1,67 @@ +# Lab 1 + +--- + +## 01. Hello world + +Task: + +Установить компилятор и текстовый редактор. Реализовать и +вызвать Hello World c комментарием. (ну как всегда) + +```bash +ruby 01_hello_world.rb +``` + +Returns: + +``` +Hello, world! +``` + +## 02. User interface + +Task: + +Принять имя пользователя как аргумент программы. +Поздороваться с пользователем с использованием форматирования +строки. Спросить какой язык у пользователя любимый, в случае, если это +ruby, ответить что пользователь подлиза, иначе обязательно ответить, что +скоро будет ruby и поставить различные комментарии для нескольких +языков. + +```bash +ruby 02_user_interface.rb darius +``` + +## 03. User interface with ruby and os commands execution + +Task: + +3.Продолжение предыдущего задания. Попросить пользователя +ввести команду языка ruby. И команду OC. Выполнить команду руби и +команду операционной системы. + +```bash +ruby 03_fork_02_with_exec_pasted_command.rb darius +``` + +## 04. Number funcations + +Task: + +«Работа с числами». Составить 3 метода для работы с цифрами или делителей числа на основании варианта. Каждый метод отдельный коммит. + +- Метод 1. Найти количество четных чисел, не взаимно простых с данным +- Метод 2. Найти максимальную цифры числа, не делящуюся на 3. +- Метод 3. Найти произведение максимального числа, не взаимно простого с данным, не делящегося на наименьший делитель исходно числа, и суммы цифр числа, меньших 5. + +```bash +ruby 04_number_funcs.rb +``` + +--- + +Author: Artem-Darius Weber + +Licence: MIT \ No newline at end of file diff --git a/spec/spec_02.rb b/lab1/spec/spec_02.rb similarity index 100% rename from spec/spec_02.rb rename to lab1/spec/spec_02.rb diff --git a/spec/spec_03.rb b/lab1/spec/spec_03.rb similarity index 100% rename from spec/spec_03.rb rename to lab1/spec/spec_03.rb diff --git a/src/01_hello_world.rb b/lab1/src/01_hello_world.rb similarity index 100% rename from src/01_hello_world.rb rename to lab1/src/01_hello_world.rb diff --git a/src/02_user_interface.rb b/lab1/src/02_user_interface.rb similarity index 100% rename from src/02_user_interface.rb rename to lab1/src/02_user_interface.rb diff --git a/src/03_fork_02_with_exec_pasted_command.rb b/lab1/src/03_fork_02_with_exec_pasted_command.rb similarity index 100% rename from src/03_fork_02_with_exec_pasted_command.rb rename to lab1/src/03_fork_02_with_exec_pasted_command.rb diff --git a/lab1/src/04_number_funcs.rb b/lab1/src/04_number_funcs.rb new file mode 100644 index 0000000..588e2ec --- /dev/null +++ b/lab1/src/04_number_funcs.rb @@ -0,0 +1,67 @@ +require 'prime' + + + + +# @param n [Integer] Число, для которого нужно найти количество четных, не взаимно простых чисел. +# @return [Integer] Количество четных чисел, не взаимно простых с данным числом. +# @example +# count_even_non_coprimes(30) # => 14 +def count_even_non_coprimes(n) + (1...n).count do |num| + num.even? && n.gcd(num) != 1 + end +end + + +# @param n [Integer] Число, цифры которого нужно проверить. +# @return [Integer, nil] Максимальная цифра числа, не делящаяся на 3, или nil, если таких цифр нет. +# @example +# max_digit_not_divisible_by_three(483726) # => 8 +def max_digit_not_divisible_by_three(n) + n.digits.select { |digit| digit % 3 != 0 }.max +end + + +# @param n [Integer] Число, для которого нужно найти наименьший делитель. +# @return [Integer] Наименьший делитель числа. +# @example +# smallest_divisor(30) # => 2 +def smallest_divisor(n) + (2..n).find { |i| n % i == 0 } +end + + +# @param n [Integer] Число, для которого нужно найти подходящее максимальное число. +# @return [Integer, nil] Максимальное число, не взаимно простое с данным, не делящееся на наименьший делитель, или nil, если таких чисел нет. +# @example +# max_non_coprime_not_divisible_by_smallest_divisor(30) # => 28 +def max_non_coprime_not_divisible_by_smallest_divisor(n) + divisor = smallest_divisor(n) + (1...n).select { |num| n.gcd(num) != 1 && num % divisor != 0 }.max +end + + +# @param n [Integer] Число, цифры которого нужно просуммировать. +# @return [Integer] Сумма цифр числа, меньших 5. +# @example +# sum_of_digits_less_than_five(483726) # => 9 +def sum_of_digits_less_than_five(n) + n.digits.select { |digit| digit < 5 }.sum +end + + +# @param n [Integer] Число, для которого проводится вычисление. +# @return [Integer] Произведение максимального числа и суммы цифр числа. +# @example +# product_of_max_and_sum(30) # => 252 +def product_of_max_and_sum(n) + max_number = max_non_coprime_not_divisible_by_smallest_divisor(n) + sum_digits = sum_of_digits_less_than_five(n) + max_number * sum_digits +end + + +puts count_even_non_coprimes(30) # => 14 +puts max_digit_not_divisible_by_three(483726) # => 8 +puts product_of_max_and_sum(30) # => 252