我有一個技術支持職位的面試測試。我認爲我做得不好,因爲他們沒有回電話。我不關心這個工作,但是其中一個問題困擾着我,因爲我只能弄明白這一點。 我有一個機器人能夠讀取指令,每行包含一條指令。左轉「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