Преобразуйте строку в массив и выполните операции - PullRequest
0 голосов
/ 31 октября 2018

У меня есть строка вроде: "1234567334535674326774324423". Мне нужно создать метод, чтобы сделать следующее:

  1. Создать массив, состоящий из цифр в строке, такой как [1, 2, 3, ..., 2, 3]
  2. Сумма всех нечетных позиций массива
  3. Суммирование всех четных позиций массива
  4. Умножьте нечетную сумму на 3
  5. Суммируйте шаг 4 и шаг 3.
  6. Получите минимальное число для суммирования с шагом 5, чтобы получить сумму, кратную 5.

Я не знаю, как решить это с помощью рельсов. Если кто-нибудь может мне помочь, я был бы рад.

У меня есть это:

barcode_array = @invoice.barcode.each_char.map {|c| c.to_i}
impares = [barcode_array[0]] + (1...barcode_array.size).step(2).collect { |i| barcode_array[i] }
pares = (2...barcode_array.size).step(2).collect { |i| barcode_array[i] }
suma_impares = impares.inject(:+)
mult_impares = suma_impares * 3
suma total = mult_impares + pares

Ответы [ 2 ]

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

Я не уверен, что вы имеете в виду на шаге 6, но вот как я бы решил 1-5:

s = '1234567334535674326774324423'
a = s.chars.map(&:to_i) # convert to an array of integers

odd_sum = 0
even_sum = 0

# sum up odds and evens
a.each_with_index {|n, i| n.even? ? even_sum += n : odd_sum += n}

total = even_sum + odd_sum * 3
0 голосов
/ 31 октября 2018

Я решил это. Вот код, если кому-то это нужно:

barcode_array = @invoice.barcode.each_char.map {|c| c.to_i}
impares = [barcode_array[0]] + (1...barcode_array.size).step(2).collect { |i| barcode_array[i] }
pares = (2...barcode_array.size).step(2).collect { |i| barcode_array[i] }
suma_impares = impares.inject(:+).to_i
mult_impares = suma_impares * 3
suma_pares = pares.inject(:+).to_i
suma_total = mult_impares + suma_pares
verificador = 10 - (suma_total - (suma_total / 10).to_i * 10)
@invoice.barcode = @invoice.barcode.to_s + verificador.to_s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...