-4

次の問題のために文字列から数値を思い付くのに問題があります。ここに含まれているファイルhttp://projecteuler.net/project/words.txtから読みましたが、正常に読みましたが、switch-caseが正しく機能していないのか、アレイに問題があるのか​​わかりません。 、私は主にC ++でプログラミングし、rubyを学習しようとしているので、ruby構文の理解はまだ初歩的です。

    #!/usr/bin/ruby -w

words = []
words = File::read("words.txt") 
parts = words.split(',')
puts parts
c=0
while parts != "YOUTH"
    a=0
    case parts
        when 'A'
            a+=1
        when 'B'
            a+=2
        when 'C'
            a+=3
        when 'D'
            a+=4
        when 'E'
            a+=5
        when 'F'
            a+=6
        when 'G'
            a+=7
        when 'H'
            a+=8
        when 'I'
            a+=9
        when 'J'
            a+=10
        when 'K'
            a+=11
        when 'L'
            a+=12
        when 'M'
            a+=13
        when 'N'
            a+=14
        when 'O'
            a+=15
        when 'P'
            a+=16
        when 'Q'
            a+=17
        when 'R'
            a+=18
        when 'S'
            a+=19
        when 'T'
            a+=20
        when 'U'
            a+=21
        when 'V'
            a+=22
        when 'W'
            a+=23
        when 'X'
            a+=24
        when 'Y'
            a+=25
        when 'Z'
            a+=26
    end
    b = false
    i = 1
    k= 0
    while b = false
        k += i  
        i += 1
        if a == k || i >15
            b == true
        end
    end
end
4

3 に答える 3

0

Here is the official Doc

わかった!だからここにあなたの問題へのいくつかのヒントがあります:

"string".split(//)
#=> ["s", "t", "r", "i", "n", "g"]
"string".split(//).first
#=> "s"
"string".split(//).first(1)
#=> ["s"]
"string".split(//).first(3)
#=> ["s", "t", "r"]

問題を解決するためのいくつかの方法:

"string".split(//)[0]
#=> "s"
"string".split(//)[1]
#=> "t"
"string".split(//)[0,4]
#=> ["s", "t", "r", "i"]
于 2013-03-26T16:39:25.230 に答える
0

次の行に沿って、パーツをchar配列に変換する必要があります。

parts.split(//)

また

parts.chars.to_a

次に、char配列を繰り返し処理します。

于 2013-03-26T16:40:34.070 に答える
0

このコードが何を計算するのかはわかりませんが、論理的な観点から意味をなすようにコードを編集しました。

#!/usr/bin/ruby -w

words = File::read("words.txt") ;
parts = words.delete('\"').split(',');
puts parts
c=0
while(c<parts.length)
    a=0
    each_word = parts[c].split('');
    for i in 0...each_word.length
        case each_word[i]
            when 'A'
                a+=1
            when 'B'
                a+=2
            when 'C'
                a+=3
            when 'D'
                a+=4
            when 'E'
                a+=5
            when 'F'
                a+=6
            when 'G'
                a+=7
            when 'H'
                a+=8
            when 'I'
                a+=9
            when 'J'
                a+=10
            when 'K'
                a+=11
            when 'L'
                a+=12
            when 'M'
                a+=13
            when 'N'
                a+=14
            when 'O'
                a+=15
            when 'P'
                a+=16
            when 'Q'
                a+=17
            when 'R'
                a+=18
            when 'S'
                a+=19
            when 'T'
                a+=20
            when 'U'
                a+=21
            when 'V'
                a+=22
            when 'W'
                a+=23
            when 'X'
                a+=24
            when 'Y'
                a+=25
            when 'Z'
                a+=26
        end
    end
    b = false
    i = 1
    k = 0
    while(b == false)
        k += i  
        i += 1
        if((a == k) || (i > 15))
            b = true
        end
    end
    c +=1;
end
于 2013-03-26T16:53:31.740 に答える