B問題「隔離された街のゲート」テストコード


「隔離された町のゲート」リンク

問題文

作りかけのゲームプログラムを発見したけど、キャラクターの動きの制限する方法が未実装にゃ


制作中のゲームは、縦方向に H マスと横方向に W マスだけ広がる格子上のマップを用いてるにゃ。
左下のマスが原点であり、その座標を (0, 0) としまするにゃ。
原点から横方向に x マス、縦方向に y マス進んだ座標を (x, y) と表記するにゃ。

現在の開発段階では障害物などはにゃく、キャラクターの初期座標が必ず (0, 0) だにゃ。
この状態から合計で N 回の上下左右への移動操作が行われるにゃ。
各移動操作はキャラクターの座標 (x, y) を以下のように変更するにゃ。

・上への移動 : キャラクターの座標を (x, y) から (x, y + 1) へ変更するにゃ。
・下への移動 : キャラクターの座標を (x, y) から (x, y - 1) へ変更するにゃ。
・左への移動 : キャラクターの座標を (x, y) から (x - 1, y) へ変更するにゃ。
・右への移動 : キャラクターの座標を (x, y) から (x + 1, y) へ変更するにゃ。

開発依頼書には、N 回の操作中にキャラクターが不正な座標にいることがにゃいか判定するプログラムの作成が指示されているにゃ。
不正な座標とは、マップ外の座標、すなわち格子上に存在しない座標すべてのことを指すにゃ。

テストコード

隔離された_spec.rb
require 'spec_helper'

RSpec.describe Isolated_city_gate do
  describe 'キャラクターがどの座標にいるのか' do
    it '正しい入力' do
      result = Isolated_city_gate.new.coordinate(map_longitudinal: 3, map_lateral: 3, character_movement: 'URDRL')
      expect(result).to eq 'valid'
    end

    it '不正な入力' do
      result = Isolated_city_gate.new.coordinate(map_longitudinal: 4, map_lateral: 4, character_movement: 'UURRRRD')
      expect(result).to eq 'invalid'
    end
  end
end

テスト対象コード

隔離された.rb
class Isolated_city_gate
    def coordinate(map_longitudinal:, map_lateral:, character_movement:)
        x_coordinate = 0
        y_coordinate = 0
        valid_false = 0
        character_movement.split('').each do |ope|
            if ope == "R"
              x_coordinate += 1
            elsif ope == "L"
              x_coordinate -= 1
            elsif ope == "U"
              y_coordinate += 1
            elsif ope == "D"
              y_coordinate -= 1
            end
            valid_false = 1 if x_coordinate < 0 || x_coordinate >= map_lateral || y_coordinate < 0 || y_coordinate >= map_longitudinal
        end
        if valid_false == 1
          'invalid'
        else
          'valid'
        end
    end
end

thank you にゃー