したがって、私の現在のタスクは、行 1 スペースのブザーの山を右にシフトするアルゴリズムを作成することです。私は良いスタートを切ったと思います.ブザーの山を拾い上げ、1つを右に移動し、それらのブザーをドロップするコードを書きました:
public static void shift(Athlete arg)
{
int count = 0;
while(!arg.nextToABeeper()) //the robot will move until it finds a beeper
{
arg.move();
}
while(arg.nextToABeeper()) //the robot will pick up the beepers in the pile, and keep a tab of them
{
arg.pickBeeper();
count++;
}
arg.move();
while(count > 0) //after moving 1 space to the right, it drops the beepers
{
arg.putBeeper();
count--;
}
shift(arg);
}
ブザーの列にはブザー間に隙間がある場合があり、その場合、このコードはうまく機能しますが、ブザーの山が隣接している場合、ロボットは最初のパイルを 2 番目のパイルに捨ててしまい、拾う方法がわかりません。これは、2 番目のパイルのブザーが 1 番目と 2 番目のパイルのブザーで構成されており、2 番目のパイルのブザーだけを拾う方法がわからないためです。
Rohit jain は、列の最後から始めて後ろに進むというアイデアを私に与えてくれました。これが問題の解決方法だとは思いませんが、それでも解決策です。ブザーの間に隙間があるため、列の最後にたどり着くのは実際には想像以上に困難です。これが私がやったことです。
public static void goToEnd(Athlete arg)
{
while(!arg.nextToABeeper())
{
arg.move();
}
while(arg.nextToABeeper())
{
arg.move();
}
if(!arg.nextToABeeper())
{
arg.move();
if(!arg.nextToABeeper())
{
arg.turnAround();
arg.move();
}
else
{
while(arg.nextToABeeper())
{
arg.move();
}
arg.turnAround();
}
}
}