<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Alex's Adventures on the Infobahn - connect</title><link href="https://www.bennee.com/~alex/" rel="alternate"></link><link href="https://www.bennee.com/~alex/blog/tag/connect/feed" rel="self"></link><id>https://www.bennee.com/~alex/</id><updated>2018-03-26T11:19:00+01:00</updated><subtitle>the wanderings of a supposed digital native</subtitle><entry><title>Solving the HKG18 puzzle with org-mode</title><link href="https://www.bennee.com/~alex/blog/2018/03/26/solving-the-hkg18-puzzle-with-org-mode/" rel="alternate"></link><published>2018-03-26T11:19:00+01:00</published><updated>2018-03-26T11:19:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2018-03-26:/~alex/blog/2018/03/26/solving-the-hkg18-puzzle-with-org-mode/</id><summary type="html">&lt;p&gt;One of the traditions I like about Linaro's Connect event is the
conference puzzle. Usually set by &lt;a href="https://www.linaro.org/author/dave-pigott/"&gt;Dave Piggot&lt;/a&gt; they provide a challenge
to your jet lagged brain. Full disclosure: I did not complete the
puzzle in time. In fact when Dave explained it I realised the answer
had been …&lt;/p&gt;</summary><content type="html">&lt;p&gt;One of the traditions I like about Linaro's Connect event is the
conference puzzle. Usually set by &lt;a href="https://www.linaro.org/author/dave-pigott/"&gt;Dave Piggot&lt;/a&gt; they provide a challenge
to your jet lagged brain. Full disclosure: I did not complete the
puzzle in time. In fact when Dave explained it I realised the answer
had been staring me in the face. However I thought a successful walk
through would make for a more entertaining read ;-)&lt;/p&gt;
&lt;p&gt;First the Puzzle:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Take the clues below and solve them. Once solved, figure out what the
hex numbers mean and then you should be able to associate each of the
clue solutions with their respective hex numbers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table id="org530cfaf" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col  class="org-left" /&gt;

&lt;col  class="org-left" /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Clue&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Hex Number&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Lava Ale Code&lt;/td&gt;
&lt;td class="org-left"&gt;1114DBA&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Be Google Roe&lt;/td&gt;
&lt;td class="org-left"&gt;114F6BE&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Natural Gin&lt;/td&gt;
&lt;td class="org-left"&gt;114F72A&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Pope Charger&lt;/td&gt;
&lt;td class="org-left"&gt;121EE50&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Dolt And Hunk&lt;/td&gt;
&lt;td class="org-left"&gt;12264BC&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Monk Hops Net&lt;/td&gt;
&lt;td class="org-left"&gt;122D9D9&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Is Enriched Tin&lt;/td&gt;
&lt;td class="org-left"&gt;123C1EF&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Bran Hearing Kin&lt;/td&gt;
&lt;td class="org-left"&gt;1245D6E&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Enter Slim Beer&lt;/td&gt;
&lt;td class="org-left"&gt;127B78E&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Herbal Cabbages&lt;/td&gt;
&lt;td class="org-left"&gt;1282FDD&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Jan Venom Hon Nun&lt;/td&gt;
&lt;td class="org-left"&gt;12853C5&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;A Cherry Skull&lt;/td&gt;
&lt;td class="org-left"&gt;1287B3C&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Each Noun Lands&lt;/td&gt;
&lt;td class="org-left"&gt;1298F0B&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Wave Zone Kits&lt;/td&gt;
&lt;td class="org-left"&gt;12A024C&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Avid Null Sorts&lt;/td&gt;
&lt;td class="org-left"&gt;12A5190&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Handcars All Trim&lt;/td&gt;
&lt;td class="org-left"&gt;12C76DC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h1&gt;Clues&lt;/h1&gt;
&lt;p&gt;It looks like all the clues are anagrams. I was lazy and just used the
first online anagram solver that Google pointed me at. However we can
automate this by combining org-mode with Python and the excellent
Beautiful Soup library.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;bs4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;re&lt;/span&gt;

&lt;span class="c1"&gt;# ask internet to solve the puzzle&lt;/span&gt;
&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;http://anagram-solver.net/&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;anagram&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;%20&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# fish out the answers&lt;/span&gt;
&lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ul&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;class_&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;answers&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;li&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;li&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;li&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# filter out non computer related or poor results&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Elmer Berstein&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Tim-Berners Lee&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Babbage Charles&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Calude Shannon&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# filter out non proper names&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;[a-z] [A-Z]&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So with &lt;code&gt;:var anagram=clues[2,0]&lt;/code&gt; we get&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Ada Lovelace
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I admit the "if result in []" is a bit of hack.&lt;/p&gt;
&lt;h1&gt;Hex Numbers&lt;/h1&gt;
&lt;p&gt;The hex numbers could be anything. But lets first start by converting
to something else.&lt;/p&gt;
&lt;table id="orgf38fe0d" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col  class="org-left" /&gt;

&lt;col  class="org-right" /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Hex Prompt&lt;/th&gt;
&lt;th scope="col" class="org-right"&gt;Number&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;1114DBA&lt;/td&gt;
&lt;td class="org-right"&gt;17911226&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;114F6BE&lt;/td&gt;
&lt;td class="org-right"&gt;18151102&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;114F72A&lt;/td&gt;
&lt;td class="org-right"&gt;18151210&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;121EE50&lt;/td&gt;
&lt;td class="org-right"&gt;19000912&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;12264BC&lt;/td&gt;
&lt;td class="org-right"&gt;19031228&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;122D9D9&lt;/td&gt;
&lt;td class="org-right"&gt;19061209&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;123C1EF&lt;/td&gt;
&lt;td class="org-right"&gt;19120623&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;1245D6E&lt;/td&gt;
&lt;td class="org-right"&gt;19160430&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;127B78E&lt;/td&gt;
&lt;td class="org-right"&gt;19380110&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;1282FDD&lt;/td&gt;
&lt;td class="org-right"&gt;19410909&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;12853C5&lt;/td&gt;
&lt;td class="org-right"&gt;19420101&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;1287B3C&lt;/td&gt;
&lt;td class="org-right"&gt;19430204&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;1298F0B&lt;/td&gt;
&lt;td class="org-right"&gt;19500811&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;12A024C&lt;/td&gt;
&lt;td class="org-right"&gt;19530316&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;12A5190&lt;/td&gt;
&lt;td class="org-right"&gt;19550608&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;12C76DC&lt;/td&gt;
&lt;td class="org-right"&gt;19691228&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The #+TBLFM: is &lt;code&gt;$1='(identity remote(clues,@@#$2))::$2='(string-to-number $1 16)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is where I went down a blind alley. The fact all they all had the
top bit set made me think that Dave was giving a hint to the purpose
of the hex number in the way many &lt;a href="https://en.wikipedia.org/wiki/Cryptic_crossword"&gt;cryptic crosswords&lt;/a&gt; do (I know he is
a fan of these). However the more obvious answer is that everyone in
the list was born in the last millennium.&lt;/p&gt;
&lt;h1&gt;Looking up Birth Dates&lt;/h1&gt;
&lt;p&gt;Now I could go through all the names by hand and look up their birth
dates but as we are automating things perhaps we can use computers for
what they are good at. Unfortunately there isn't a simple web-api for
looking up this stuff. However there is a project called &lt;a href="http://wiki.dbpedia.org/about"&gt;DBpedia&lt;/a&gt; which
takes Wikipedia's data and attempts to make it semantically useful. We
can query this using a semantic query language called SparQL. If only
I could call it from Emacs&amp;#x2026;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;select distinct ?birthDate {
  dbr:$name dbo:birthDate|dbp:birthDate ?birthDate
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So calling with &lt;code&gt;:var name="Ada_Lovelace"&lt;/code&gt; we get&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;quot;birthDate&amp;quot;
1815-12-10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Of course it shouldn't be a surprise this exists. And in what I hope
is a growing trend &lt;a href="https://github.com/ljos/sparql-mode"&gt;sparql-mode&lt;/a&gt; supports org-mode out of the box. The
$name in the snippet is expanded from the passed in variables to the
function. This makes it a general purpose lookup function we can use
for all our names.&lt;/p&gt;
&lt;p&gt;There are a couple of wrinkles. We need to format the name we are
looking up with underscores to make a valid URL. Also the output spits
out a header and possible multiple birth dates. We can solve this with
a little wrapper function. It also introduces some rate limiting so we
don't smash DBpedia's public SPARQL endpoint.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;let&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;#39;((&lt;/span&gt;&lt;span class="s"&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Von&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;von&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;eval&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;car&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;string&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;(org-sbe get-dob (name $&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s"&gt;%s&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s"&gt;))&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;))))))&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;string&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;regexp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cdr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;))))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Calling with &lt;code&gt;:var name="Ada Lovelace"&lt;/code&gt; we get&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;18151210&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Full Solution&lt;/h1&gt;
&lt;p&gt;So now we know what we are doing we need to solve all the puzzles and
lookup the data. Fortunately org-mode's tables are fully functional
spreadsheets except they are not limited to simple transformations.
Each formula can be a fully realised bit of elisp, calling other
source blocks as needed.&lt;/p&gt;
&lt;table id="orgb836df6" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col  class="org-left" /&gt;

&lt;col  class="org-left" /&gt;

&lt;col  class="org-right" /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Clue&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Solution&lt;/th&gt;
&lt;th scope="col" class="org-right"&gt;DOB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Herbal Cabbages&lt;/td&gt;
&lt;td class="org-left"&gt;Charles Babbage&lt;/td&gt;
&lt;td class="org-right"&gt;17911226&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Be Google Roe&lt;/td&gt;
&lt;td class="org-left"&gt;George Boole&lt;/td&gt;
&lt;td class="org-right"&gt;18151102&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Lava Ale Code&lt;/td&gt;
&lt;td class="org-left"&gt;Ada Lovelace&lt;/td&gt;
&lt;td class="org-right"&gt;18151210&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;A Cherry Skull&lt;/td&gt;
&lt;td class="org-left"&gt;Haskell Curry&lt;/td&gt;
&lt;td class="org-right"&gt;19000912&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Jan Venom Hon Nun&lt;/td&gt;
&lt;td class="org-left"&gt;John Von Neumann&lt;/td&gt;
&lt;td class="org-right"&gt;19031228&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Pope Charger&lt;/td&gt;
&lt;td class="org-left"&gt;Grace Hopper&lt;/td&gt;
&lt;td class="org-right"&gt;19061209&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Natural Gin&lt;/td&gt;
&lt;td class="org-left"&gt;Alan Turing&lt;/td&gt;
&lt;td class="org-right"&gt;19120623&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Each Noun Lands&lt;/td&gt;
&lt;td class="org-left"&gt;Claude Shannon&lt;/td&gt;
&lt;td class="org-right"&gt;19160430&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Dolt And Hunk&lt;/td&gt;
&lt;td class="org-left"&gt;Donald Knuth&lt;/td&gt;
&lt;td class="org-right"&gt;19380110&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Is Enriched Tin&lt;/td&gt;
&lt;td class="org-left"&gt;Dennis Ritchie&lt;/td&gt;
&lt;td class="org-right"&gt;19410909&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Bran Hearing Kin&lt;/td&gt;
&lt;td class="org-left"&gt;Brian Kernighan&lt;/td&gt;
&lt;td class="org-right"&gt;19420101&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Monk Hops Net&lt;/td&gt;
&lt;td class="org-left"&gt;Ken Thompson&lt;/td&gt;
&lt;td class="org-right"&gt;19430204&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Wave Zone Kits&lt;/td&gt;
&lt;td class="org-left"&gt;Steve Wozniak&lt;/td&gt;
&lt;td class="org-right"&gt;19500811&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Handcars All Trim&lt;/td&gt;
&lt;td class="org-left"&gt;Richard Stallman&lt;/td&gt;
&lt;td class="org-right"&gt;19530316&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Enter Slim Beer&lt;/td&gt;
&lt;td class="org-left"&gt;Tim Berners-Lee&lt;/td&gt;
&lt;td class="org-right"&gt;19550608&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td class="org-left"&gt;Avid Null Sorts&lt;/td&gt;
&lt;td class="org-left"&gt;Linus Torvalds&lt;/td&gt;
&lt;td class="org-right"&gt;19691228&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The #+TBLFM: is &lt;code&gt;$1='(identity remote(clues,@@#$1))::$2='(org-sbe solve-anagram (anagram $$1))::$3='(org-sbe frob-dob (name $$2))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The hex numbers are helpfully sorted so as long as we sort the clues
table by the looked up date of birth using &lt;em&gt;M-x org-table-sort-lines&lt;/em&gt;
we are good to go.&lt;/p&gt;</content><category term="geek"></category><category term="connect"></category><category term="emacs"></category><category term="linaro"></category><category term="org-mode"></category></entry></feed>