#3489. 运动指令

运动指令

题目描述

一个室内清洁机器人在一间房子里工作。房子的平面图可以简化为一个二维网格,我们可以在这个网格上为机器人建立一个虚拟的xy坐标系,称为绝对坐标系。

我们用数字0~5来表示机器人的方位:(如下图)

规定向右为x轴的正方向0,向前为y轴的正方向1,向上为z轴的正方向2;

那么x轴的反方向3,y轴的反方向4,z轴的反方向5 。

image

机器人初始状态:

初始站在中心点,即x,y,z的位置都为0.

站位的方向,用三个方向确定:

机器人头顶是z轴正方向,即head=2; 面朝的方向是x轴正方向,即dir=0; 左手的方向是y轴的反方向,即leftt=4;

任务描述: 机器人根据接收到的指令在房间内移动。机器人可以在多个楼层之间移动,每个楼层都可以视为一个相同的二维网格。确定机器人最终的三个方向:面朝方向、左手方向以及头顶方向。

指令说明: 指令 + 步数:面朝的方向,向前走x步。 具体指令:

  • forward:方向不变。
  • back:面朝方向为原反向,左手方向为原反向,头顶方向不变。
  • left:面朝方向为原左手方向,左手方向为原面朝方向的反向,头顶方向不变。
  • right:面朝方向为原左手方向的反向,左手方向为原面朝方向,头顶方向不变。
  • up:面朝方向转向头顶方向,头顶方向为原面朝方向的反向,左手方向不变。
  • down:面朝方向转向头顶反向,头顶方向为原面朝方向,左手方向不变。

输入格式

  • 输入:第一行一个正整数m,表示测试数据的组数。每组测试数据第一行是一个正整数n(1<=n<=10000),表示机器人行走的次数。接下来n行,每行输入一次相对行走指令,格式如上所述(1<=x<=10000)。

输出格式

  • 输出:对于每组输入数据输出一行,格式为 x y z p,表示机器人的最终位置。
1
6
left 10
right 11
up 12
down 13
forward 14
back 15
23 -10 12 3

提示

方向改变为其反向的时候,可以借助+3后,对六个方向取余数。

例如:方向为数字x时,当要改变为其反方向,只需(x+3)%6即可。