前提・実現したいこと
Rubyでチェックディジットを完成させたいです。
従うルールとして
・偶数桁の数字をそれぞれ2倍し総和をとったものをeven
(ただし、2倍したあと2桁の数字になるものは、1の位と10の位の数を足して1桁の数字にしたあと、総和をとる)
・奇数桁の数字の総和をとったものをoddとすると、even + odd は10 で必ず割り切れる
があります。
発生している問題・エラーメッセージ
後々配列even
と配列odd
の中身をstringではなくintegerの状態で使いたいので、
28行目〜33行目ではeven
とodd
の中身はintegerにしたいです。
その方法がわかりません。
該当のソースコード
Ruby
1even_nums = [] #偶数番目のみの配列 2odd_nums = [] 3even = [] #偶数番目を計算した値 4odd = [] 5 6# 繰り返しの回数を受け取る 7rpt = gets.to_i 8 9# 入力値からXを除く 10rpt.times do 11 input_card_values = gets.chomp 12 card_nums = input_card_values.chars 13 card_nums.delete("X") 14 15 # evenとoddにわけて配列を作る(でないと次の工程で偶数番目と奇数番目をごちゃまぜで計算することになるため) 16 even_nums = card_nums.each_slice(2).map(&:first) 17 odd_nums = card_nums.select.with_index{|content, index| 18 content.to_i 19 index.to_i 20 index % 2 == 1 21 } 22 p even_nums 23 p odd_nums # ここまでクリア 24 #even_numsとodd_numsをルールに従い配列にし直す 25 even_nums.each do |even_num| 26 # even_numsの要素が2桁だった場合、十の位と一の位も数字を足す 27 if (even_num.to_i * 2).to_s.length == 2 28 even = (even_num.to_i * 2).to_s.split("").inject{|ten, one| ten + one} 29 else 30 even << even_num 31 end 32 end 33 odd = odd_nums.sum 34 p even 35 p odd 36#even + oddが10で割り切れることからxをもとめる 37 (0..9).each do |x| 38 if (even + odd + x) % 10 == 0 then 39 break 40 end 41 puts x 42 end 43end 44 45 46 47# [[8, 4, 6, 0, 8, 7, 7, 2, 9, 1, 2, 8, 5, 6, 9, X], [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, X], 48 49# 8 6 8 7 9 2 5 9 偶: even 50# 4 0 7 2 1 8 6 X 奇: odd 51# even = 7 3 7 5 9 4 1 9 = 45 52# odd = 28 + x 53# even + odd = 73 + x 54# x = 7
回答2件
あなたの回答
tips
プレビュー