#お題
Hashではなく配列で記述してください
ホームポジションでは左手で打つキーと右手で打つキーが決まっています。
左手で打つキーは、キーボードの左側の赤色で示した部分です。
右手で打つキーは、キーボードの右側の白色で示した部分です。
あなたは癖で、直前に打ったキーをもう一度タイプする場合や、
直前に打ったキーに上下左右のいずれかで隣接しているキーを打った場合に、
ホームポジションに関わらず同じ手で入力してしまいます。
例えば、g を打ったあとに h を打つ場合には g を打った時の左手で h を打ってしまいます。
このまま h をもう一度打つ場合も、直前に h を打った左手で打ってしまいます。
もしytrewq
と入力された場合y
は右手で打ちその隣にあるt
も癖で右手で打ちます。
次は更に左隣にあるr
のため続けて癖で右手で打ってしまいます・・・・。
実際に与えられた文字列をタイプする際に、この癖によって違う手でタイピングしてしまう回数を出力してください。
#入出力例
入力例① ytrewq
出力① 5
入力例② qwertyy
出力② 2
#自分で記述中のコード
ruby
1keys = [ 2 %w(q w e r t y u i o p), %w(a s d f g h j k l), %w(z x c v b n m) 3 ] #キーボード 4count = 0 #条件分岐で分けていき癖タイプした時にここに1足してく 5words = gets.chomp #入力値を受け取る 6words_chars = words.chars #お題を1文字に分けて配列にする 7key_chars = ["t","g","b","y","h","n"] #左右のボーダーライン 8words_chars.each{|char| 9 if key_chars.include?(char) #左右のボーダーラインにかかったどうか判断 10 11 else 12 next 13 end 14}
ここで止まってしまいました。
#考えている流れ
まずkeys[x][y]の時に隣接しているかを判断する必要があるので
keys[x -1][y]||keys[x +1][y]||keys[x][y -1]||keys[x][y +1]
で分けれれば条件分岐ができると考えています。
もし与えられた値が"y"だった場合keys配列内の"keys[0][5]"になるので次の値が添字の±1の範囲であるかどうかの条件式にしたのですがどうすれば与えられた値"y"を使って検索して"keys[0][5]"すればいいのかがわかりません
Hashであればキーで検索したたらバリューでスグにだせそうな気がするのですが・・・
findメソッドを使用すればもってこれるのでしょうか??
それとも考え方から改めた方がいいのでしょうか??
どなたかご教授お願いいたします。
回答3件
あなたの回答
tips
プレビュー