我有一个技术支持职位的面试测试。我认为我做得不好,因为他们没有回电话。我不关心这个工作,但是其中一个问题困扰着我,因为我只能弄明白这一点。 我有一个机器人能够读取指令,每行包含一条指令。左转“L”,右转“R”,移动#n前进。 该机器人朝北,坐标为(0,0) 这些指令:bash - 在x和y轴上查找坐标对。
R
L
L
9
4
1
7
9
R
2
于是指示说 - 右转90度(这让它朝东),然后左转,离开再次(使其朝向西)向前走30步,然后顺时针旋转90度(使其朝北),并向前移动两步。 他们想让我编写一个脚本来计算最大距离和坐标对(x和y值)
他们给了我上面说明中的答案,机器人从一开始就走的最大距离是30.07,坐标对是(-30,2)
我知道机器人的运动是可视化的,并且写了一个bash数组,它为x的值顺时针移动增加10,从计数器计数器时钟的x减去10明智的运动。便宜的bash数组(bash 3.2没有数组支持)与一个360位置的KEY或四个箭头键中的一个匹配x VALUE。该脚本在向前移动n#个步骤之前保存最后的指令。我不知道如何在最大距离和坐标对中编写脚本。它是一个代数x和y轴函数 - 但无法弄清楚如何将它添加到bash中。
#!/bin/bash
#set -x
dial_map=("up_1:10" "right_1:20" "down_1:30" "left_1:40"
"up_2:50" "right_2:60" "down_2:70" "left_2:80"
"up_3:90" "right_3:100" "down_3:110" "left_3:120")
x=50 # the robot starts at the up or north position
# once clockwise click adds ten, one counter clockwise minus 10 from x value.
IFS=$'\n' read -d"" -r -a directives < directions.txt
for i in "${directives[@]}"
do
if [ "$i" == "R" ] ; then
#echo "R is clockwise"
x=$(($x + 10))
#echo "x is $x"
for click in "${dial_map[@]}" ; do
KEY=${click%%:*}
VALUE=${click#*:}
if [ "$x" -eq "$VALUE" ] ; then
keytab=$KEY
#echo "the keyboard command is $keytab"
fi
#sleep 1
done
elif [ "$i" == "L" ] ; then
#echo "L is counterclock"
x=$(($x - 10))
#echo "x is $x"
for click in "${dial_map[@]}" ; do
KEY=${click%%:*}
VALUE=${click#*:}
if [ "$x" -eq "$VALUE" ] ; then
keytab=$KEY
#echo "the keyboard command is $keytab"
fi
#sleep 1
done
else
echo "Please move the cursor $i times $keytab"
sleep 1
fi
done
寻找x和y坐标在bash