{"id":28,"date":"2008-05-21T08:35:37","date_gmt":"2008-05-21T07:35:37","guid":{"rendered":"http:\/\/www.hinnerup.net\/?p=28"},"modified":"2008-06-25T15:26:40","modified_gmt":"2008-06-25T14:26:40","slug":"google-treasure-hunt-2008-part-2","status":"publish","type":"post","link":"https:\/\/www.hinnerup.net\/en\/permanent\/2008\/05\/21\/google-treasure-hunt-2008-part-2\/","title":{"rendered":"Google Treasure Hunt 2008 - Del 2"},"content":{"rendered":"<p>S\u00e5 har Google publiceret sp\u00f8rgsm\u00e5l 2 i skattejagten, og igen har Hinnerup Net ApS lagt sig ud med det nye sp\u00f8rgsm\u00e5l.<\/p>\n<p>Denne gang f\u00e5r man en zip-fil til download. Zip-filen indeholder en katalog struktur, med en masse sm\u00e5 filer. Hver fil best\u00e5r af et begr\u00e6nset antal linjer, og p\u00e5 hver linje st\u00e5r et tal. Der gives to kritierier A og B til udv\u00e6lgelse af tal i filerne. Hvert kriterie best\u00e5r af en delstreng som filens sti eller navn skal indeholde, en fil type samt et linje nummer. Opgaven g\u00e5r i al sin enkelthed ud p\u00e5 at summere tallene der opfylder kriterie A og derefter B. Det endelige resultat er produktet af de to summer.<\/p>\n<p>P\u00e5 forundelig vis ender svaret endnu engang op med at v\u00e6re pr\u00e6cis <a href=\"http:\/\/en.wikipedia.org\/wiki\/Answer_to_Life,_the_Universe,_and_Everything\">42<\/a> linjer langt.<\/p>\n<p style=\"cursor:pointer; text-decoration:underline\" onclick=\"document.getElementById('googleBotSolverCode2').style.display='block';document.getElementById('googleBotSolverSpoiler2').style.display='none'\" id=\"googleBotSolverSpoiler2\">Klik her for at se Java koden &#8211; spoiler advarsel!<\/p>\n<div id=\"googleBotSolverCode2\" style=\"display:none\">\n<pre style=\"font-size:7pt;\">\r\npackage GoogleTreasureHunt2008;\r\nimport java.io.*;\r\nimport java.math.BigInteger;\r\nimport java.util.regex.Pattern;\r\n\r\npublic class GoogleTreasureHunt2 {\r\n  public GoogleTreasureHunt2(String path, String a1, String b1, int l1, String a2, String b2, int l2) {\r\n    File root = new File(path);\r\n    System.out.println(sum(root, p(root, a1, b1), l1).multiply(sum(root, p(root, a2, b2), l2)));\r\n  }\t\r\n  private Pattern p(File root, String a, String b) {\r\n    String pattern = root.getAbsolutePath() + \"\\\\.*\" + a + \".*\" + b + \"$\";\r\n    return Pattern.compile(pattern.replace(\"\\\\\", \"\\\\\\\\\"));\r\n  }\t\r\n  private BigInteger sum(File dir, Pattern criteria, int line) {\r\n    BigInteger result = BigInteger.ZERO;\r\n    File[] files = dir.listFiles();\r\n    for (File file : files)\r\n      if (file.isDirectory())\r\n        result = result.add(sum(file, criteria, line));\r\n      else if (criteria.matcher(file.getAbsolutePath()).matches())\r\n        result = result.add(lineToNumber(file, line));\r\n    return result;\r\n  }\r\n  private BigInteger lineToNumber(File file, int line) {\r\n    String l = null;\r\n    BufferedReader reader = null;\r\n    BigInteger result = BigInteger.ZERO;\r\n    try {\r\n      reader = new BufferedReader(new FileReader(file));\r\n      for (int i = 1; (l = reader.readLine()) != null; i++) if (i == line) {\r\n        result = new BigInteger(l);\r\n        break;\r\n      }\r\n    } catch (Exception e) { ; }\r\n    finally { try { reader.close(); } catch (Exception e) { ; } }\r\n    return result;\r\n  }\r\n  public static void main(String[] args) {\r\n    new GoogleTreasureHunt2(\"level2\", \"abc\", \".pdf\", 5, \"yz1\", \".pdf\", 4);    \r\n  }\r\n}\r\n<\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>S\u00e5 har Google publiceret sp\u00f8rgsm\u00e5l 2 i skattejagten, og igen har Hinnerup Net ApS lagt sig ud med det nye sp\u00f8rgsm\u00e5l. Denne gang f\u00e5r man en zip-fil til download. Zip-filen indeholder en katalog struktur, med en masse sm\u00e5 filer. Hver fil best\u00e5r af et begr\u00e6nset antal linjer, og p\u00e5 hver linje st\u00e5r et tal. Der [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,4],"tags":[],"class_list":["post-28","post","type-post","status-publish","format-standard","hentry","category-java","category-programming"],"_links":{"self":[{"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/posts\/28","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/comments?post=28"}],"version-history":[{"count":0,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/posts\/28\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/media?parent=28"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/categories?post=28"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/tags?post=28"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}