<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hinnerup Net &#187; Java</title>
	<atom:link href="http://www.hinnerup.net/permanent/category/programming/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hinnerup.net</link>
	<description></description>
	<lastBuildDate>Thu, 19 Jan 2012 12:35:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Google Treasure Hunt 2008 &#8211; Del 2</title>
		<link>http://www.hinnerup.net/en/permanent/2008/05/21/google-treasure-hunt-2008-part-2/</link>
		<comments>http://www.hinnerup.net/en/permanent/2008/05/21/google-treasure-hunt-2008-part-2/#comments</comments>
		<pubDate>Wed, 21 May 2008 07:35:37 +0000</pubDate>
		<dc:creator>Jakob Justsen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmering]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=28</guid>
		<description><![CDATA[Så har Google publiceret spørgsmål 2 i skattejagten, og igen har Hinnerup Net ApS lagt sig ud med det nye spørgsmål. Denne gang får man en zip-fil til download. Zip-filen indeholder en katalog struktur, med en masse små filer. Hver fil består af et begrænset antal linjer, og på hver linje står et tal. Der [...]]]></description>
			<content:encoded><![CDATA[<p>Så har Google publiceret spørgsmål 2 i skattejagten, og igen har Hinnerup Net ApS lagt sig ud med det nye spørgsmål.</p>
<p>Denne gang får man en zip-fil til download. Zip-filen indeholder en katalog struktur, med en masse små filer. Hver fil består af et begrænset antal linjer, og på hver linje står et tal. Der gives to kritierier A og B til udvælgelse af tal i filerne. Hvert kriterie består af en delstreng som filens sti eller navn skal indeholde, en fil type samt et linje nummer. Opgaven går i al sin enkelthed ud på at summere tallene der opfylder kriterie A og derefter B. Det endelige resultat er produktet af de to summer.</p>
<p>På forundelig vis ender svaret endnu engang op med at være præcis <a href="http://en.wikipedia.org/wiki/Answer_to_Life,_the_Universe,_and_Everything">42</a> linjer langt.</p>
<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>
<div id="googleBotSolverCode2" style="display:none">
<pre style="font-size:7pt;">
package GoogleTreasureHunt2008;
import java.io.*;
import java.math.BigInteger;
import java.util.regex.Pattern;

public class GoogleTreasureHunt2 {
  public GoogleTreasureHunt2(String path, String a1, String b1, int l1, String a2, String b2, int l2) {
    File root = new File(path);
    System.out.println(sum(root, p(root, a1, b1), l1).multiply(sum(root, p(root, a2, b2), l2)));
  }
  private Pattern p(File root, String a, String b) {
    String pattern = root.getAbsolutePath() + "\\.*" + a + ".*" + b + "$";
    return Pattern.compile(pattern.replace("\\", "\\\\"));
  }
  private BigInteger sum(File dir, Pattern criteria, int line) {
    BigInteger result = BigInteger.ZERO;
    File[] files = dir.listFiles();
    for (File file : files)
      if (file.isDirectory())
        result = result.add(sum(file, criteria, line));
      else if (criteria.matcher(file.getAbsolutePath()).matches())
        result = result.add(lineToNumber(file, line));
    return result;
  }
  private BigInteger lineToNumber(File file, int line) {
    String l = null;
    BufferedReader reader = null;
    BigInteger result = BigInteger.ZERO;
    try {
      reader = new BufferedReader(new FileReader(file));
      for (int i = 1; (l = reader.readLine()) != null; i++) if (i == line) {
        result = new BigInteger(l);
        break;
      }
    } catch (Exception e) { ; }
    finally { try { reader.close(); } catch (Exception e) { ; } }
    return result;
  }
  public static void main(String[] args) {
    new GoogleTreasureHunt2("level2", "abc", ".pdf", 5, "yz1", ".pdf", 4);
  }
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/en/permanent/2008/05/21/google-treasure-hunt-2008-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Treasure Hunt 2008 &#8211; Del 1</title>
		<link>http://www.hinnerup.net/en/permanent/2008/05/18/google-treasure-hunt-2008/</link>
		<comments>http://www.hinnerup.net/en/permanent/2008/05/18/google-treasure-hunt-2008/#comments</comments>
		<pubDate>Sun, 18 May 2008 09:32:39 +0000</pubDate>
		<dc:creator>Michael Schøler</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmering]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=27</guid>
		<description><![CDATA[Google har sat gang i en vaskeægte skattejagt. Hvad kisten indeholder er fornuværende stadig en velbevaret hemmelighed, og det famøse X på skattekortet jagtes af mange. Du kan selv deltage her og du kan læse mere om konkurrencen på denne side. Første etape af udfordringen er at svare på hvor mange unikke stier der er [...]]]></description>
			<content:encoded><![CDATA[<p>Google har sat gang i en vaskeægte skattejagt. Hvad kisten indeholder er fornuværende stadig en velbevaret hemmelighed, og det famøse X på skattekortet jagtes af mange. Du kan selv deltage <a href="http://treasurehunt.appspot.com/">her</a> og du kan læse mere om konkurrencen på <a href="http://googleblog.blogspot.com/2008/05/google-treasure-hunt-update.html">denne side</a>.</p>
<p>Første etape af udfordringen er at svare på hvor mange unikke stier der er for en robot der kun kan bevæge sig henholdsvist ned og mod højre, når denne starter i øverste venstre hjørne af et skakbræt af størrelsen W x H. Tallene W og H oplyses naturligvis forskelligt pr. forsøg man foretager.</p>
<p>Set fra et IT-synspunkt, er det fælles for løsningerne at det endelige tal overstiger almindelige heltals typer, så man skal benytte bit manipulation eller f.eks. BigInteger klassen fra Java for at kunne rumme det endelige tal.</p>
<p>Hinnerup Net ApS har hastigt strukket denne lille Java sag på <a href="http://en.wikipedia.org/wiki/Answer_to_Life,_the_Universe,_and_Everything">42</a> linier sammen, som kan løse opgaven uanset W og H (dog givet W og H er positive heltal):</p>
<p style="cursor:pointer; text-decoration:underline" onclick="document.getElementById('googleBotSolverCode').style.display='block';document.getElementById('googleBotSolverSpoiler').style.display='none'" id="googleBotSolverSpoiler">Klik her for at se Java koden &#8211; spoiler advarsel!</p>
<div id="googleBotSolverCode" style="display:none">
<pre style="font-size:7pt">
package GoogleTreasureHunt2008;
import java.math.BigInteger;

public class GoogleBotSolver
{
  private BigInteger[][] results;
  public GoogleBotSolver(int w, int h)
  {
    results = new BigInteger[w][h];
    for (int x = 0; x &lt; w; x++)
    {
      for (int y = 0; y &lt; h; y++)
      {
        results[x][y] = null;
      }
    }
    System.out.println(C(w - 1, h - 1).toString());
  }
  private BigInteger C(int x, int y)
  {
    if (results[x][y] != null) return results[x][y];
    BigInteger res;
    if (x == 0 &#038;&#038; y == 0)
    {
      res = BigInteger.ZERO;
    }
    else if (x == 0 || y == 0)
    {
      res = BigInteger.ONE;
    }
    else
    {
      res = C(x - 1, y).add(C(x, y - 1));
    }
    results[x][y] = res;
    return res;
  }
  public static void main(String[] args)
  {
    GoogleBotSolver gbs = new GoogleBotSolver(38, 58);
  }
}
</pre>
<p>Svaret for W=38 og H=58 som herover er 194937478788574958222679204. Så robotten har rigtigt nok et par muligheder at vælge imellem.</p>
<p>Opgaven er iøvrigt en velkendt afart af <a href="http://en.wikipedia.org/wiki/Pascal's_triangle">Pascal&#8217;s trekant</a>.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/en/permanent/2008/05/18/google-treasure-hunt-2008/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

