Как я могу сделать следующий шаблон в Ruby?

A

B B

C C C

D D D D

E E E E E

Я не знаю, как печатать алфавиты

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

sandhya sasane 24.04.2019 16:12

Что вы пробовали, и где вы застряли?

pjs 24.04.2019 16:14
1.upto(5) { |i| puts (64 + i).chr * i }
Kimmo Lehto 25.04.2019 09:00
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
3
225
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Это не для RUBY и не для любого другого языка, это просто поток:

Печатайте алфавиты, например:

for (ch = 'a'; ch <= 'z'; ch++)
{
    System.out.println(ch);
}
  1. Теперь инициализируйте счетчик i = 0
  2. Увеличивайте i++ в каждом цикле.
  3. Вывести текущие внешние циклы current char, i раз

Этот вопрос был специально помечен рубином, поэтому за вас, вероятно, проголосовали

Jay Dorsey 24.04.2019 16:49

Это хороший ответ с использованием псевдокода, побуждающий оператора найти собственное решение.

Sagar Pandya 24.04.2019 22:13

@SagarPandya Я не согласен. Здесь был представлен процедурный подход, когда целевой язык является объектно-ориентированным и имеет сильные функциональные наклонности. Это не идиоматично для вопроса, в котором указан Ruby, как вы можете видеть, сравнивая это с ответом Рэя.

pjs 25.04.2019 00:38

Вы можете сделать что-то вроде -

(1..5).each do |index|
  (1..index).each do
    print (64+index).chr
  end
  puts "\n"
end

Что оно делает -

  1. (1..5) - запустить цикл с индексом от 1 до 5.
  2. (1..index) - запустить еще один цикл, чтобы для каждого из вышеуказанных циклов он выполнялся от 1 до индекса, который будет управляться из цикла (1..5).each.
  3. (65).chr -> A, (66).chr -> B и так далее..
  4. помещает "\n", чтобы добавить новую строку

Это даст вам результат -

A

BB

CCC

DDDD

EEEEE

Если вы хотите добавить что-то еще к тому, что вы печатаете, вы можете сделать что-то вроде:

print "#{(64+index).chr} - random text"

#{} конструкция позволит вам писать код, интерпретируемый ruby, внутри строкового блока`

Примечание: #{} работает только при использовании двойных кавычек :)

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

ray 24.04.2019 16:31

@ray - да, у тебя чище, так как ОП выглядел как новичок, я думал, что простые циклы будет легко понять

Sudipta Mondal 24.04.2019 16:48

Лучше как можно быстрее приучить новичков к идиомам Ruby, таким как итераторы и замыкания, особенно потому, что они часто становятся чище, когда человек проходит мимо «но это по-другому!» фаза.

pjs 24.04.2019 19:09

Вы можете сделать следующее, чтобы решить это:

('A'..'F').each.with_index(1) { |letter,index| puts "#{letter} "*index }

Альтернативы включают создание переменных диапазонов:

lower_limit = 'A'   # could be read in rather than wired
upper_limit = 'F'   # ditto
(lower_limit..upper_limit).each.with_index(1) { |letter,index| puts "#{letter} "*index }

или используя массив с join, чтобы получить пробелы без добавления завершающего пробела:

(lower_limit..upper_limit).each.with_index(1) { |letter,index| puts Array.new(index) { letter }.join(' ') }

Вам не нужен массив, просто используйте диапазон ('A'..'Z'). Также используйте each.with_index(1), чтобы не выполнять i + 1 на каждой итерации.

Sagar Pandya 24.04.2019 16:39

@SagarPandya Спасибо, отредактировано, это помогло, я просто не заметил этого в спешке.

ray 24.04.2019 16:43

Я думаю, что интерполяция n не нужна, и если бы вы назвали свои переменные letter, index, это могло бы добавить немного ясности. Хотя решение хорошее!

Jay Dorsey 24.04.2019 16:52

@JayDorsey Интерполяция - это чистый способ получения пробелов, но я согласен, что переименование переменных добавит ясности.

pjs 24.04.2019 16:54

@pjs Вы правы, я не учитывал пробелы между строками (я даже не «видел» их, когда смотрел). Я просто предположил, что это шум копирования/вставки, а не неотъемлемая часть вывода. Но, согласно OP, в нем есть пробелы, поэтому интерполяция будет простым способом сделать это.

Jay Dorsey 24.04.2019 17:16

@JayDorsey Да, я всегда сохраняю ясность (хотя рельсы предполагают), работая над проектом, здесь пропущено, отредактировано. Интерполяция была добавлена ​​только для пробелов.

ray 24.04.2019 17:43

@pjs извините за опоздание, вы можете пойти и отредактировать мой ответ для добавления.

ray 29.04.2019 14:25

Спасибо всем вам, это работа, и извините за мой поздний ответ.

Ayush 02.05.2019 19:17

Другие вопросы по теме