Scott@JAVA

          Java, 一杯濃濃的咖啡伴你到深夜

          GOOGLE挑戰(zhàn)賽練習(xí)題1

          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)


          我的程序:

          public class DrawLines {
              
          // current cursor position
              private int xPos, yPos;

              
          private int direction;

              
          private char[][] canvas;

              
          public DrawLines() {
                  xPos 
          = 0;
                  yPos 
          = 0;
                  
          // initial drawing direction downwards
                  direction = 270;
                  canvas 
          = new char[20][20];
              }


              
          private void initCanvas() {
                  
          for (int i = 0; i < 20; i++)
                      
          for (int j = 0; j < 20; j++)
                          canvas[i][j] 
          = '.';
              }


              
          public String[] excute(String[] commands) {
                  initCanvas();
                  
          for (int i = 0; i < commands.length; i++{
                      
          if (commands[i].equals("LEFT")) {
                          
          // when come cross "LEFT", turn 90 degrees couter-clockwise
                          direction += 90;
                          
          if (direction == 360)
                              direction 
          = 0;
                      }
           else {
                          
          int len = Integer.parseInt(commands[i].split(" ")[1]);
                          
          switch (direction) {
                          
          case 0:
                              
          // draw from left to right
                              for (int j = 0; j <= len; j++)
                                  canvas[xPos][yPos
          ++= 'X';
                              yPos
          --;
                              
          break;
                          
          case 90:
                              
          // draw from down to up
                              for (int j = 0; j <= len; j++)
                                  canvas[xPos
          --][yPos] = 'X';
                              xPos
          ++;
                              
          break;
                          
          case 180:
                              
          // draw from right to left
                              for (int j = 0; j <= len; j++)
                                  canvas[xPos][yPos
          --= 'X';
                              yPos
          ++;
                              
          break;
                          
          case 270:
                              
          // draw from up to down
                              for (int j = 0; j <= len; j++)
                                  canvas[xPos
          ++][yPos] = 'X';
                              xPos
          --;
                              
          break;
                          }

                      }

                  }

                  String[] s 
          = new String[20];
                  
          for (int i = 0; i < 20; i++)
                      s[i] 
          = new String(canvas[i]);
                  
          return s;
              }


              
          public static void main(String[] args) {
                  String[] cmds 
          = "LEFT""FORWARD 19""LEFT""LEFT""LEFT",
                          
          "FORWARD 18""LEFT""LEFT""LEFT""FORWARD 17""LEFT",
                          
          "LEFT""LEFT""FORWARD 16""LEFT""LEFT""LEFT",
                          
          "FORWARD 15""LEFT""LEFT""LEFT""FORWARD 14""LEFT",
                          
          "LEFT""LEFT""FORWARD 13""LEFT""LEFT""LEFT",
                          
          "FORWARD 12""LEFT""LEFT""LEFT""FORWARD 11""LEFT",
                          
          "LEFT""LEFT""FORWARD 10""LEFT""LEFT""LEFT",
                          
          "FORWARD 9""LEFT""LEFT""LEFT""FORWARD 8""LEFT",
                          
          "LEFT""LEFT""FORWARD 7" }
          ;
                  DrawLines drawLines 
          = new DrawLines();
                  String[] s 
          = drawLines.excute(cmds);
                  
          for (int i = 0; i < 20; i++)
                      System.out.println(s[i]);
              }

          }

          posted on 2005-12-01 11:49 Scott@JAVA 閱讀(407) 評(píng)論(0)  編輯  收藏 所屬分類: My Java App


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宜良县| 当涂县| 鹤庆县| 安达市| 米泉市| 车险| 满城县| 鄱阳县| 梓潼县| 博爱县| 磐石市| 富平县| 克山县| 治多县| 宁远县| 梅河口市| 久治县| 华安县| 始兴县| 吴江市| 揭东县| 平顺县| 柘荣县| 洪江市| 任丘市| 太康县| 英德市| 彰化市| 黔西| 台中县| 融水| 罗平县| 凤庆县| 隆安县| 沅陵县| 永嘉县| 嘉善县| 岢岚县| 韶关市| 沁水县| 阿尔山市|