Ruby 1.9.3です。
ある変数に半角の0~3のみで構成される、長さが8の倍数の文字列が入っています。
(事前にチェックしていますので、例外は考慮しなくても大丈夫です)
例①(※改行文字は含まれません)
00010000
00000000
20001002
00000013
30000000
その中で、
・4桁ずつ交互に(例①で言う所の左4桁と右4桁ごとに)
・『2』の入っている数×2+『1』の入っている数
の合計の数字を出したいです。
例②
左4桁=0(2の数)×2+5(1の数)=5
右4桁=2(2の数)×2+4(1の数)=8
00012000
00000001
01013000
00000012
00000010
11000003
00000001
例③
左4桁=3(2の数)×2+1(1の数)=7
右4桁=2(2の数)×2+5(1の数)=9
02022020
00000000
03033030
02001000
00000100
13000010
00000011
例④
左4桁=0(2の数)×2+0(1の数)=0
右4桁=2(2の数)×1+8(1の数)=10
33330010
33330010
33330010
33330010
00000200
00000001
33330001
33330001
33330301
とりあえず自分は、
元変数を4文字ずつ読み、都度countで調べ変数hidariと変数migiに加算していくといった方法を考えました。
構想的には問題ないと思うのですが、もう少しcountの指定の仕方や
別の関数を使用したりして、スマートに出来ないかと思った次第です。
Ruby
1hensu = "021000000000000002000000000021001000000003000001" 2hidari = 0 3for i in 1..hensu.length / 8 4 tmp = hensu[(i-1)*8..(i-1)*8+3] 5 hidari += tmp.count("2") * 2 + tmp.count("1") 6end 7migi = 0 8for i in 1..hensu.length / 8 9 tmp = hensu[(i-1)*8+4..(i-1)*8+7] 10 migi += tmp.count("2") * 2 + tmp.count("1") 11end 12p hidari 13p migi
<蛇足?>
①大雑把ですが 1500~2500桁程度のデータが多いです。
②元文字列の 7~9割は"0"になると思われます。
以上、
もう少しわかりやすい記述方法や構想(軽ければ尚良し)
があれば教えて頂きたいです。
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/19 07:59
2018/01/19 12:02
2018/01/19 12:07
2018/01/19 13:37