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
作りかけのゲームプログラムを発見したけど、キャラクターの動きの制限する方法が未実装にゃ
制作中のゲームは、縦方向に 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 回の操作中にキャラクターが不正な座標にいることがにゃいか判定するプログラムの作成が指示されているにゃ。
不正な座標とは、マップ外の座標、すなわち格子上に存在しない座標すべてのことを指すにゃ。
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
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 にゃー
Author And Source
この問題について(B問題「隔離された街のゲート」テストコード), 我々は、より多くの情報をここで見つけました https://qiita.com/ryouichi0303/items/8c40cf425da481e3eb69著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .