Spirit

          2005年12月19日 #

          Google Code Jam - WordPath

          - Implementation
          public class WordPath {    
              
          public int countPaths(String[] grid, String find) {
                  
          int length = grid.length + 2;      
                  
                  
          //convert "grid" from String to char matrix
                  char[][] charGrid = new char[length][length];
                  
          for (int i = 0; i < length; i++) {
                      
          for (int j = 0; j < length; j++) {
                          
          if (i == 0 || i == length - 1 || j == 0 || j == length - 1)
                              charGrid[i][j] 
          = '0';
                          
          else
                              charGrid[i][j] 
          = grid[i - 1].charAt(j - 1);
                      }
                  }
                  
                  
          //convert "find" from String to char array
                  char[] charFind = new char[find.length()];
                  
          for (int k = 0; k < find.length(); k++)
                      charFind[k] 
          = find.charAt(k);

                  
          //use three dimensions "degree" to hold the in-degree of the vertex of graph
                  int[][][] degree = new int[length][length][find.length()];        

                  
          // k=0
                  for (int i = 0; i < length; i++)
                      
          for (int j = 0; j < length; j++) {
                          degree[i][j][
          0= ((charGrid[i][j] == charFind[0]) ? 1 : 0);
                      }
                  
                  
          // fill the degree 
                  for (int k = 1; k < find.length(); k++) {
                      
          for (int i = 0; i < length; i++)
                          
          for (int j = 0; j < length; j++) {
                              
          if (charGrid[i][j] != charFind[k])
                                  degree[i][j][k] 
          = 0;
                              
          else {
                                  degree[i][j][k] 
          = degree[i - 1][j - 1][k - 1+ degree[i - 1][j][k - 1]
                                          
          + degree[i - 1][j + 1][k - 1+ degree[i + 1][j - 1][k - 1]
                                          
          + degree[i + 1][j][k - 1+ degree[i + 1][j + 1][k - 1]
                                          
          + degree[i][j - 1][k - 1+ degree[i][j + 1][k - 1];

                              }

                          }
                  }
                  
                  
          //calculate the sum
                  int sum = 0;
                  
          for (int i = 0; i < length; i++)
                      
          for (int j = 0; j < length; j++) {
                          sum 
          += degree[i][j][find.length() - 1];
                          
          if (sum > 1000000000) {
                              
          return -1;
                          }
                      }
                  
          return sum;
              }
          }

          - TestCase
          public class WordPathTest extends TestCase {
              
          public void testCountPaths() {
                  WordPath wordPath 
          = new WordPath();
                  assertEquals(
          2, wordPath.countPaths(new String[] { "ABC""FED""GAI" }, "ABCDEA"));
                  assertEquals(
          0, wordPath.countPaths(new String[] { "ABC""DEF""GHI" }, "ABCD"));
                  assertEquals(
          108, wordPath.countPaths(new String[] { "AA""AA" }, "AAAA"));
                  assertEquals(
          56448, wordPath.countPaths(new String[] { "ABABA""BABAB""ABABA""BABAB""ABABA" },
                          
          "ABABABBA"));
                  assertEquals(
          -1, wordPath.countPaths(new String[] { "AAAAA""AAAAA""AAAAA""AAAAA""AAAAA" },
                          
          "AAAAAAAAAAA"));
                  assertEquals(
          0, wordPath.countPaths(new String[] { "AB""CD" }, "AA"));
              }
          }

          This testcase finished after 0.015 seconds on my pc.

          http://forum.javaeye.com/viewtopic.php?p=106316#106316

          posted @ 2005-12-19 16:36 Spirit 閱讀(358) | 評(píng)論 (0)編輯 收藏

          2005年12月15日 #

          Google Code Jam - SkipStones的一種遞歸算法

          public class SkipStones {
              
          private String water = "X";

              
          public int maxDistance(String water) {
                  
          this.water = water;
                  
          int max = 0;
                  
          int sum = 0;
                  
          for (int initial = 1; initial < water.length() + 1; initial++) {
                      sum 
          = bounce(0, initial);
                      max 
          = (sum > max ? sum : max);
                  }
                  
          return max;
              }

              
          private int bounce(int startDistance, int bounceDistance) {
                  
          if (bounceDistance == 0)
                      
          return startDistance;

                  
          if ((startDistance + bounceDistance) > water.length())
                      
          return -1;

                  
          if (water.charAt(startDistance + bounceDistance - 1== 'X')
                      
          return startDistance;

                  
          return bounce(startDistance + bounceDistance, bounceDistance / 2);
              }

              
          public static void main(String[] args) {
                  SkipStones skipStones 
          = new SkipStones();
                  System.out.println(skipStones.maxDistance(args[
          0]));
              }
          }

          posted @ 2005-12-15 13:29 Spirit 閱讀(361) | 評(píng)論 (1)編輯 收藏

          僅列出標(biāo)題  
          主站蜘蛛池模板: 马山县| 碌曲县| 枣强县| 曲周县| 永川市| 秭归县| 闻喜县| 汽车| 荔浦县| 宜兴市| 六盘水市| 本溪市| 华亭县| 鄱阳县| 临邑县| 新乡县| 文安县| 巴彦县| 莱芜市| 樟树市| 科尔| 遵义县| 澄江县| 新丰县| 剑阁县| 瓮安县| 商水县| 台州市| 逊克县| 大厂| 雷州市| 衢州市| 韩城市| 台山市| 同仁县| 额尔古纳市| 安国市| 义马市| 台湾省| 绥化市| 永春县|