Раздел «Язык Ruby».RubyTest1:

Тест по Ruby (часть 1)

Полезно предварительно познакомится со следующими методами:

 String#to_i, 
 File::open, IO#scan, IO#split,
 each, each_with_index, each_index, select, map, sort, sort_by,
 Array::new,
 Array#push,  Array#pop,  Array#shift,  Array#unshift 

Задача 1. Наименьшее общее кратное: На вход подаётся строка, содержащая натуральные числа. Вывести наименьшее общее кратное этих чисел.

Задача 2. Удаление дубликатов: На вход подаётся строка, содержащая целые неотрицательные числа. Удалить из строки дубликаты, сохранив исходный порядок чисел.

Задача 3. Имена собственные: Найдите в файле "a.txt" все собственные имена, которые имеют шаблон /[A-Z][a-z]+\s+[A-Z][a-z]+/, то есть состоят из двух слов латинского алфавита, начинающихся на заглавные буквы. Выведите их на стандартный поток вывода без повторений.

Задача 4. Арифметическая прогрессия: На вход подаётся строка, содержащая целые неотрицательные числа. Проверить, является ли данная последовательность арифметической прогрессией.

Задача 5. Вычисление цепной дроби: Используя метод inject, напишите преобразование цепной дроби в исходное рациональное число. Например, массив [10,2,3,4] должен быть преобразован в 313/30 (результат вычисления "10+1/(2+1/(3+1/4))"). Возвращайте рациональное число (объект класса Rational).

Задача 6. Частоты слов: Файл "a.txt" содержит слова. Все символы кроме русских и латинских букв считайте разделительными символами. Выведите 10 наиболее часто встречаемых слов длины более 6 символов с указанием их частот.

Задача 7. Стековый калькулятор: Вход: выражение в постфиксной форме. В выражении используются действительные числа и бинарные операторы + * / -. Выход: результат вычисления.

Задача 8. Генератор несократимых дробей: Напишите генератор несократимых дробей m/n, (m <= n). Генерировать нужно в лексикографическом порядке пар (n,m). Необходимо реализовать две функции sequence и upto. Обе они вызываются с блоком, который принимает два аргумента — n и m. Функция sequence получает количество чисел, а upto — пару чисел N и M. (см. как реализован генератор пифагоровых троек и генератор чисел Фибоначчи)

Задача 9. Таблица: В файле "a.txt" дана таблица, состоящая из нескольких столбцов (2 или больше). Первый столбец содержит содержит слова, остальные столбцы содержат действительные числа. Первая строка таблицы — её заголовок, то есть список имен полей, разделенных пробелом. Имя поля — слово из латинских букв, знаков подчеркивания и цифр. Необходимо отсортировать строки таблицы по числам во втором столбце, и под каждым столбцом кроме первого написать значение суммы всех чисел, находящихся в столбце. Результат вывести в стандартный поток вывода.
Вход:
Name Field1 Field2 Field3
Alex 1.6    5      12
Nick 1.7    7      14
Olga 1.1    2      20
Tom  0.7    2      11
Ann  2.1    8      13

Выход:
Name Field1 Field2 Field3
Tom  0.7    2      11
Olga 1.1    2      20
Alex 1.6    5      12
Nick 1.7    7      14
Ann  2.1    8      13
Total: 7.2 24.0 70.0

Задача 10. (двоичная запись) Напишите методы Integer::create_from_bits(ary) и Integer#to_bits для создания числа из массива бит двоичной записи и получения массива бит двоичного представления данного числа.

Задача 11. (перемешивание массива) Напишите функции Array#shuffle и Array#shuffle! "перемешивания" элементов массива (Array#shuffle! модифицирует исходный массив, а Array#shuffle — создаёт новый). Используйте функцию rand, которая, если в аргументе указано положительное целое число n, возвращает случайное число из промежутка 0..(n-1).

Пример использования:

p (1..20).to_a.shuffle
# => [9, 18, 16, 13, 0, 15, 4, 10, 1, 20, 11, 12, 17, 19, 5, 14, 7, 6, 8, 2, 3]

Задача 12. (счастливые билеты) Номер билета — это упорядоченный набор 6 цифр. Билет счастливый, если сумма первых трёх цифр равна сумме последних трёх цифр. Напишите программу, подсчитывающую число счастливых билетов. Пусть a(n) — число упорядоченных наборов трёх цифр с суммой n. Тогда число счастливых билетов равно
a(0)^2 +  a(1)^2 + a(2)^2 + ... + a(26)^2 + a(27)^2
Используйте этот факт в своей программе.