{"id":2306,"date":"2011-09-13T21:34:20","date_gmt":"2011-09-13T12:34:20","guid":{"rendered":"http:\/\/blog.bitmeister.jp\/?p=2306"},"modified":"2011-09-14T10:28:37","modified_gmt":"2011-09-14T01:28:37","slug":"google-devquiz-2011-%e8%a7%a3%e7%ad%94%e4%be%8b%e3%80%8c%e3%82%b9%e3%83%a9%e3%82%a4%e3%83%89%e3%83%91%e3%82%ba%e3%83%ab%e3%80%8d%e7%b7%a8","status":"publish","type":"post","link":"https:\/\/blog.bitmeister.jp\/?p=2306","title":{"rendered":"Google DevQuiz 2011 \u89e3\u7b54\u4f8b\u300c\u30b9\u30e9\u30a4\u30c9\u30d1\u30ba\u30eb\u300d\u7de8"},"content":{"rendered":"<p>\u524d\u56de\u306e<a href=\"https:\/\/blog.bitmeister.jp\/?p=2293\">\u300c\u4e00\u4eba\u30b2\u30fc\u30e0\u300d\u7de8<\/a>\u306b\u7d9a\u304d\u3001\u4eca\u56de\u306eDevQuiz\u306e\u6700\u96e3\u95a2\u3067\u3042\u308a\u3001\u5148\u9031\u672b\u306e\u65e5\u672c\u306e\u6d88\u8cbb\u96fb\u529b\u91cf\u3092\u6570\u30d1\u30fc\u30bb\u30f3\u30c8\u4e0a\u3052\u305f\u3068\u8a00\u308f\u308c\u308b(?)\u300c\u30b9\u30e9\u30a4\u30c9\u30d1\u30ba\u30eb\u300d\u306e\u89e3\u7b54\u3092\u516c\u958b\u3057\u307e\u3059\u3002<\/p>\n<p>\u300c\u30b9\u30e9\u30a4\u30c9\u30d1\u30ba\u30eb\u300d\u306e\u30eb\u30fc\u30eb\u306f\u3001<\/p>\n<ul>\n<li>\u5e453~6\u3001\u9ad8\u30553~6\u30de\u30b9\u306e\u30dc\u30fc\u30c9\u304c\u4e0e\u3048\u3089\u308c\u308b<\/li>\n<li>\u30dc\u30fc\u30c9\u306e\u5404\u30de\u30b9\u306f\u3001\u30d1\u30cd\u30eb\u3001\u58c1\u3001\u7a7a\u767d\u306e\u3044\u305a\u308c\u304b<\/li>\n<li>\u30d1\u30cd\u30eb\u306f1-9\u304a\u3088\u3073A-Z\u3001\u58c1\u306f=\u3001\u7a7a\u767d\u306f0\u3067\u793a\u3055\u308c\u308b<\/li>\n<li>\u7a7a\u767d\u306f\u4e0a\u4e0b\u5de6\u53f3\u306e\u30d1\u30cd\u30eb\u3068\u5165\u308c\u66ff\u3048\u3089\u308c\u308b\u304c\u3001\u58c1\u3068\u306f\u5165\u308c\u66ff\u3048\u3089\u308c\u306a\u3044<\/li>\n<li>\u7a7a\u767d\u3092\u4e0a\u4e0b\u5de6\u53f3\u306e\u30d1\u30cd\u30eb\u3068\u5165\u308c\u66ff\u3048\u308b\u3053\u3068\u3092\u305d\u308c\u305e\u308c&#8221;U&#8221;,&#8221;D&#8221;,&#8221;L&#8221;,&#8221;R&#8221;\u3067\u793a\u3059<\/li>\n<li>\u4e0e\u3048\u3089\u308c\u305f\u521d\u671f\u914d\u7f6e\u3092\u30b4\u30fc\u30eb\u914d\u7f6e\u307e\u3067\u5c0e\u304f\u89e3\u3092&#8221;U&#8221;,&#8221;D&#8221;,&#8221;L&#8221;,&#8221;R&#8221;\u306e\u6587\u5b57\u5217\u3067\u89e3\u7b54\u3059\u308b<\/li>\n<li>\u30b4\u30fc\u30eb\u914d\u7f6e\u306f\u3001\u5de6\u4e0a\u304b\u3089\u53f3\u4e0b\u306b\u5411\u304b\u3063\u30661\u2192Z\u306e\u30d1\u30cd\u30eb\u304c\u9806\u756a\u306b\u4e26\u3073\u3001\u53f3\u4e0b\u9685\u304c0\u3068\u306a\u308b<\/li>\n<li>\u554f\u984c\u6570\u306f5000\u554f\u3067\u3001\u4e00\u554f\u89e3\u304f\u6bce\u306b0.01\u70b9\u304c\u4e0e\u3048\u3089\u308c\u308b<\/li>\n<li>\u89e3\u7b54\u306b\u4f7f\u3048\u308b&#8221;U&#8221;,&#8221;D&#8221;,&#8221;L&#8221;,&#8221;R&#8221;\u305d\u308c\u305e\u308c\u306e\u7dcf\u6570\u306b\u306f\u4e0a\u9650\u304c\u3042\u308b<\/li>\n<\/ul>\n<p>\u3068\u3044\u3046\u3082\u306e\u3067\u3059\u3002\u3064\u307e\u308a\u3001\u69d8\u3005\u306a\u30b5\u30a4\u30ba\u306e<a href=\"http:\/\/ja.wikipedia.org\/wiki\/15%E3%83%91%E3%82%BA%E3%83%AB\">15\u30d1\u30ba\u30eb<\/a>\u306b&#8221;\u58c1&#8221;\u3068\u3044\u3046\u30eb\u30fc\u30eb\u3092\u52a0\u3048\u305f\u3082\u306e\u3002<br \/>\n<!--more--><br \/>\n\u672c\u683c\u7684\u306b\u8003\u3048\u59cb\u3081\u305f\u306e\u304c\u7de0\u3081\u5207\u308a\u524d\u9031\u306e\u6728\u66dc(8\u65e5)\u306e\u591c\u3060\u3063\u305f\u305f\u3081\u3001\u3068\u308a\u3042\u3048\u305a\u306f\u76e4\u9762\u306e\u30b5\u30a4\u30ba\u304c\u5c0f\u3055\u3044\u3082\u306e\u3084\u77ed\u624b\u6570\u3067\u89e3\u3051\u308b\u3082\u306e\u3092\u89e3\u3044\u3066\u70b9\u6570\u3092\u7a3c\u3054\u3046\u3068\u3044\u3046\u8003\u3048\u3067\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u59cb\u3081\u307e\u3057\u305f\u3002<\/p>\n<p>\u79c1\u306e\u8003\u3048\u305f\u57fa\u672c\u7684\u306a\u6226\u7565\u306f\u3001<\/p>\n<ol>\n<li>\u30b4\u30fc\u30eb\u914d\u7f6e\u304b\u3089n\u624b\u76ee\u306e\u5168\u76e4\u9762\u3068\u3001\u305d\u306e\u76e4\u9762\u304b\u3089\u30b4\u30fc\u30eb\u306b\u5230\u9054\u3059\u308b\u624b\u9806(\u5bc4\u305b\u624b)\u306e\u30ea\u30b9\u30c8\u3092\u4f5c\u308b<\/li>\n<li>\u30b9\u30bf\u30fc\u30c8\u914d\u7f6e\u304b\u3089\u4e00\u624b\u305a\u3064\u5168\u76e4\u9762\u3092\u4f5c\u308a\u3001\u5bc4\u305b\u624b\u30ea\u30b9\u30c8\u306e\u76e4\u9762\u306e\u3069\u308c\u304b\u306b\u4e00\u81f4\u3059\u308c\u3070\u30b4\u30fc\u30eb!<\/li>\n<li>\u30b9\u30bf\u30fc\u30c8\u304b\u3089\u306e\u76e4\u9762\u6570\u304c\u80a5\u5927\u3057\u3066\u3044\u304f\u306e\u3067\u3001\u76e4\u9762\u304c\u3042\u308b\u7a0b\u5ea6\u306e\u6570\u4ee5\u4e0a\u306b\u306a\u3063\u305f\u3089\u3001\u300c\u30b4\u30fc\u30eb\u306b\u8fd1\u305d\u3046\u306a\u3082\u306e\u300d\u3092\u6b8b\u3057\u3066\u5207\u308a\u6368\u3066\u308b<\/li>\n<li>\u624b\u6570\u5236\u9650\u306b\u3064\u3044\u3066\u306f\u30aa\u30fc\u30d0\u30fc\u3057\u305f\u3068\u304d\u306b\u8003\u3048\u308b<\/li>\n<\/ol>\n<p>\u3044\u308f\u3086\u308b<a href=\"http:\/\/ja.wikipedia.org\/wiki\/%E5%8F%8C%E6%96%B9%E5%90%91%E6%8E%A2%E7%B4%A2\">\u53cc\u65b9\u5411<\/a>\u30fb<a href=\"http:\/\/ja.wikipedia.org\/wiki\/%E5%B9%85%E5%84%AA%E5%85%88%E6%8E%A2%E7%B4%A2\">\u5e45\u512a\u5148\u63a2\u7d22<\/a>\uff0b\u8a55\u4fa1\u5024\u306b\u3088\u308b\u679d\u5208\u308a\u3067\u3059\u3002(\u3053\u306e\u554f\u984c\u3092\u8003\u3048\u308b\u4ee5\u524d\u306f\u3001\u3053\u3093\u306a\u8a00\u8449\u306f\u77e5\u3089\u306a\u304b\u3063\u305f\u308f\u3051\u3067\u3059\u304c)<\/p>\n<p>\u3053\u3053\u3067\u554f\u984c\u306b\u306a\u308b\u306e\u306f\u30013.\u306e\u5207\u308a\u6368\u3066\u6642\u306b\u4f55\u3092\u3082\u3063\u3066\u300c\u30b4\u30fc\u30eb\u306b\u8fd1\u3044\u300d\u3068\u5224\u65ad\u3059\u308b\u304b\u3067\u3059\u3002\u79c1\u306f\u3068\u308a\u3042\u3048\u305a\u306e\u8a55\u4fa1\u5024\u3068\u3057\u3066\u5404\u30d1\u30cd\u30eb\u306e<a href=\"http:\/\/ja.wikipedia.org\/wiki\/%E3%83%9E%E3%83%B3%E3%83%8F%E3%83%83%E3%82%BF%E3%83%B3%E8%B7%9D%E9%9B%A2\">\u30de\u30f3\u30cf\u30c3\u30bf\u30f3\u8ddd\u96e2<\/a>(=\u672c\u6765\u306e\u4f4d\u7f6e\u306b\u6700\u4f4e\u4f55\u624b\u3067\u79fb\u52d5\u3067\u304d\u308b\u304b?)\u306e\u5408\u8a08\u3068<a href=\"http:\/\/ja.wikipedia.org\/wiki\/%E8%BB%A2%E5%80%92%E6%95%B0\">\u8ee2\u5012\u6570<\/a>\u306e\u5408\u8a08\u3092\u4f7f\u3046\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002\u30de\u30f3\u30cf\u30c3\u30bf\u30f3\u8ddd\u96e2\u306e\u7b97\u51fa\u306b\u306f\u3001\u58c1\u306e\u5b58\u5728\u3082\u8003\u616e\u306b\u5165\u308c\u3066\u3044\u307e\u3059\u3002\u3055\u3089\u306b\u3001\u4e71\u6570\u3067\u30d4\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u305f\u76e4\u9762\u3082\u5c11\u3057\u6df7\u305c\u8fbc\u3093\u3067\u3044\u307e\u3059\u3002<\/p>\n<p>\u305d\u308c\u3067\u306f\u3001\u4ee5\u4e0b\u304cJava\u306e\u30b3\u30fc\u30c9\u3067\u3059\u3002\u516c\u958b\u7528\u306b\u53ef\u8aad\u6027\u3092\u4e0a\u3052\u308b\u305f\u3081\u306e\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3092\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u30ed\u30b8\u30c3\u30af\u306f\u5909\u66f4\u3057\u3066\u3044\u307e\u305b\u3093\u3002<br \/>\n\u30d5\u30a1\u30a4\u30eb\u306f<a href=\"\/wp-content\/uploads\/2011\/09\/SlidePuzzle.java_.txt\">\u3053\u3061\u3089<\/a>\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"java\" name=\"code\">\r\npackage jp.bitmeister.gdd;\r\n\r\nimport java.io.BufferedReader;\r\nimport java.io.File;\r\nimport java.io.FileReader;\r\nimport java.io.FileWriter;\r\nimport java.util.ArrayList;\r\nimport java.util.Arrays;\r\nimport java.util.Collections;\r\nimport java.util.Comparator;\r\nimport java.util.HashMap;\r\nimport java.util.HashSet;\r\nimport java.util.List;\r\nimport java.util.Map;\r\nimport java.util.Map.Entry;\r\nimport java.util.Set;\r\n\r\npublic class SlidePuzzle {\r\n\r\n  static int[] limits = new int[4];  \/\/ \u624b\u6570\u5236\u9650\r\n  static int[] remains;        \/\/ \u6b8b\u624b\u6570\r\n  \r\n  static Puzzle[] puzzles;\r\n  \r\n  static final char[] character = new char[] {'L', 'R', 'U', 'D'};\r\n  static final int[] direction = new int[] {0, 1, 2, 3};  \/\/ \u65b9\u5411\u30ea\u30b9\u30c8\r\n  static final int[] reverse = new int[] {1, 0, 3, 2};  \/\/ \u9006\u65b9\u5411\u30ea\u30b9\u30c8\r\n  static final int[] prime = new int[] {\r\n    37,41,43,47,53,59,61,67,71,73,79,83,\r\n    89,97,101,103,107,109,113,127,131,137,139,149,\r\n    151,157,163,167,173,179,181,191,193,197,199,211};  \/\/ \u30cf\u30c3\u30b7\u30e5\u7b97\u51fa\u7528\u7d20\u6570\u30ea\u30b9\u30c8\r\n\r\n  static int tried = 0;\r\n  static int solved = 0;\r\n  \r\n  static int level;\r\n  \r\n  public static void main(String[] args) {    \r\n    try {\r\n      \/\/ \u554f\u984c\u8aad\u8fbc\r\n      BufferedReader rd = new BufferedReader(new FileReader(\"puzzle.txt\"));\r\n      String[] nums = rd.readLine().split(\" \");\r\n      for (int i = 0; i &lt; 4; i++) {\r\n        limits[i] = Integer.valueOf(nums[i]);\r\n      }\r\n      remains = limits.clone();\r\n      puzzles = new Puzzle[Integer.valueOf(rd.readLine())];\r\n      List&lt;Puzzle&gt; list = new ArrayList&lt;Puzzle&gt;();\r\n      for (int i = 0; i &lt; puzzles.length; i++) {\r\n        puzzles[i] = new Puzzle(rd.readLine().split(\",\"));\r\n        list.add(puzzles[i]);\r\n      }\r\n      \r\n      \/\/ \u89e3\u7b54\u6e08\u307f\u306e\u7d50\u679c\u3092\u8aad\u8fbc\r\n      if (new File(\"result.txt\").exists()) {\r\n        rd = new BufferedReader(new FileReader(\"result.txt\"));\r\n        for (Puzzle e: puzzles) {\r\n          String result = rd.readLine();\r\n          if (result.length() &gt; 0) {\r\n            e.result = result;\r\n            tried++;\r\n            solved++;\r\n          }\r\n        }\r\n      }\r\n      \r\n      \/\/ Exception\u3067\u843d\u3061\u3066\u3082\u7d50\u679c\u306f\u4fdd\u5b58\r\n      Runtime.getRuntime().addShutdownHook(new Thread(new ShutdownThread()));\r\n      \r\n      level = 1;\r\n      if (args.length &gt; 0) {\r\n        level = Integer.valueOf(args[0]);\r\n      }\r\n      int from = 0;\r\n      if (args.length &gt; 1) {\r\n        from = Integer.valueOf(args[1]);\r\n      }\r\n      \/\/ \u2193\u76e4\u306e\u30b5\u30a4\u30ba\u304c\u5c0f\u3055\u3044\u3082\u306e\u304b\u3089\u89e3\u3044\u3066\u3044\u305f\u3068\u304d\u306e\u540d\u6b8b\u308a\r\n      \/\/ Collections.sort(list);\r\n      for (int i = 0; i &lt; list.size(); i++) {\r\n        Puzzle p = list.get(i);\r\n        if (p.result.length() &gt; 0) {\r\n          System.out.println(\"No.\" + (i + 1) + \" size:\" + p.x * p.y);\r\n          System.out.println(\"ALREADY SOLVED : \" + p.result);\r\n          minusRemains(p.result); \/\/ \u65e2\u306b\u7b54\u3048\u304c\u51fa\u3066\u3044\u308b\u3082\u306e\u3092\u6b8b\u624b\u6570\u304b\u3089\u5f15\u304f\r\n        }\r\n      }\r\n      \/\/ \u30d1\u30ba\u30eb\u3092\u89e3\u304f\r\n      for (int i = from; i &lt; list.size(); i++) {\r\n        Puzzle p = list.get(i);\r\n        if (p.result.length() == 0) {\r\n          System.out.println(\"No.\" + (i + 1) + \" size:\" + p.x * p.y);\r\n          byte[] result = new Solver(p).solve();\r\n          if (result != null) {\r\n            p.result = resultToString(result);\r\n            System.out.println(\"SOLVED! : \" + p.result);\r\n            solved++;\r\n          }\r\n          System.out.println(\"solve: \" + solved + \" \/ try: \" + tried);\r\n          System.out.println(\"L:\" + remains[0] + \"(\" + ((float)remains[0] \/ limits[0]) * 100 + \"%)\"\r\n              + \" R:\" + remains[1] + \"(\" + ((float)remains[1] \/ limits[1]) * 100 + \"%)\"\r\n              + \" U:\" + remains[2] + \"(\" + ((float)remains[2] \/ limits[2]) * 100 + \"%)\"\r\n              + \" D:\" + remains[3] + \"(\" + ((float)remains[3] \/ limits[3]) * 100 + \"%)\");\r\n          System.out.println();\r\n        }\r\n      }\r\n    }\r\n    catch (Exception e) {\r\n      e.printStackTrace();\r\n    }\r\n  }\r\n\r\n  \/\/ \u7d42\u4e86\u6642\u306b\u7d50\u679c\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u51fa\u3059\u305f\u3081\u306e\u30b9\u30ec\u30c3\u30c9\r\n  static class ShutdownThread implements Runnable {\r\n    \r\n    @Override\r\n    public void run() {\r\n      try {\r\n        FileWriter fw = new FileWriter(\"result.txt\");\r\n        for (Puzzle p: puzzles) {\r\n          fw.write(p.result);\r\n          fw.write('\\n');\r\n        }\r\n        fw.flush();\r\n      }\r\n      catch (Exception e) {\r\n        e.printStackTrace();\r\n      }\r\n    }\r\n    \r\n  }\r\n  \r\n  \/\/ \u7d50\u679c\u3092\u6587\u5b57\u5217\u306b\u5909\u63db\r\n  static String resultToString(byte[] result) {\r\n    StringBuilder builder = new StringBuilder();\r\n    for (byte e: result) {\r\n      if (e &lt; 0) {\r\n        continue;\r\n      }\r\n      remains[e]--;\r\n      if (remains[e] == 0) {\r\n        throw new RuntimeException(String.valueOf(character[e]) + \" reached limit.\");\r\n      }\r\n      builder.append(character[e]);\r\n    }\r\n    return builder.toString();\r\n  }\r\n\r\n  static void minusRemains(String result) {\r\n    for (char c: result.toCharArray()) {\r\n      remains[charToDirection(c)]--;\r\n    }\r\n  }\r\n  \r\n  static int charToDirection(char c) {\r\n    switch (c) {\r\n    case 'L':\r\n      return 0;\r\n    case 'R':\r\n      return 1;\r\n    case 'U':\r\n      return 2;\r\n    default:\r\n      return 3;\r\n    }\r\n  }\r\n\r\n  \/\/ \u554f\u984c\u30af\u30e9\u30b9\r\n  static class Puzzle implements Comparable&lt;Puzzle&gt; {\r\n    \r\n    int x;\r\n    \r\n    int y;\r\n    \r\n    int size;\r\n    \r\n    String start;\r\n    \r\n    String result = \"\";\r\n        \r\n    Puzzle(String[] args) {\r\n      x = Integer.valueOf(args[0]);\r\n      y = Integer.valueOf(args[1]);\r\n      size = x * y;\r\n      start = args[2];\r\n    }\r\n\r\n    @Override\r\n    public int compareTo(Puzzle o) {\r\n      return size - o.size;\r\n    }\r\n  \r\n  }\r\n\r\n  \/\/ \u89e3\u7b54\u63a2\u7d22\u30af\u30e9\u30b9\r\n  static class Solver {\r\n    \r\n    Puzzle p;\r\n    \r\n    int[] distance;\r\n    \r\n    boolean[] wall;  \/\/ \u58c1\r\n    \r\n    Board start;  \/\/ \u958b\u59cb\u76e4\u9762\r\n    \r\n    Board goal;    \/\/ \u7d42\u4e86\u76e4\u9762\r\n    \r\n    int maxMd;    \/\/ \u5bc4\u305b\u624b\u30ea\u30b9\u30c8\u4e2d\u306e\u6700\u5927\u30de\u30f3\u30cf\u30c3\u30bf\u30f3\u8ddd\u96e2\u5024\r\n    \r\n    int stepLimit;    \/\/ \u624b\u6570\u5236\u9650(\u3053\u308c\u4ee5\u4e0a\u306e\u624b\u6570\u306b\u306a\u3063\u305f\u3089\u8ae6\u3081\u308b)\r\n    \r\n    int goalMapSize;  \/\/ \u5bc4\u305b\u624b\u30ea\u30b9\u30c8\u306e\u30b5\u30a4\u30ba\r\n    \r\n    int stepWidth;    \/\/ \u30b9\u30bf\u30fc\u30c8\u304b\u3089\u306e\u76e4\u9762\u6570\u306e\u5236\u9650\u5024\r\n    \r\n    byte[][] mdMap;    \/\/ \u30de\u30f3\u30cf\u30c3\u30bf\u30f3\u8ddd\u96e2\u30de\u30c3\u30d7\r\n    \r\n    Map&lt;Board, byte[]&gt; goalMap;  \/\/ \u5bc4\u305b\u624b\u30ea\u30b9\u30c8\r\n\r\n    Solver(Puzzle p) {\r\n      this.p = p;\r\n      distance = new int[] {-1, 1, -p.x, p.x};  \/\/ \u4e00\u624b\u3067\u52d5\u304f\u8ddd\u96e2\r\n      \r\n      \/\/ \u30ec\u30d9\u30eb\u306b\u5408\u308f\u305b\u3066\u5404\u5236\u9650\u5024\u3092\u8a2d\u5b9a\r\n      stepLimit = p.size * (2 + level);\r\n      goalMapSize = 10240 * (1 &lt;&lt; level);\r\n      stepWidth = 2048 * level;\r\n\r\n      \/\/ \u30b9\u30bf\u30fc\u30c8\u76e4\u9762\u3001\u30b4\u30fc\u30eb\u76e4\u9762\u3001\u58c1\u8a2d\u5b9a\r\n      wall = new boolean[p.size];\r\n      byte[] start = new byte[p.size];\r\n      byte[] goal = new byte[p.size];\r\n      char[] c = p.start.toCharArray();\r\n      for (int i = 0; i &lt; c.length; i++) {\r\n        goal[i] = (byte)(i + 1);\r\n        if (c[i] == '=') {\r\n          start[i] = (byte)(i + 1);\r\n          wall[i] = true;\r\n        }\r\n        else if (c[i] &lt;= '9') {\r\n          start[i] = (byte)(c[i] - '0');\r\n        }\r\n        else {\r\n          start[i] = (byte)(c[i] - 'A' + 10);\r\n        }\r\n      }\r\n      for (int i = goal.length - 1; i &gt;= 0; i--) {\r\n        if (!wall[i]) {\r\n          goal[i] = 0;\r\n          break;\r\n        }\r\n      }\r\n      makeMdMap();\r\n      \r\n      this.start = new Board(start);\r\n      this.goal = new Board(goal);\r\n      show(this.start);\r\n    }\r\n    \r\n    \/\/ \u30de\u30f3\u30cf\u30c3\u30bf\u30f3\u8ddd\u96e2\u30de\u30c3\u30d7\u4f5c\u6210\r\n    void makeMdMap() {\r\n      mdMap = new byte[p.size][];\r\n      mdMap[0] = new byte[p.size];\r\n      for (int i = 1; i &lt; p.size; i++) {\r\n        byte[] m = new byte[p.size];\r\n        Arrays.fill(m, (byte)-1);\r\n        m[i - 1] = 0;\r\n        mdStep(m, i - 1);\r\n        mdMap[i] = m;\r\n      }\r\n    }\r\n    \r\n    \/\/ \u518d\u5e30\u3067\u4e00\u624b\u305a\u3064\u9032\u3093\u3067\u5404\u30de\u30b9\u3078\u306e\u6700\u77ed\u8ddd\u96e2\u3092\u51fa\u3059\r\n    void mdStep(byte[] map, int pos) {\r\n      for (int i = 0; i &lt; 4; i++) {\r\n        if (canMove(pos, i)\r\n            && (map[pos + distance[i]] &lt; 0 || map[pos + distance[i]] &gt; map[pos] + 1)) {\r\n          map[pos + distance[i]] = (byte)(map[pos] + 1);\r\n          mdStep(map, pos + distance[i]);\r\n        }\r\n      }\r\n    }\r\n    \r\n    \/\/ \u79fb\u52d5\u53ef\u80fd\u30c1\u30a7\u30c3\u30af\r\n    boolean canMove(int pos, int i) {\r\n      return ((i == 0 && pos % p.x != 0)\r\n          || (i == 1 && pos % p.x != p.x - 1)\r\n          || (i == 2 && pos &gt;= p.x)\r\n          || (i == 3 && pos &lt; p.size - p.x))\r\n            && !wall[pos + distance[i]];\r\n    }\r\n    \r\n    \/\/ \u89e3\u7b54\u63a2\u7d22\r\n    byte[] solve() {\r\n      tried++;\r\n      byte[] result = null;\r\n      try {\r\n        result = goalMap();\r\n        if (result == null) {\r\n          result = fromStart();\r\n          goalMap = null;\r\n        }\r\n      } catch (Exception e) {\r\n        e.printStackTrace();\r\n      }\r\n      System.out.println();\r\n      if (result == null) {\r\n        System.out.println(\"UNSOLVED!\");\r\n      }\r\n      else if (!checkResult(result)) {\r\n        System.out.println(\"INVALID RESULT!\");\r\n      }\r\n      else {\r\n        result = checkLoop(result);\r\n        return result;\r\n      }\r\n      return null;\r\n    }    \r\n    \r\n    \/\/ \u5bc4\u305b\u624b\u30ea\u30b9\u30c8\u4f5c\u6210\r\n    byte[] goalMap() {\r\n      System.out.print(\"Making goal map : \");\r\n      \r\n      \/\/ \u65e2\u51fa\u76e4\u9762\u30ea\u30b9\u30c8\r\n      List&lt;Set&lt;Board&gt;&gt; g_appeared_list = new ArrayList&lt;Set&lt;Board&gt;&gt;();\r\n      g_appeared_list.add(new HashSet&lt;Board&gt;());\r\n      Set&lt;Board&gt; g_appeared = g_appeared_list.get(0);\r\n      g_appeared.add(goal);\r\n      \r\n      \/\/ \u4e00\u624b\u524d\u30ea\u30b9\u30c8\r\n      Map&lt;Board, byte[]&gt; g_last = new HashMap&lt;Board, byte[]&gt;();\r\n      g_last.put(goal, new byte[] {-1});\r\n      \r\n      maxMd = 0;\r\n      for (int i = 0; g_last.size() &lt; goalMapSize; i++) {\r\n        System.out.print(\".\");\r\n        goalMap = new HashMap&lt;Board, byte[]&gt;();\r\n        for (Entry&lt;Board, byte[]&gt; e: g_last.entrySet()) {\r\n          int z = posZero(e.getKey());\r\n          MLOOP : for (int j = 0; j &lt; 4; j++) {\r\n            \/\/ \u5404\u65b9\u5411\u306b\u52d5\u3044\u3066\u76e4\u9762\u3068\u624b\u9806\u3092\u30de\u30c3\u30d7\u306b\u4fdd\u5b58\r\n            byte[] step = e.getValue();\r\n            Board moved = e.getKey().move(z, j, step[step.length - 1]);\r\n            if (moved == null) {\r\n              continue;\r\n            }\r\n            for (Set&lt;Board&gt; s: g_appeared_list) {\r\n              \/\/ \u65e2\u51fa\r\n              if (s.contains(moved)) {\r\n                continue MLOOP;\r\n              }\r\n            }\r\n            if (moved.md &gt; maxMd) {\r\n              maxMd = moved.md;\r\n            }\r\n            byte[] newStep = Arrays.copyOf(step, step.length + 1);\r\n            newStep[step.length] = (byte)j;\r\n            if (moved.equals(start)) {\r\n              \/\/ \u30b9\u30bf\u30fc\u30c8\u76e4\u9762\u306b\u30d2\u30c3\u30c8\r\n              return reverse(newStep);\r\n            }\r\n            g_appeared.add(moved);\r\n            goalMap.put(moved, newStep);\r\n          }\r\n        }\r\n        if (g_appeared_list.size() &gt; 4) {\r\n          \/\/ \u65e2\u51fa\u30c1\u30a7\u30c3\u30af\u306f4\u624b\u524d\u3050\u3089\u3044\u3067OK?\r\n          g_appeared_list.remove(0);\r\n        }\r\n        g_appeared_list.add(g_appeared);\r\n        g_appeared = new HashSet&lt;Board&gt;();\r\n\r\n        g_last = goalMap;\r\n      }\r\n      System.out.println(\" map size : \" + goalMap.size());\r\n      return null;\r\n    }\r\n    \r\n    \/\/ \u30b9\u30bf\u30fc\u30c8\u76e4\u9762\u304b\u3089\u63a2\u7d22\r\n    byte[] fromStart() {\r\n      System.out.print(\"From start : \");\r\n      \r\n      \/\/ \u65e2\u51fa\u30ea\u30b9\u30c8\r\n      List&lt;Set&lt;Board&gt;&gt; s_appeared_list = new ArrayList&lt;Set&lt;Board&gt;&gt;();\r\n      s_appeared_list.add(new HashSet&lt;Board&gt;());\r\n      Set&lt;Board&gt; s_appeared = s_appeared_list.get(0);\r\n      s_appeared.add(start);\r\n      \r\n      \/\/ \u4e00\u624b\u524d\u30ea\u30b9\u30c8\r\n      Map&lt;Board, byte[]&gt; s_last = new HashMap&lt;Board, byte[]&gt;();\r\n      s_last.put(start, new byte[] {-1});\r\n      \r\n      for (int i = 0; i &lt; stepLimit; i++) {\r\n        Map&lt;Board, byte[]&gt; current = new HashMap&lt;Board, byte[]&gt;();  \/\/ \u4e00\u624b\u5f8c\u30ea\u30b9\u30c8\r\n        List&lt;Board&gt; list = new ArrayList&lt;Board&gt;();  \/\/\u3000\u679d\u5208\u308a\u7528\u30ea\u30b9\u30c8\r\n        MLOOP : for (Entry&lt;Board, byte[]&gt; e: s_last.entrySet()) {\r\n          int z = posZero(e.getKey());\r\n          for (int j = 0; j &lt; 4; j++) {\r\n            \/\/ \u5404\u65b9\u5411\u306b\u52d5\u3044\u3066\u76e4\u9762\u3068\u624b\u9806\u3092\u4fdd\u5b58\r\n            byte[] step = e.getValue();\r\n            Board moved = e.getKey().move(z, j, step[step.length - 1]);\r\n            if (moved == null) {\r\n              continue;\r\n            }\r\n            for (Set&lt;Board&gt; s: s_appeared_list) {\r\n              if (s.contains(moved)) {\r\n                continue MLOOP;\r\n              }\r\n            }\r\n            byte[] newStep = Arrays.copyOf(step, step.length + 1);\r\n            newStep[step.length] = (byte)j;\r\n            if (moved.md &lt;= maxMd && goalMap.containsKey(moved)) {\r\n              \/\/ \u5bc4\u305b\u624b\u30ea\u30b9\u30c8\u306b\u30d2\u30c3\u30c8\u3057\u305f\r\n              byte[] toGoal = reverse(goalMap.get(moved));\r\n              byte[] result = new byte[newStep.length + toGoal.length];\r\n              System.arraycopy(newStep, 0, result, 0, newStep.length);\r\n              System.arraycopy(toGoal, 0, result, newStep.length, toGoal.length);\r\n              return result;\r\n            }\r\n            s_appeared.add(moved);\r\n            current.put(moved, newStep);\r\n            list.add(moved);\r\n          }\r\n        }\r\n        if (list.size() &gt; stepWidth * 3 * level) {\r\n          \/\/ \u30b9\u30bf\u30fc\u30c8\u304b\u3089\u306e\u76e4\u9762\u3092\u6e1b\u3089\u3059(\u679d\u5208\u308a)\r\n          Collections.sort(list);\r\n          s_last = new HashMap&lt;Board, byte[]&gt;();\r\n          for (int j = 0; j &lt; stepWidth; j++) {\r\n            \/\/ \u30de\u30f3\u30cf\u30c3\u30bf\u30f3\u8ddd\u96e2\u304c\u5c0f\u3055\u3044\u3082\u306e\u3092\u6b8b\u3059\r\n            s_last.put(list.get(j), current.get(list.get(j)));\r\n          }\r\n          \/\/ \u8ee2\u5012\u6570\u3067\u3082\u30bd\u30fc\u30c8\r\n          Collections.sort(list, new Comparator&lt;Board&gt;() {\r\n            @Override\r\n            public int compare(Board arg0, Board arg1) {\r\n              if (arg0.rc != arg1.rc) {\r\n                return arg0.rc - arg1.rc;\r\n              }\r\n              return arg0.md - arg1.md;\r\n            }\r\n          });\r\n          for (int j = 0; j &lt; stepWidth; j++) {\r\n            \/\/ \u30de\u30f3\u30cf\u30c3\u30bf\u30f3\u8ddd\u96e2\u306f\u5927\u304d\u3044\u304c\u8ee2\u5012\u6570\u304c\u5c0f\u3055\u3044\u3082\u306e\u304c\u3042\u308c\u3070\u6b8b\u3059\r\n            if (!s_last.containsKey(list.get(j))) {\r\n              s_last.put(list.get(j), current.get(list.get(j)));\r\n            }\r\n          }\r\n          for (int j = stepWidth; j &lt; list.size(); j+=(int)(Math.random() * 128)) {\r\n            \/\/ \u30e9\u30f3\u30c0\u30e0\u306b\u3044\u304f\u3064\u304b\u9078\u3093\u3067\u6b8b\u3059\r\n            if (!s_last.containsKey(list.get(j))) {\r\n              s_last.put(list.get(j), current.get(list.get(j)));\r\n            }\r\n          }\r\n        }\r\n        else {\r\n          s_last = current;\r\n        }\r\n        if (s_appeared_list.size() &gt; 4) {\r\n          \/\/ \u65e2\u51fa\u30c1\u30a7\u30c3\u30af\u306f4\u624b\u524d\u3050\u3089\u3044\u3067OK?\r\n          s_appeared_list.remove(0);\r\n        }\r\n        s_appeared_list.add(s_appeared);\r\n        s_appeared = new HashSet&lt;Board&gt;();\r\n        System.out.print(\".\");\r\n      }\r\n      return null;\r\n    }\r\n\r\n    int posZero(Board b) {\r\n      for (int i = 0; i &lt; b.t.length; i++) {\r\n        if (b.t[i] == 0) return i;\r\n      }\r\n      throw new RuntimeException(\"no 0 found!!\");\r\n    }\r\n    \r\n    \/\/ \u30b4\u30fc\u30eb\u304b\u3089\u306e\u624b\u9806\u3092\u30b9\u30bf\u30fc\u30c8\u304b\u3089\u306e\u624b\u9806\u306b\u5909\u63db\r\n    byte[] reverse(byte[] src) {\r\n      byte[] dst = new byte[src.length];\r\n      for (int i = src.length - 1; i &gt;= 0; i--) {\r\n        if (src[i] &gt;= 0) {\r\n          dst[src.length - 1 - i] = (byte)reverse[src[i]];\r\n        }\r\n        else {\r\n          dst[src.length - 1 - i] = -1;\r\n        }\r\n      }\r\n      return dst;\r\n    }\r\n    \r\n    \/\/ \u30b9\u30bf\u30fc\u30c8\u76e4\u9762\u304b\u3089\u30b4\u30fc\u30eb\u76e4\u9762\u306b\u8fbf\u308a\u3064\u3051\u308b\u304b\u7b54\u3048\u5408\u308f\u305b\r\n    boolean checkResult(byte[] steps) {\r\n      Board b = start;\r\n      for (byte s: steps) {\r\n        if (s &lt; 0) {\r\n          continue;\r\n        }\r\n        b = b.move(posZero(b), s, -1);\r\n      }\r\n      if (b.equals(goal)) {\r\n        return true;\r\n      }\r\n      return false;\r\n    }\r\n    \r\n    \/\/ \u624b\u9806\u306e\u5faa\u74b0\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\r\n    byte[] checkLoop(byte[] result) {\r\n      Map&lt;Board, Integer&gt; s = new HashMap&lt;Board, Integer&gt;();\r\n      boolean detected = false;\r\n      Board b = start;\r\n      byte pd = -1;\r\n      for (int i = 0; i &lt; result.length; i++) {\r\n        if (result[i] &lt; 0) {\r\n          continue;\r\n        }\r\n        s.put(b, i);\r\n        b = b.move(posZero(b), result[i], pd);\r\n        if (s.containsKey(b)) {\r\n          \/\/ \u65e2\u51fa\u306e\u5c40\u9762\u304c\u73fe\u308c\u305f\u3089\u4e2d\u9593\u306e\u624b\u9806\u3092\u524a\u9664\r\n          for (int j = s.get(b); j &lt;= i; j++) {\r\n            result[j] = (byte)-1;\r\n          }\r\n          detected = true;\r\n        }\r\n        pd = result[i];\r\n      }\r\n      if (detected) {\r\n        System.out.println(\"LOOP DETECTED!!\");\r\n        if (!checkResult(result)) {\r\n          System.out.println(\"INVALID!\");\r\n          return null;\r\n        }\r\n      }\r\n      return result;\r\n    }\r\n    \r\n    \/\/ \u76e4\u9762\u30af\u30e9\u30b9\r\n    class Board implements Cloneable, Comparable&lt;Board&gt; {\r\n      \r\n      byte[] t;\r\n      \r\n      int md;\r\n      \r\n      int rc;\r\n      \r\n      int hash;\r\n\r\n      Board(byte[] t) {\r\n        this.t = t;\r\n        \r\n        setMd();\r\n        setRc();\r\n        \r\n        \/\/ \u7d20\u6570\u3092\u4f7f\u3063\u3066\u30cf\u30c3\u30b7\u30e5\u751f\u6210\r\n        hash = 0;\r\n        for (int i = 0; i &lt; t.length; i++) {\r\n          hash += t[i] * prime[i];\r\n        }\r\n        \/\/ \u30de\u30f3\u30cf\u30c3\u30bf\u30f3\u8ddd\u96e2\u3068\u8ee2\u5012\u6570\u3082\u30cf\u30c3\u30b7\u30e5\u306b\u52a0\u3048\u308b\r\n        hash += md * 10000;\r\n        hash += rc * 10000000;\r\n      }\r\n      \r\n      \/\/ \u4e00\u624b\u79fb\u52d5\u5f8c\u306e\u76e4\u9762\u3092\u751f\u6210\u3059\u308b\r\n      Board move(int z, int d, int pd) {\r\n        if (reverse[d] == pd) {\r\n          return null;\r\n        }\r\n        if (!canMove(z, d)) {\r\n          return null;\r\n        }\r\n        byte[] moved = ((byte[])t).clone();\r\n        moved[z] = t[z + distance[d]];\r\n        moved[z + distance[d]] = t[z];\r\n        return new Board(moved);\r\n      }\r\n      \r\n      void setMd() {\r\n        md = 0;\r\n        for (int i = 0; i &lt; t.length; i++) {\r\n          md += mdMap[t[i]][i];\r\n        }\r\n      }\r\n      \r\n      void setRc() {\r\n        rc = 0;\r\n        for (int i = 1; i &lt;= t.length; i++) {\r\n          for (int j = 0; j &lt; i - 1; j++) {\r\n            if (t[j] != 0 && t[j] &gt; i) rc++; \r\n          }\r\n          for (int j = i; j &lt; t.length; j++) {\r\n            if (t[j] != 0 && t[j] &lt; i) rc++;\r\n          }\r\n        }\r\n      }\r\n      \r\n      @Override\r\n      public boolean equals(Object obj) {\r\n        \/\/ \u76e4\u9762\u306e\u6bd4\u8f03\u304c\u5927\u91cf\u306b\u884c\u308f\u308c\u308b\u306e\u3067\u914d\u5217\u6bd4\u8f03\u304c\u56de\u907f\u3067\u304d\u308b\u3068\u9ad8\u901f\u5316\u306b\u3064\u306a\u304c\u308b\r\n        if (hash != ((Board)obj).hash) {\r\n          return false;\r\n        }\r\n        return Arrays.equals(t, ((Board)obj).t);\r\n      }\r\n\r\n      @Override\r\n      public int hashCode() {\r\n        return hash;\r\n      }\r\n\r\n      @Override\r\n      protected Object clone() {\r\n        return new Board(t.clone());\r\n      }\r\n\r\n      @Override\r\n      public int compareTo(Board o) {\r\n        if (md != o.md) {\r\n          return md - o.md;\r\n        }\r\n        return rc - o.rc;\r\n      }\r\n      \r\n    }\r\n    \r\n    \/\/ \u76e4\u9762\u8868\u793a\r\n    void show(Board bd) {\r\n      System.out.println();\r\n      for (int y = 0; y &lt; p.y; y++) {\r\n        for (int x = 0; x &lt; p.x; x++) {\r\n          if (wall[y * p.x + x]) {\r\n            System.out.print(\"## \");\r\n          }\r\n          else {\r\n            System.out.printf(\"%2d \", bd.t[y * p.x + x]);\r\n          }\r\n        }\r\n        System.out.println();\r\n      }\r\n      System.out.println();\r\n    }\r\n    \r\n  }\r\n    \r\n}\r\n\r\n<\/pre>\n<p>\u5b9f\u884c\u6642\u306b\u3001VM\u306e\u5f15\u6570\u3068\u3057\u3066 -Xmx1g -Xms1g \u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u7b2c\u4e00\u5f15\u6570\u3067\u63a2\u7d22\u30ec\u30d9\u30eb(\u30c7\u30d5\u30a9\u30eb\u30c8=1\u3001\u4e0a\u9650\u306f\u30e1\u30e2\u30ea\u3068\u5b9f\u884c\u6642\u9593\u6b21\u7b2c)\u3001\u7b2c\u4e8c\u5f15\u6570\u3067\u63a2\u7d22\u3092\u958b\u59cb\u3059\u308b\u554f\u984c\u306e\u756a\u53f7(\u30c7\u30d5\u30a9\u30eb\u30c8=0)\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>Core2Duo T7300 2.0GHz RAM2.0GB\u306eLenovo ThinkPad X61 \u3067\u5b9f\u884c\u3057\u305f\u3068\u3053\u308d\u3001<\/p>\n<ul>\n<li>Level-1 \u5b9f\u884c\u6642\u9593 3\u6642\u959319\u5206 \u89e3\u7b54\u6570 4328\/5000<\/li>\n<li>Level-2 \u5b9f\u884c\u6642\u9593 2\u6642\u959356\u5206 \u89e3\u7b54\u6570 363\/672(\u8a084691\/5000)<\/li>\n<li>Level-3 \u5b9f\u884c\u6642\u9593 3\u6642\u959331\u5206 \u89e3\u7b54\u6570 123\/309(\u8a084814\/5000)<\/li>\n<\/ul>\n<p>\u3068\u3044\u3046\u7d50\u679c\u3002\u9069\u5f53\u306a\u6226\u7565\u3067\u4f5c\u3063\u305f\u308f\u308a\u306b\u30b4\u30fc\u30eb\u307e\u3067\u8fbf\u308a\u7740\u3051\u305f\u6570\u304c\u591a\u304f\u3066\u9a5a\u304d\u307e\u3057\u305f\u3002\u3069\u3046\u3084\u3089&#8221;\u5bc4\u305b\u624b\u30ea\u30b9\u30c8&#8221;\u304c\u826f\u3044\u601d\u3044\u3064\u304d\u3060\u3063\u305f\u6a21\u69d8\u3067\u3059\u3002<\/p>\n<p>\u5b9f\u969b\u306eDevQuiz\u306e\u89e3\u7b54\u306f\u300112\u65e5\u306e\u671d\u307e\u3067\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3057\u30014868\/5000\u554f\u6b63\u89e3\u3068\u3044\u3046\u3068\u3053\u308d\u3067\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002\u5b9f\u884c\u6642\u9593\u304c\u3082\u3046\u4e00\u65e5\u3042\u308c\u3070\u300149\u70b9\u53f0\u306f\u72d9\u3048\u305f\u304b\u3082\u3002<\/p>\n<p>50\u70b9\u6e80\u70b9\u3092\u72d9\u3046\u306b\u306f\u3001\u300c\u76e4\u306e\u4e0a\u7aef\u3084\u5de6\u7aef\u304c\u63c3\u3063\u3066\u3044\u308b\u5834\u5408\u3092\u9ad8\u5f97\u70b9\u306b\u3059\u308b\u300d\u3068\u304b\u3001\u300c\u58c1\u3067\u7d30\u3044\u9053\u304c\u51fa\u6765\u3066\u3044\u308b\u5834\u5408\u306b\u306f\u58c1\u3092\u9032\u3080\u65b9\u5411\u306b\u52d5\u3044\u3066\u307f\u308b\u300d\u3068\u3044\u3063\u305f\u5c40\u9762\u6bce\u306e\u6226\u7565\u3082\u5fc5\u8981\u3060\u3063\u305f\u3088\u3046\u3067\u3059\u3002\u76e4\u9762\u4e0a\u306b\u58c1\u3067\u5cf6\u304c\u3067\u304d\u3066\u3044\u308b(\u304a\u305d\u3089\u304f\u3069\u3053\u304b\u306e\u5c40\u9762\u3067\u30b4\u30fc\u30eb\u3068\u306f\u9006\u65b9\u5411\u306b\u58c1\u306e\u5468\u308a\u3092\u56de\u308b\u5fc5\u8981\u304c\u3042\u308b)\u30d1\u30bf\u30fc\u30f3\u3092\u53d6\u308a\u3053\u307c\u3057\u3066\u3044\u308b\u72b6\u6cc1\u3067\u3001\u904b\u4efb\u305b\u306e\u4e71\u6570\u9078\u629e\u3057\u304b\u601d\u3044\u3064\u304b\u306a\u3044\u3088\u3046\u3067\u306f\u3001\u6e80\u70b9\u306f\u7121\u7406\u3067\u3059\u306d\u2026\u3002\u76e4\u9762\u306e\u30cf\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u306b\u3064\u3044\u3066\u3082\u3001\u3082\u3046\u5c11\u3057\u885d\u7a81(\u30b7\u30ce\u30cb\u30e0)\u56de\u907f\u306e\u5de5\u592b\u3067\u9ad8\u901f\u5316\u304c\u3067\u304d\u305f\u306e\u3067\u306f\u306a\u3044\u304b\u3068\u6094\u3084\u307e\u308c\u307e\u3059\u3002<\/p>\n<p>CPU\u6027\u80fd\u3084RAM\u5bb9\u91cf\u304c10\u5e74\u524d\u3068\u306f\u6bd4\u3079\u7269\u306b\u306a\u3089\u306a\u3044\u307b\u3069\u6f64\u6ca2\u306b\u306a\u3063\u305f\u73fe\u5728\u3067\u306f\u30011\u30b9\u30c6\u30c3\u30d7\u5358\u4f4d\u306e\u6027\u80fd\u3084\u591a\u5c11\u306e\u30e1\u30e2\u30ea\u306e\u7121\u99c4\u306a\u3069\u6c17\u306b\u305b\u305a\u30b3\u30fc\u30c9\u3092\u66f8\u3044\u3066\u3057\u307e\u3046\u3053\u3068\u3082\u591a\u3044\u306e\u3067\u3059\u304c\u3001\u4e45\u3057\u3076\u308a\u306e\u30b7\u30d3\u30a2\u306a\u74b0\u5883\u306b\u5fc3\u304c\u8e8d\u308a\u307e\u3057\u305f\u3002\u30cf\u30c3\u30b7\u30e5\u7b97\u51fa\u3092\u3061\u3087\u3063\u3068\u6539\u826f\u3057\u305f\u3060\u3051\u3067\u30b9\u30d4\u30fc\u30c9\u304c\u76ee\u306b\u898b\u3048\u3066\u901f\u304f\u306a\u3063\u305f\u308a\u3001\u4e45\u3057\u3076\u308a\u306bOutOfMemoryExeption\u3092\u898b\u305f\u308a\u3057\u305f\u306e\u306f\u826f\u3044\u7d4c\u9a13\u3067\u3059\u3002\u305d\u3057\u3066\u3001\u666e\u6bb5\u304b\u3089\u7d30\u304b\u3044\u30ce\u30a6\u30cf\u30a6\u3084\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5f15\u304d\u51fa\u3057\u3092\u6ca2\u5c71\u4f5c\u3063\u3066\u304a\u304f\u3053\u3068\u306e\u91cd\u8981\u6027\u3092\u6539\u3081\u3066\u611f\u3058\u307e\u3057\u305f\u3002<\/p>\n<p>\u3067\u306f\u3001DevQuiz\u306b\u6311\u6226\u3057\u305f\u7686\u69d8\u3001\u304a\u75b2\u308c\u69d8\u3067\u3057\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u56de\u306e\u300c\u4e00\u4eba\u30b2\u30fc\u30e0\u300d\u7de8\u306b\u7d9a\u304d\u3001\u4eca\u56de\u306eDevQuiz\u306e\u6700\u96e3\u95a2\u3067\u3042\u308a\u3001\u5148\u9031\u672b\u306e\u65e5\u672c\u306e\u6d88\u8cbb\u96fb\u529b\u91cf\u3092\u6570\u30d1\u30fc\u30bb\u30f3\u30c8\u4e0a\u3052\u305f\u3068\u8a00\u308f\u308c\u308b(?)\u300c\u30b9\u30e9\u30a4\u30c9\u30d1\u30ba\u30eb\u300d\u306e\u89e3\u7b54\u3092\u516c\u958b\u3057\u307e\u3059\u3002 \u300c\u30b9\u30e9\u30a4\u30c9\u30d1\u30ba\u30eb\u300d\u306e\u30eb\u30fc\u30eb\u306f\u3001 \u5e453~6\u3001\u9ad8\u30553~6\u30de [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[19,23,40],"class_list":["post-2306","post","type-post","status-publish","format-standard","hentry","category-tech","tag-google","tag-java","tag-40"],"_links":{"self":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts\/2306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2306"}],"version-history":[{"count":51,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts\/2306\/revisions"}],"predecessor-version":[{"id":2350,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts\/2306\/revisions\/2350"}],"wp:attachment":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}