0

そこで、単純なアルゴリズムを使用してクレジット カード番号を確認しようとしています。一部の数値を取得できますが、すべての数値を取得することはできません。理由がわかりません。

class CreditCard

  def initialize(number)
    @number = (number.to_s.split("")).map! { |i| i.to_i}

    if @number.length != 16
      raise ArgumentError, "Not a valid credit card number"
    end

  end

  def check_card()

    @number.reverse!.map! do |i|
      if @number.index(i).odd?
        i * 2
      else
        i
      end
    end
    p "Here is my array: #{@number}"

    # split method
    # @number.map! do |num|
    #   if num >= 10
    #     num = num.to_s.split("").map! { |i| i.to_i }
    #   else
    #     num
    #   end
    # end
    # @number.flatten!

    #sum method
    # @number = @number.flatten!.inject(0) { |sum, element| sum + element}
    # if @number % 10 == 0
    #   return true
    # else
    #   return false
    # end





  end

end

6789678967896781 (文字列ではなく整数) を渡すと、各メソッドが機能します。1111111111111111 を渡すとうまくいきません。私はすべての(確かに面倒な)コードに戻って作業していますが、コントロールがこれに当たると次のことがわかりました:

@number.reverse!.map! do |i|
      if @number.index(i).odd?
        i * 2
      else
        i
      end
    end

出力は単純に 16 個の配列です。残りのコードは、rspec の各テストに合格できなかったためコメント アウトされているため、逆方向に作業を開始しました。私は、check_card メソッドによって呼び出される split メソッドと add メソッドをプライベート メソッドにしようと計画しています。私は本当にこれについて2番目の目が必要だと思います. 何かが足りないだけです。うまくいけば、それはクジラではなくミノーです。

4

0 に答える 0