将字符串转换为数组并执行操作

时间:2018-10-30 22:12:24

标签: ruby-on-rails ruby

我有一个类似"1234567334535674326774324423"的字符串。我需要创建一种方法来执行以下操作:

  1. 在字符串中制作一个由数字组成的数组,例如[1, 2, 3, ..., 2, 3]
  2. 求和所有数组的奇数位
  3. 对数组的所有偶数位置求和
  4. 将奇数和乘以3
  5. 将第4步和第3步相加。
  6. 获取最小值以求和至步骤5,以得到5的倍数之和。

我不知道如何用Rails解决这个问题。如果有人可以帮助我,我将很高兴。

我有这个:

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 :(得分:0)

我解决了。如果有人需要,下面是代码:

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

答案 1 :(得分:0)

我不确定您在第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