Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.08.2019
Сообщений: 1

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

28.08.2019, 21:10. Показов 2208. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! начинаю только изучать программирование на языке Ruby, помогите пожалуйста решить задачу и объяснить как это делать. За ранние спасибо!

Дана последовательность:

Code
1
2
3
4
5
6
1
11
21
1211
111221
312211
Необходимо написать программу на Ruby, которая генерирует последовательность такого рода. Для реализации программы нужно использовать функции из стандартной библиотеки Ruby. Программа должна быть построена по принципам объектно-ориентированной архитектуры, использовать классы. Желательно, чтобы для программы были написаны автоматические тесты.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.08.2019, 21:10
Ответы с готовыми решениями:

Написать программу, которая генерирует последовательность из 10 случайных чисел в диапазоне от 1 до 10, выводит эти числа на экран и вычисляет их
Написать программу, которая генерирует последовательность из 10 случайных чисел в диапазоне от 1 до 10, выводит эти числа на экран и...

Написать программу,которая генерирует последовательность из 10 случайных чисел в диапазоне от 1 до 10, выводит эти числа на экран и вычисляет их средн
Написать программу,которая генерирует последовательность из 10 случайных чисел в диапазоне от 1 до 10, выводит эти числа на экран и...

Написать программу, котрая генерирует последовательность 10 случайных чисел
Написать программу, котрая генерирует последовательность 10 случайных чисел в диапазоне от 1 до 10 и выводит эти числа на экран и вычисляет...

3
28.08.2019, 21:48

Не по теме:

Ага. И сгенерировать 50-й член этой последовательности��

0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
28.08.2019, 22:56
Это первое задание на позицию интерна во FlatStack, если вы неспособны найти закономерность, то увы...
Но, раз вы таки решили создать тему, смотрите логику:
Code
1
2
3
4
один
одна единица
две единицы
одна двойка одна единица
и т. д.
Цитата Сообщение от Skrips911 Посмотреть сообщение
Программа должна быть построена по принципам объектно-ориентированной архитектуры, использовать классы
Вот здесь вопрос: что там использовать? есть уже Enumerable#chunk_while и Enumerable#slice_when, но вы можете сами реализовать эти методы, чтобы показать как вы понимаете алгоритмы.
Ruby
1
2
3
4
5
6
7
8
s = '1'
6.times do |i|
  puts s
 
  s = s.split('')
    .chunk_while { |a, b| a == b }
    .reduce('') { |s, el| "#{s}#{el.size}#{el.first}" }
end
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
29.08.2019, 11:26
Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

Цитата Сообщение от j2FunOnly Посмотреть сообщение
что там использовать?
Хотя...

создайте папку для проекта, пусть будет sequences
Code
1
2
3
4
$ mkdir -p ~/projects/ruby/sequences
$ cd ~/projects/ruby/sequences
$ bundle init
Writing new Gemfile to ~/projects/ruby/sequences/Gemfile
Отредактируйте Gemfile
Ruby
1
2
3
4
5
6
7
8
9
10
11
# frozen_string_literal: true
 
ruby '2.6.3'
 
source "https://rubygems.org"
 
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
 
group :development, :test do
  gem 'rspec', '~> 3.8.0'
end
В командной строке
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ bundle install
Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...
Using bundler 2.0.1
Using diff-lcs 1.3
Using rspec-support 3.8.2
Using rspec-core 3.8.2
Using rspec-expectations 3.8.4
Using rspec-mocks 3.8.1
Using rspec 3.8.0
Bundle complete! 1 Gemfile dependency, 7 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
$ rspec --init
  create   .rspec
  create   spec/spec_helper.rb
$ mkdir -p lib/sequences
$ touch lib/{sequences.rb,sequences/repetetive_sequences.rb}
$ touch spec/repetitive_sequences_spec.rb
Добавьте в начало spec/spec_helper.rb
Ruby
1
require 'sequences'
spec/repetitive_sequences_spec.rb
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
describe Sequences::RepetitiveSequences do
  it { expect(described_class).to respond_to(:call) }
  it { should respond_to(:to_s) }
 
  it 'should return 11 for 1' do
    expect(described_class.call('1')).to eq('11')
  end
 
  it 'should return 21 for 11' do
    expect(described_class.call('11')).to eq('21')
  end
 
  it 'should return 1211 for 21' do
    expect(described_class.call('21')).to eq('1211')
  end
 
  it 'should return 111221 for 1211' do
    expect(described_class.call('1211')).to eq('111221')
  end
 
  it 'should return 312211 for 111221' do
    expect(described_class.call(111221)).to eq('312211')
  end
 
  it 'should return 3a2b1c4f for aaabbcffff' do
    expect(described_class.call('aaabbcffff')).to eq('3a2b1c4f')
  end
end
lib/sequences.rb
Ruby
1
2
3
4
5
6
7
# frozen_string_literal: true
 
require_relative 'sequences/repetitive_sequences'
 
module Sequences
  VERSION = '0.0.1'
end
lib/sequences/repetitive_sequences.rb
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
module Sequences
  class RepetitiveSequences
    attr_reader :sequence
 
    def self.call(str)
      new(str).to_s
    end
 
    def initialize(string = nil)
      @sequence = []
      perform string.to_s.split('')
    end
 
    def to_s
      @sequence.reduce('') { |s, el| "#{s}#{el.size}#{el.first}" }
    end
 
    private
 
    def last_element
      @sequence.last
    end
 
    def last_element?(value)
      !last_element.nil? && last_element.first == value
    end
 
    def add_element(value)
      if last_element? value
        last_element.push value
      else
        @sequence.push [value]
      end
    end
 
    def perform(elements)
      elements.each { |element| add_element element }
    end
  end
end
Проверим: в командной строке
Code
1
2
3
4
5
$ rspec
........
 
Finished in 0.00932 seconds (files took 0.25613 seconds to load)
8 examples, 0 failures
Создадим CLI: в командной строке
Code
1
2
3
$ mkdir bin
$ touch bin/sequences
$ chmod +x bin/sequences
bin/sequences
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env ruby
require 'optparse'
require_relative '../lib/sequences'
 
options = {
  source_string: 1,
  iterations: 5
}
 
parser = OptionParser.new do |opts|
  exec = File.basename($PROGRAM_NAME)
  opts.banner = "Usage: #{exec} [options]"
 
  opts.on('-s SRC', '--source SRC',
          'Source string to be proccessed, default: "1"') do |str|
    options[:source_string] = str
  end
 
  opts.on('-i COUNT', '--iterations COUNT', Integer,
          'Number of iterations to be proccessed, default: 5') do |i|
    options[:iterations] = i
  end
end
 
parser.parse!
s = options[:source_string]
 
options[:iterations].times do
  puts s
  s = Sequences::RepetitiveSequences.call(s)
end
И проверим: в терминале
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ ./bin/sequences --help
Usage: sequences [options]
    -s, --source SRC                 Source string to be proccessed, default: "1"
    -i, --iterations COUNT           Number of iterations to be proccessed, default: 5
$ ./bin/sequences 
1
11
21
1211
111221
$ ./bin/sequences -i 10 -s aasd
aasd
2a1s1d
121a111s111d
1112111a311s311d
3112311a13211s13211d
13211213211a111312211s111312211d
1113122112111312211a31131122211s31131122211d
31131122211231131122211a1321132132211s1321132132211d
132113213221121321132132211a111312211312111322211s111312211312111322211d
1113122113121113222112111312211312111322211a3113112221131112311332211s3113112221131112311332211d
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.08.2019, 11:26
Помогаю со студенческими работами здесь

Написать программу, которая генерирует N случайных чисел
Хотя бы по частям помогите... Написать программу, которая генерирует N случайных чисел (N – произвольное количество чисел,...

Написать программу которая генерирует 10 случайных чисел
Написать программу которая генерирует 10 случайных чисел в диапазоне от 1 до 10, выводит эти числа на экран и вычисляет их среднее...

Написать программу, которая генерирует 10 случайных чисел в диапазоне от 1 до 10
Написать программу, которая генерирует 10 случайных чисел в диапазоне от 1 до 10, выводит эти числа на экран и вычисляет их среднее...

Написать программу которая генерирует 3 последовательности из 10 случайных чисел в диапозоне от 1 до 10
Написать программу которая генерирует 3 последовательности из 10 случайных чисел в диапозоне от 1 до 10. А затем выводит каждую...

Написать программу, которая генерирует и выводит на экран простые числа
Написать программу, которая генерирует и выводит на экран простые числа, в основу генератора простых чисел положить формулу:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru