Методы вокруг красочных чисел - PullRequest
0 голосов
/ 11 октября 2018

Я должен написать метод, который возвращает true или false для is_colorful_number?

  • 263 - красочное число, потому что (2, 6, 3, 2 x 6 = 12, 6 x 3 = 18, 2 x 6 x 3 = 36) все разные.
  • 236 не потому, что (2, 3, 6, 2 x 3 = 6, 3 x 6 = 18, 2 x3 x 6 = 36) есть 6 дважды.

Это не имеет смысла.Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

= Учитывая число (как целое число), извлеките цифру из массива, затем выполните обратное:

number = 263
ary = number.digits.reverse #=> [2, 6, 3]

Теперь map от 1 до длины массива с объектом на each_cons , чтобы получить массив, содержащий продукты

products = ary.length.times.map.with_object([]) { |n, a| a.concat ary.each_cons(n+1).map { |e| e.reduce(&:*) } }
#=> [2, 6, 3, 12, 18, 36]

Наконец, проверьте, содержат ли продукты дубликаты, например:

products.size == products.uniq.size
0 голосов
/ 11 октября 2018

Алгоритм, который разрешается следующим образом:

  • извлекает массив цифр вашего номера.
  • находит все комбинации, которые вас интересуют в этом массиве (используяArray#each_cons)
  • вычислите произведение каждой из этих комбинаций
  • проверьте, являются ли эти продукты уникальными.

Вот пример реализации:

def colors(number)
  digits = number.digits
  (1..digits.length).map do |len|
    digits.each_cons(len).map { |slice| slice.inject(:*) }
  end.flatten
end

def is_colorful_number?(number)
  number_colors = colors(number)
  number_colors.length == number_colors.uniq.length
end

p is_colorful_number? 263
p is_colorful_number? 236
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...