Vincent.Chan‘s Blog

          常用鏈接

          統計

          積分與排名

          網站

          最新評論

          GOOGLE挑戰賽練習題1及答案(200分)

          Problem Statement

               A simple line drawing program uses a blank 20 x 20 pixel canvas and a directional cursor that starts at the upper left corner pointing straight down. The upper left corner of the canvas is at (0, 0) and the lower right corner is at (19, 19). You are given a String[], commands, each element of which contains one of two possible commands. A command of the form "FORWARD x" means that the cursor should move forward by x pixels. Each pixel on its path, including the start and end points, is painted black. The only other command is "LEFT", which means that the cursor should change its direction by 90 degrees counterclockwise. So, if the cursor is initially pointing straight down and it receives a single "LEFT" command, it will end up pointing straight to the right. Execute all the commands in order and return the resulting 20 x 20 pixel canvas as a String[] where character j of element i represents the pixel at (i, j). Black pixels should be represented as uppercase 'X' characters and blank pixels should be represented as '.' characters.

          Definition

              
          Class: DrawLines
          Method: execute
          Parameters: String[]
          Returns: String[]
          Method signature: String[] execute(String[] commands)
          (be sure your method is public)

           

            1public class DrawLines
            2{
            3  class Pos
            4  {
            5    private int X;
            6    private int Y;
            7    private String status = ".";
            8
            9    public Pos(int x,int y)
           10    {
           11      this.X = x;
           12      this.Y = y;
           13      this.status = ".";
           14    }

           15
           16    public int getX()
           17    {
           18      return X;
           19    }

           20
           21    public int getY()
           22    {
           23      return Y;
           24    }

           25
           26    public void setX(int x)
           27    {
           28      this.X = x;
           29    }

           30
           31    public void setY(int y)
           32    {
           33      this.Y = y;
           34    }

           35
           36    public void setStatus(String s)
           37    {
           38      this.status = s;
           39    }

           40
           41    public String getSatus()
           42    {
           43      return status;
           44    }

           45
           46    public void showPos()
           47    {
           48      String xStr=X+"";
           49      String yStr=Y+"";
           50
           51      if(X<10)
           52      {
           53        xStr = "0"+xStr;
           54      }

           55
           56      if(Y<10)
           57      {
           58        yStr = "0"+yStr;
           59      }

           60    }

           61  }

           62
           63  public int min = 0, max = 19;
           64  public int North = 1, South = 3, West = 2, East = 0;
           65  public String LEFT = "LEFT", FORWARD = "FORWARD";
           66  public Pos[][] map = null;
           67
           68
           69
           70  public DrawLines()
           71 {
           72   this.direction = South;
           73   pos = new Pos(0,0);
           74
           75   //走之前初始化地圖.
           76   map = new Pos[max + 1][max + 1];
           77   for(int row = 0;row<=max;row++)
           78   {
           79     for(int col=0;col<=max;col++)
           80     {
           81       map[row][col] = new Pos(row,col);
           82     }

           83   }

           84 }

           85
           86  public void showMap()
           87  {for (int col = 0; col <= max; col++)
           88
           89    {
           90      for (int row = 0; row <= max; row++)
           91      {
           92        System.out.print(map[row][col].getSatus());
           93      }

           94      System.out.println(); 
           95    }

           96  }

           97
           98  private Pos pos = null;
           99  private int direction = South;
          100
          101  public Pos getPos()
          102  {
          103    return pos;
          104  }

          105  public void setPos(Pos pos)
          106  {
          107    this.pos = pos;
          108  }

          109  /**
          110   *
          111   * @param cmd
          112   */

          113  public void execute(String cmd)
          114  {
          115    if (cmd.equals("LEFT"))
          116    {
          117      Left();
          118    }

          119    else if (cmd.indexOf(FORWARD) >= 0)
          120    {
          121      int from = cmd.indexOf(FORWARD);
          122      String stepStr = cmd.substring(from + FORWARD.length());
          123      stepStr = stepStr.trim();
          124      int step = Integer.parseInt(stepStr);
          125      forward(step);
          126    }

          127    else
          128    {
          129      System.out.println("未知的命令,無法執行.");
          130    }

          131  }

          132
          133  public String[] execute(String[] cmds)
          134  {
          135    if (cmds != null)
          136    {
          137      for (int i = 0; i < cmds.length; i++)
          138      {
          139        execute(cmds[i]);
          140      }

          141    }

          142
          143    String[] rval = new String[20];
          144    String tempStr = "";
          145    for (int col = 0; col <= max; col++)
          146     {
          147       tempStr = "";
          148       for (int row = 0; row <= max; row++)
          149       {
          150          tempStr = tempStr + map[row][col].getSatus();
          151       }

          152        rval[col]=tempStr;
          153     }

          154     return rval;
          155
          156  }

          157
          158  public void Left()
          159  {
          160    direction = (direction + 1% 4;
          161  }

          162
          163  public void forward(int step)
          164  {
          165    if (direction == South) //Y++
          166    {
          167      while (pos.getY() < max && step>0)
          168      {
          169        if (map[pos.getX()][pos.getY()].getSatus().equals(".")) //第一步也要畫
          170        {
          171          map[pos.getX()][pos.getY()].setStatus("*");
          172        }

          173        pos.setY(pos.getY() + 1);
          174        map[pos.getX()][pos.getY()].setStatus("*");
          175        map[pos.getX()][pos.getY()].showPos();
          176        step--;
          177      }

          178    }

          179    else if (direction == East) //X++
          180    {
          181      while (pos.getX() < max && step>0)
          182      {
          183        if (map[pos.getX()][pos.getY()].getSatus().equals(".")) //第一步也要畫
          184        {
          185          map[pos.getX()][pos.getY()].setStatus("*");
          186        }

          187        pos.setX(pos.getX() + 1);
          188        map[pos.getX()][pos.getY()].setStatus("*");
          189        map[pos.getX()][pos.getY()].showPos();
          190        step--;
          191      }

          192
          193    }

          194    else if (direction == North) //Y--
          195    {
          196      while (pos.getY() > min && step>0)
          197      {
          198        if (map[pos.getX()][pos.getY()].getSatus().equals(".")) //第一步也要畫
          199        {
          200          map[pos.getX()][pos.getY()].setStatus("*");
          201        }

          202        pos.setY(pos.getY() - 1);
          203        map[pos.getX()][pos.getY()].setStatus("*");
          204        map[pos.getX()][pos.getY()].showPos();
          205        step--;
          206      }

          207    }

          208    else if (direction == West ) //X--
          209    {
          210      while (pos.getX() > min && step>0)
          211      {
          212        if (map[pos.getX()][pos.getY()].getSatus().equals(".")) //draw the first step
          213        {
          214          map[pos.getX()][pos.getY()].setStatus("*");
          215        }

          216        pos.setX(pos.getX() - 1);
          217        map[pos.getX()][pos.getY()].setStatus("*");
          218        map[pos.getX()][pos.getY()].showPos();
          219        step--;
          220      }

          221    }

          222  }

          223
          224  public static void main(String[] args)
          225  {
          226    String[] cmds = "FORWARD 19","LEFT","FORWARD 19""LEFT","FORWARD 19","LEFT","FORWARD 17","LEFT","FORWARD 17","LEFT","FORWARD 17","LEFT","FORWARD 13","LEFT","FORWARD 13","LEFT","FORWARD 13","LEFT","FORWARD 13","LEFT","FORWARD 13","LEFT",};
          227
          228    DrawLines dl = new DrawLines();
          229
          230    dl.execute(cmds);
          231
          232    dl.showMap();
          233
          234  }

          235
          236}

          posted on 2006-02-13 21:36 Vincent.Chen 閱讀(3284) 評論(0)  編輯  收藏 所屬分類: 雜文

          主站蜘蛛池模板: 得荣县| 茌平县| 临湘市| 屯留县| 和静县| 井陉县| 滕州市| 苗栗县| 遂平县| 称多县| 灌云县| 鄢陵县| 炉霍县| 巫山县| 鄂托克前旗| 乌鲁木齐县| 金门县| 措美县| 射洪县| 禄丰县| 蕉岭县| 新田县| 平度市| 公主岭市| 汪清县| 石景山区| 神池县| 达尔| 镇巴县| 邹城市| 五原县| 雷波县| 福州市| 桑日县| 嘉兴市| 浠水县| 大理市| 西青区| 辽宁省| 汤原县| 都昌县|