2016-04-06 7 views
0

バイナリ操作が必要なHackerRankの問題を解決しようとしていました。テストケースは非常に巨大な数値なので、文字列として扱う方が良いと思いました。Ruby to_sのバイナリ引数エラーへの変換

t=gets 
def winner(pturn) 
    if a%2==0 
    puts "Richard\n" 
    else 
    puts "Louise\n" 
    end 
end    

while t != 0 
    turn=1 
    n=gets 
    (n2=n).to_s(2) 
    while n!=1 
     one="1" 
     zero="0" 
     if n2.count(1)>1 
      zero*=(n2.length - 2) 
      one.concat(zero) 
      n-=one.to_i(base=2) 
     else 
      n/=2 
     end 
    turn+=1 
    end 
winner(turn) 
t-=1 
end 

以下に示すように、引数エラー(引数の数が間違っています)が発生しました。

(n2=n).to_s(2) 

私はto_sを間違って使用していると思います。私は間違いを見ることができず、誰かにそれを指摘する必要があります。

+1

私はto_sはargsを楽しまないと思います。 –

+0

そのコードは何をすべきですか? – sawa

+1

@MuhammadYawarAli: 'Integer#to_s'(あるいはもっと正確には、' Bignum#to_s'(http://ruby-doc.org/core/Bignum.html#method-i-to_s)と '' Fixnum#to_s'](http://ruby-doc.org/core/Fixnum.html#method-i-to_s))は、番号を出力するベースを指示するオプションの 'base'引数を受け取ります。デフォルト値は '10'です。 –

答えて

0

に(2)(N2 = N).to_sを変更する必要があります。 (番号は実際にルビー、例えばFixnumかの数値であれば)これがで可能です:

4.to_s 2 
# => "100" 

しかし、あなたの場合には、何をgetsが文字列である呼び出した後に取得している、とStringクラスのto_s方法単純に自分自身を返し、引数をとらないので、エラーになります。内容の読み取り列をRubyで整数に変換されますので、

あなたは、代わりにちょうどgetsgets.to_iを呼び出すことによって、それを修正することができます(あなたはそこだけで数字を読んでされることを確認する必要があります)。

そして、私はあなたが変数n2nの(文字列として)バイナリ表現を割り当てるしようとしていると考えているが、そのためにあなたは

n2 = n.to_s(2) 

を行うべきであるあなただけ行う場合:

(n2=n).to_s 

括弧のため、最初にn2にはnの値が割り当てられ、はn2に、の文字列のバージョンが返され、何も起こりません。あなたがしなければならない最初のことは、変換、次に割り当てです。

また、String#countを呼び出すときに文字列を渡す必要があります。つまり、n2.count(2)ではなくn2.count('2')を呼び出す必要があります。

+0

@idkwhatamidoing: 'get'は" get string "の略です。あなたは何を返すと思いましたか? :) –

+0

'gets'は実際に文字列として入力を受け取りますか?ありがとう、これは本当に役に立ちます!また、 'count()'はあらかじめ定義されたメソッドではありませんか?私は 'count()'に対して '未定義のメソッド'エラーを受け取りました。 – idkwhatamidoing

+0

@SergioTulentsevうわー、ええ、それを考えなかった。整数を直接入力する方法はありませんか?申し訳ありませんが、私はあまりにも強いタイプの言語に慣れています。 – idkwhatamidoing

-1

to_sメソッドは引数を一切受け付けないので、パラメータをto_sメソッドに渡そうとしているため、引数エラーが発生しています。

だから、私はあなたがそれをバイナリ表現だと文字列にRubyで数値を変換しようとしていると思います

(n2=n).to_s 
+2

'Integer#to_s'(またはもっと正確には、' Bignum#to_s'(http://ruby-doc.org/core/Bignum.html#method-i-to_s)と['Fixnum#to_s '](http://ruby-doc.org/core/Fixnum.html#method-i-to_s))は、番号を出力するベースを指示するオプションの' base'引数を受け取ります。デフォルト値は '10'です。 –

+0

しかし、(n2 = n).to_sに変更すると、プログラムは2を基数2に変更したいと考えていますか? – idkwhatamidoing

関連する問題