<?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>Alfredo Beaumont</title>
	<atom:link href="http://alfredobeaumont.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://alfredobeaumont.org</link>
	<description>blog</description>
	<lastBuildDate>Fri, 30 Sep 2011 17:36:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>ToAndFro in Factor and Common Lisp</title>
		<link>http://alfredobeaumont.org/blog/2011/09/30/toandfro-in-factor-and-common-lisp/</link>
		<comments>http://alfredobeaumont.org/blog/2011/09/30/toandfro-in-factor-and-common-lisp/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 17:34:32 +0000</pubDate>
		<dc:creator>Alfredo Beaumont</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[common lisp]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[factor]]></category>
		<category><![CDATA[puzzles]]></category>
		<category><![CDATA[spoj]]></category>

		<guid isPermaLink="false">http://alfredobeaumont.org/?p=108</guid>
		<description><![CDATA[Taking a look at SPOJ online judge, I reached ToAndFro problem and thought how easy it was to solve it in Factor. The problem states the following: Mo and Larry have devised a way of encrypting messages. They first decide &#8230; <a href="http://alfredobeaumont.org/blog/2011/09/30/toandfro-in-factor-and-common-lisp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Taking a look at <a href="http://www.spoj.pl">SPOJ</a> online judge, I reached <a href="http://www.spoj.pl/problems/TOANDFRO/">ToAndFro</a> problem and thought how easy it was to solve it in Factor. The problem states the following:</p>
<p><em>Mo and Larry have devised a way of encrypting messages. They first decide secretly on the number of columns and write the message (letters only) down the columns, padding with extra random letters so as to make a rectangular array of letters. For example, if the message is “There’s no place like home on a snowy night” and there are five columns, Mo would write down</em><br />
<code><br />
t o i o y<br />
h p k n n<br />
e l e a i<br />
r a h s g<br />
e c o n h<br />
s e m o t<br />
n l e w x<br />
</code></p>
<p><em>Note that Mo includes only letters and writes them all in lower case. In this example, Mo used the character ‘x’ to pad the message out to make a rectangle, although he could have used any letter. Mo then sends the message to Larry by writing the letters in each row, alternating left-to-right and right-to-left. So, the above would be encrypted as</em><br />
<code><br />
toioynnkpheleaigshareconhtomesnlewx<br />
</code><br />
<em>Your job is to recover for Larry the original message (along with any extra padding letters) from the encrypted one.</em></p>
<p>Summarizing, we basically need to convert the string back to the character matrix, reverse every odd row, transpose the matrix and build the string again. This is pretty easy to do in factor:</p>
<pre><span class="MARKUP">: toandfro</span> <span class="COMMENT3">( </span><span class="COMMENT4">sequence</span><span class="COMMENT4"> </span><span class="COMMENT4">n</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">string</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    group <span class="OPERATOR">[</span> odd? <span class="OPERATOR">[</span> reverse <span class="OPERATOR">]</span> when <span class="OPERATOR">]</span> map-index
    flip concat &gt;string <span class="MARKUP">;</span></pre>
<pre>
<span class="COMMENT3">( </span><span class="COMMENT4">scratchpad</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span> <span class="LITERAL1">"</span><span class="LITERAL1">toioynnkpheleaigshareconhtomesnlewx</span><span class="LITERAL1">"</span> <span class="DIGIT">5</span> toandfro

--- Data stack:
<span class="LITERAL1">"</span><span class="LITERAL1">theresnoplacelikehomeonasnowynightx</span><span class="LITERAL1">"</span></pre>
<p>Unfortunately, even if SPOJ provides a wide programming language support, it doesn&#8217;t support Factor. Factor has usually been compared to lisp, so I decided to translate the above code to Common Lisp and see how well it fits. This is the equivalent Common Lisp code:</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span>string <span style="color: #66cc66;">&#40;</span>concat <span style="color: #66cc66;">&#40;</span>flip <span style="color: #66cc66;">&#40;</span>map-index #'<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>s n<span style="color: #66cc66;">&#41;</span>
                                      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">oddp</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> s<span style="color: #66cc66;">&#41;</span> s<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                                  <span style="color: #66cc66;">&#40;</span>group sequence n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000;">&quot;theresnoplacelikehomeonasnowynightx&quot;</span></pre></div></div>

<p>For this to work, we should define some functions used in this sentence, since Common Lisp doesn&#8217;t include them in its standard library:</p>
<p>group:</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> group <span style="color: #66cc66;">&#40;</span>sequence n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>loop for i from <span style="color: #cc66cc;">0</span> to <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span>/ <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> sequence<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    collect <span style="color: #66cc66;">&#40;</span>subseq sequence <span style="color: #66cc66;">&#40;</span>* i n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>+ <span style="color: #66cc66;">&#40;</span>* i n<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span>group <span style="color: #ff0000;">&quot;toioynnkpheleaigshareconhtomesnlewx&quot;</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">=&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;toioy&quot;</span> <span style="color: #ff0000;">&quot;nnkph&quot;</span> <span style="color: #ff0000;">&quot;eleai&quot;</span> <span style="color: #ff0000;">&quot;gshar&quot;</span> <span style="color: #ff0000;">&quot;econh&quot;</span> <span style="color: #ff0000;">&quot;tomes&quot;</span> <span style="color: #ff0000;">&quot;nlewx&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>map-index:</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> map-index <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">function</span> <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>labels <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>m-i <span style="color: #66cc66;">&#40;</span>fn <span style="color: #b1b100;">l</span> i<span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span>unless <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">apply</span> fn <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> 
                      <span style="color: #66cc66;">&#40;</span>m-i fn <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>+ i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>m-i <span style="color: #b1b100;">function</span> <span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span>map-index #'<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>s n<span style="color: #66cc66;">&#41;</span>
               <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">oddp</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> s<span style="color: #66cc66;">&#41;</span> s<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> 
           '<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;toioy&quot;</span> <span style="color: #ff0000;">&quot;nnkph&quot;</span> <span style="color: #ff0000;">&quot;eleai&quot;</span> <span style="color: #ff0000;">&quot;gshar&quot;</span> <span style="color: #ff0000;">&quot;econh&quot;</span> <span style="color: #ff0000;">&quot;tomes&quot;</span> <span style="color: #ff0000;">&quot;nlewx&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">=&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;toioy&quot;</span> <span style="color: #ff0000;">&quot;hpknn&quot;</span> <span style="color: #ff0000;">&quot;eleai&quot;</span> <span style="color: #ff0000;">&quot;rahsg&quot;</span> <span style="color: #ff0000;">&quot;econh&quot;</span> <span style="color: #ff0000;">&quot;semot&quot;</span> <span style="color: #ff0000;">&quot;nlewx&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>flip:</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> flip <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">when</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>loop for i from <span style="color: #cc66cc;">0</span> to <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
       collect <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span> #'<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>seq<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>elt seq i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span>flip '<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;toioy&quot;</span> <span style="color: #ff0000;">&quot;hpknn&quot;</span> <span style="color: #ff0000;">&quot;eleai&quot;</span> <span style="color: #ff0000;">&quot;rahsg&quot;</span> <span style="color: #ff0000;">&quot;econh&quot;</span> <span style="color: #ff0000;">&quot;semot&quot;</span> <span style="color: #ff0000;">&quot;nlewx&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">=&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>#\t #\h #\e #\r #\e #\s #\n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>#\o #\p #\<span style="color: #b1b100;">l</span> #\a #\c #\e #\<span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>#\i #\k #\e #\h #\o #\m #\e<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>#\o #\n #\a #\s #\n #\o #\w<span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>#\y #\n #\i #\g #\h #\t #\x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>concat:</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> concat <span style="color: #66cc66;">&#40;</span>sequence<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>reduce #'<span style="color: #b1b100;">append</span> sequence<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span>concat '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>#\t #\h #\e #\r #\e #\s #\n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>#\o #\p #\<span style="color: #b1b100;">l</span> #\a #\c #\e #\<span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>#\i #\k #\e #\h #\o #\m #\e<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>#\o #\n #\a #\s #\n #\o #\w<span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>#\y #\n #\i #\g #\h #\t #\x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">=&gt;</span> <span style="color: #66cc66;">&#40;</span>#\t #\h #\e #\r #\e #\s #\n #\o #\p #\<span style="color: #b1b100;">l</span> #\a #\c #\e #\<span style="color: #b1b100;">l</span> #\i #\k #\e #\h #\o
 #\m #\e #\o #\n #\a #\s #\n #\o #\w #\y #\n #\i #\g #\h #\t #\x<span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>&gt;string:</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> <span style="color: #66cc66;">&gt;</span>string <span style="color: #66cc66;">&#40;</span>sequence<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>concatenate 'string sequence<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span>string '<span style="color: #66cc66;">&#40;</span>#\t #\h #\e #\r #\e #\s #\n #\o #\p #\<span style="color: #b1b100;">l</span> #\a #\c #\e #\<span style="color: #b1b100;">l</span> #\i #\k #\e #\h #\o
 #\m #\e #\o #\n #\a #\s #\n #\o #\w #\y #\n #\i #\g #\h #\t #\x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000;">&quot;theresnoplacelikehomeonasnowynightx&quot;</span></pre></div></div>

<p>Joining it all we have:</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:"Courier 10 Pitch", Courier, monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> group <span style="color: #66cc66;">&#40;</span>sequence n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>loop for i from <span style="color: #cc66cc;">0</span> to <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span>/ <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> sequence<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
       collect <span style="color: #66cc66;">&#40;</span>subseq sequence <span style="color: #66cc66;">&#40;</span>* i n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>+ <span style="color: #66cc66;">&#40;</span>* i n<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> map-index <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">function</span> <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>labels <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>m-i <span style="color: #66cc66;">&#40;</span>fn <span style="color: #b1b100;">l</span> i<span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span>unless <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">apply</span> fn <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> 
                      <span style="color: #66cc66;">&#40;</span>m-i fn <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>+ i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>m-i <span style="color: #b1b100;">function</span> <span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> flip <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">when</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>loop for i from <span style="color: #cc66cc;">0</span> to <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
       collect <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span> #'<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>seq<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>elt seq i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> concat <span style="color: #66cc66;">&#40;</span>sequence<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>reduce #'<span style="color: #b1b100;">append</span> sequence<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> <span style="color: #66cc66;">&gt;</span>string <span style="color: #66cc66;">&#40;</span>sequence<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>concatenate 'string sequence<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> toandfro <span style="color: #66cc66;">&#40;</span>sequence n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span>string <span style="color: #66cc66;">&#40;</span>concat <span style="color: #66cc66;">&#40;</span>flip <span style="color: #66cc66;">&#40;</span>map-index #'<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>s n<span style="color: #66cc66;">&#41;</span>
                                        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">oddp</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> s<span style="color: #66cc66;">&#41;</span> s<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                                    <span style="color: #66cc66;">&#40;</span>group sequence n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>Some of the functions above require a list as a parameter instead of a sequence, yet it could be easily modified to support sequences in a more generic form.</p>
<p>I wonder how an independent Common Lisp implementation would compare to the above.</p>
]]></content:encoded>
			<wfw:commentRss>http://alfredobeaumont.org/blog/2011/09/30/toandfro-in-factor-and-common-lisp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook&#8217;s Double Squares in Factor</title>
		<link>http://alfredobeaumont.org/blog/2011/01/20/facebooks-double-squares-in-factor/</link>
		<comments>http://alfredobeaumont.org/blog/2011/01/20/facebooks-double-squares-in-factor/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 20:19:47 +0000</pubDate>
		<dc:creator>Alfredo Beaumont</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[factor]]></category>
		<category><![CDATA[puzzles]]></category>

		<guid isPermaLink="false">http://alfredobeaumont.org/?p=74</guid>
		<description><![CDATA[Facebook has recently launched a puzzle programming contest (aka Facebook Hacker Cup). Since I always liked puzzles (I had already solved some of these puzzles -I may talk about them in another post-), I decided to give it a try. &#8230; <a href="http://alfredobeaumont.org/blog/2011/01/20/facebooks-double-squares-in-factor/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Facebook has recently launched a puzzle programming contest (aka <a href="http://www.facebook.com/hackercup" target="_blank">Facebook Hacker Cup</a>). Since I always liked puzzles (I had already solved some of <a title="Engineering Puzzles" href="http://www.facebook.com/careers/puzzles.php" target="_blank">these puzzles</a> -I may talk about them in another post-), I decided to give it a try. With around 100.000 participants, I&#8217;m neither clever nor fast enough to win and, unlike in the puzzles, there&#8217;s no limitation on programming languages to use, so I thought it would be a good opportunity to practice with my favourite languages instead of trying with those I&#8217;m more fluent with.<br />
The contest is divided in different rounds, the first one consisted in 3 puzzles. The first one is entitled Double Squares and says as follows:</p>
<p><code>A double-square number is an integer X which can be expressed as the sum of two perfect squares. For example, 10 is a double-square because 10 = 3<sup>2</sup> + 1<sup>2</sup>. Your task in this problem is, given X, determine the number of ways in which it can be written as the sum of two squares. For example, 10 can only be written as 3<sup>2</sup> + 1<sup>2</sup> (we don't count 1<sup>2</sup> + 3<sup>2</sup> as being different). On the other hand, 25 can be written as 5<sup>2</sup> + 0<sup>2</sup> or as 4<sup>2</sup> + 3<sup>2</sup>.</code></p>
<p><code><strong>Input</strong><br />
You should first read an integer N, the number of test cases. The next N lines will contain N values of X.</code></p>
<p><code><strong>Constraints</strong><br />
0 ≤ X ≤ 2147483647<br />
1 ≤ N ≤ 100</p>
<p><strong>Output</strong><br />
For each value of X, you should output the number of ways to write X as the sum of two squares.</p>
<p><strong>Example input</strong></p>
<pre>5
10
25
3
0
1</pre>
<p><strong>Example output</strong></p>
<pre>1
2
0
1
1</pre>
<p></code></p>
<p>So basically this means that we need to check for each number n how many distinct x, y combinations are to satisfy: y<sup>2</sup> + z<sup>2</sup> = x</p>
<p>I decided to implement it in Factor. Since the program is going to be a script that parses a file whose name is provided as a command line argument, let&#8217;s begin with the boring stuff:</p>
<pre><span class="MARKUP">: (double-squares)</span> <span class="COMMENT3">( </span><span class="COMMENT4">path</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    utf8 file-lines <span class="DIGIT">1</span> tail <span class="OPERATOR">[</span>
        string&gt;number count
    <span class="OPERATOR">]</span> each <span class="MARKUP">;</span>

<span class="MARKUP">: double-squares</span> <span class="COMMENT3">( </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    command-line get first (double-squares) <span class="MARKUP">;</span></pre>
<p><code>(double-squares)</code> parses the input file, removes the first line (which provides the number of test cases) and counts the amount of double squares (with the yet to be defined word <code>count</code>).</p>
<p><code>double-squares</code> takes care of command line argument parsing and calls <code>(double-squares)</code>. This separation helps us during the development process, since we can call <code>(double-squares)</code> from the listener and use <code>double-squares</code> as a mere wrapper for the script.</p>
<p>So, now that we have the boring stuff done, let&#8217;s solve the core of the problem and implement <code>count</code>. We&#8217;ll use a dynamic variable <code>counter</code> to make the code more readable:</p>
<pre>SYMBOL: counter
<span class="MARKUP">: count</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    <span class="DIGIT">0</span> counter set
    <span class="OPERATOR">[</span> <span class="DIGIT">2</span> / floor &gt;integer <span class="DIGIT">1</span> + <span class="OPERATOR">]</span> keep <span class="OPERATOR">[</span>
        check-double
    <span class="OPERATOR">]</span> curry each-integer
    counter get . <span class="MARKUP">;</span></pre>
<p>What happens here? The counter is initialized, and we loop from 0 to x/2 to set the value of y<sup>2</sup> in y<sup>2</sup> + z<sup>2</sup> = x. So if we know both x and y, we just need to check whether both y = sqrt(y<sup>2</sup>) and z = sqrt(x &#8211; y<sup>2</sup>) are natural numbers. That’s exactly the task of <code>check-double</code>:</p>
<pre><span class="MARKUP">: root?</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">?</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    sqrt dup &gt;fixnum number= <span class="MARKUP">;</span> inline

<span class="MARKUP">: check-double</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT4">y</span><span class="COMMENT4"> </span><span class="COMMENT4">z</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">w</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    <span class="OPERATOR">[</span> drop root? <span class="OPERATOR">]</span> <span class="OPERATOR">[</span> swap - root? <span class="OPERATOR">]</span> 2bi and <span class="OPERATOR">[</span>
        counter inc
    <span class="OPERATOR">]</span> when</pre>
<p>As you can see, <code>check-double</code> also increments the counter in case a double square is found. The loop iterates in range [0,x/2] and not in range [0,x] since 3<sup>2</sup> + 1<sup>2</sup> and 1<sup>2</sup> + 3<sup>2</sup> don&#8217;t count as different double squares.</p>
<p>So, we&#8217;re done. Let&#8217;s try our code:</p>
<pre>$ ./double-squares.factor input.txt
1
2
0
1
1</pre>
<p>Everything seems ok, right? Well, that&#8217;s what I thought at least. So I downloaded input file, ran the script again and waited… and waited… and waited… until I decided it was enough and took a look. The input files had some big numbers and the script was taking forever. The reason? I was looping for each integer instead of each valid root, which increases the number of iterations exponentially… how lame. So let&#8217;s fix the affected words:</p>
<pre><span class="MARKUP">: check-double</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT4">y</span><span class="COMMENT4"> </span><span class="COMMENT4">z</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">w</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    swap sq - root? <span class="OPERATOR">[</span> counter inc <span class="OPERATOR">]</span> when <span class="MARKUP">;</span> inline

<span class="MARKUP">: count</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    <span class="DIGIT">0</span> counter set
    <span class="OPERATOR">[</span> <span class="DIGIT">2</span> / sqrt floor &gt;integer <span class="DIGIT">1</span> + <span class="OPERATOR">]</span> keep <span class="OPERATOR">[</span>
        check-double
    <span class="OPERATOR">]</span> curry each-integer
    counter get . <span class="MARKUP">;</span></pre>
<p>Now it works fine… unfortunately (for me) facebook guys decided that a 6&#8242; deadline from input file downloading to output submission was a good idea, so i failed this one due to timeout.</p>
<p>Here you have the whole program:</p>
<pre><span class="COMMENT2">#! </span><span class="COMMENT1">/usr/bin/env</span><span class="COMMENT1"> </span><span class="COMMENT1">factor</span>
<span class="MARKUP">USING: </span><span class="LITERAL2">kernel</span><span class="LITERAL2"> </span><span class="LITERAL2">math</span><span class="LITERAL2"> </span><span class="LITERAL2">math.functions</span><span class="LITERAL2"> </span><span class="LITERAL2">command-line</span><span class="LITERAL2"> </span><span class="LITERAL2">namespaces</span><span class="LITERAL2"> </span><span class="LITERAL2">sequences</span>
<span class="LITERAL2">io.encodings.utf8</span><span class="LITERAL2"> </span><span class="LITERAL2">io</span><span class="LITERAL2"> </span><span class="LITERAL2">io.files</span><span class="LITERAL2"> </span><span class="LITERAL2">prettyprint</span><span class="LITERAL2"> </span><span class="LITERAL2">math.parser</span><span class="LITERAL2"> </span><span class="MARKUP">;</span>
<span class="MARKUP">IN: double-squares</span>
SYMBOL: counter

<span class="MARKUP">: root?</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">?</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    sqrt dup &gt;fixnum number= <span class="MARKUP">;</span> inline

<span class="MARKUP">: check-double</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT4">y</span><span class="COMMENT4"> </span><span class="COMMENT4">z</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">w</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    swap sq - root? <span class="OPERATOR">[</span> counter inc <span class="OPERATOR">]</span> when <span class="MARKUP">;</span> inline

<span class="MARKUP">: count</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    <span class="DIGIT">0</span> counter set
    <span class="OPERATOR">[</span> <span class="DIGIT">2</span> / sqrt floor <span class="DIGIT">1</span> + <span class="OPERATOR">]</span> keep <span class="OPERATOR">[</span>
        check-double
    <span class="OPERATOR">]</span> curry each-integer
    counter get . <span class="MARKUP">;</span>

<span class="MARKUP">: (double-squares)</span> <span class="COMMENT3">( </span><span class="COMMENT4">path</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    utf8 file-lines <span class="DIGIT">1</span> tail <span class="OPERATOR">[</span>
        string&gt;number count
    <span class="OPERATOR">]</span> each <span class="MARKUP">;</span>

<span class="MARKUP">: double-squares</span> <span class="COMMENT3">( </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    command-line get first (double-squares) <span class="MARKUP">;</span>

double-squares</pre>
]]></content:encoded>
			<wfw:commentRss>http://alfredobeaumont.org/blog/2011/01/20/facebooks-double-squares-in-factor/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Counting primes in Factor</title>
		<link>http://alfredobeaumont.org/blog/2011/01/12/counting-primes-in-factor/</link>
		<comments>http://alfredobeaumont.org/blog/2011/01/12/counting-primes-in-factor/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 11:00:30 +0000</pubDate>
		<dc:creator>Alfredo Beaumont</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[factor]]></category>

		<guid isPermaLink="false">http://alfredobeaumont.org/?p=38</guid>
		<description><![CDATA[Last week Programming Praxis proposed to write two functions: prime-counting(n) function, that returns the number of primes to n nth-prime(n) function, that returns the nth prime number A day before Samuel Tardieu wrote an article about Positional factoring which included information about the math.primes &#8230; <a href="http://alfredobeaumont.org/blog/2011/01/12/counting-primes-in-factor/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last week <a href="http://programmingpraxis.com/2011/01/07/counting-primes/">Programming Praxis</a> proposed to write two functions:</p>
<ul>
<li><code>prime-counting(n)</code> function, that returns the number of primes to <code>n</code></li>
<li><code>nth-prime(n)</code> function, that returns the nth prime number</li>
</ul>
<p>A day before Samuel Tardieu wrote an article about <a href="http://www.rfc1149.net/blog/2011/01/06/positional-factoring/">Positional factoring</a> which included information about the <a href="http://docs.factorcode.org/content/vocab-math.primes.html">math.primes</a> vocabulary in <a href="http://factorcode.org">Factor</a>. He also included a solution on <a href="http://www.jsoftware.com/">J</a> which is also used to provide a solution to the Programming Praxis problem (see the <a href="http://programmingpraxis.com/2011/01/07/counting-primes/#comment-2279">first comment</a>). So I decided to write an implementation in Factor, which is a very easy task.</p>
<h3>Counting primes</h3>
<p><code>primes-upto</code> takes a number and returns a sequence of prime numbers up to that one, so we just need to count the sequence length to get intended result:</p>
<pre><span class="MARKUP">USING: </span><span class="LITERAL2">sequences</span><span class="LITERAL2"> </span><span class="LITERAL2">math.primes</span><span class="LITERAL2"> </span><span class="MARKUP">;</span>
<span class="MARKUP">: prime-counting</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">y</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    primes-upto length <span class="MARKUP">;</span></pre>
<p>Testing it, works as expected:</p>
<pre>( scratchpad ) 100 prime-counting .
25
( scratchpad ) { 100 101 102 103 104 } [ prime-counting ] map .
{ 25 26 26 27 27 }</pre>
<h3>Nth prime</h3>
<p>This problem is a bit more complex, yet Factor provides a great solution in <a href="http://docs.factorcode.org/content/vocab-math.primes.lists.html">math.primes.lists</a> making use of <a href="http://en.wikipedia.org/wiki/Lazy_evaluation">Lazy</a> lists: <code>lprimes</code> provides an infinite stream of prime numbers, so we just need to take as many prime numbers as needed and return the last:</p>
<pre><span class="MARKUP">USING: </span><span class="LITERAL2">sequences</span><span class="LITERAL2"> </span><span class="LITERAL2">math.primes</span><span class="LITERAL2"> </span><span class="LITERAL2">lists</span><span class="LITERAL2"> </span><span class="LITERAL2">lists.lazy</span><span class="LITERAL2"> </span><span class="LITERAL2">math.primes.lists</span><span class="LITERAL2"> </span><span class="MARKUP">;</span>
<span class="MARKUP">: nth-prime</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">y</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    lprimes ltake list&gt;array last <span class="MARKUP">;</span></pre>
<p>Testing it, works as expected:</p>
<pre><span class="COMMENT3">( </span><span class="COMMENT4">scratchpad</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span> <span class="DIGIT">25</span> nth-prime .
<span class="DIGIT">97</span>
<span class="COMMENT3">( </span><span class="COMMENT4">scratchpad</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span> <span class="OPERATOR">{</span> <span class="DIGIT">24</span> <span class="DIGIT">25</span> <span class="DIGIT">26</span> <span class="DIGIT">27</span> <span class="DIGIT">28</span> <span class="OPERATOR">}</span> <span class="OPERATOR">[</span> nth-prime <span class="OPERATOR">]</span> map .
<span class="OPERATOR">{</span> <span class="DIGIT">89</span> <span class="DIGIT">97</span> <span class="DIGIT">101</span> <span class="DIGIT">103</span> <span class="DIGIT">107</span> <span class="OPERATOR">}</span></pre>
<p>And that’s pretty much about it. Here you have the whole counting-primes vocabulary:</p>
<pre><span class="MARKUP">USING: </span><span class="LITERAL2">sequences</span><span class="LITERAL2"> </span><span class="LITERAL2">math.primes</span><span class="LITERAL2"> </span><span class="LITERAL2">lists</span><span class="LITERAL2"> </span><span class="LITERAL2">lists.lazy</span><span class="LITERAL2"> </span><span class="LITERAL2">math.primes.lists</span><span class="LITERAL2"> </span><span class="MARKUP">;</span>
<span class="MARKUP">IN: counting-primes</span>
<span class="MARKUP">: prime-counting</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">y</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    primes-upto length <span class="MARKUP">;</span>

<span class="MARKUP">: nth-prime</span> <span class="COMMENT3">( </span><span class="COMMENT4">x</span><span class="COMMENT4"> </span><span class="COMMENT3">--</span><span class="COMMENT4"> </span><span class="COMMENT4">y</span><span class="COMMENT4"> </span><span class="COMMENT3">)</span>
    lprimes ltake list&gt;array last <span class="MARKUP">;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://alfredobeaumont.org/blog/2011/01/12/counting-primes-in-factor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>akademy-es 2010</title>
		<link>http://alfredobeaumont.org/blog/2010/05/05/akademy-es-2010/</link>
		<comments>http://alfredobeaumont.org/blog/2010/05/05/akademy-es-2010/#comments</comments>
		<pubDate>Wed, 05 May 2010 14:04:53 +0000</pubDate>
		<dc:creator>Alfredo Beaumont</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[akademy-es]]></category>
		<category><![CDATA[clutter]]></category>
		<category><![CDATA[eu]]></category>
		<category><![CDATA[kde]]></category>

		<guid isPermaLink="false">http://alfredobeaumont.org/?p=6</guid>
		<description><![CDATA[﻿Asteburu honetan akademy-es 2010 ospatzen da, Bilboko Ingeniaritza Goi Eskola Teknikoan. Akademy-es estatu mailan egiten den KDEri buruzko kongresua da. Hitzaldi teknikoaz eta ez horren teknikoaz beteta egongo da, egitarauan ikus daitekeen moduan. Nik pare bat emango ditut, bata clutter liburutegiari buruz (gaztelaniaz) KDE &#8230; <a href="http://alfredobeaumont.org/blog/2010/05/05/akademy-es-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>﻿Asteburu honetan <a href="http://kde-espana.es/akademy-es2010/doku.php?id=:eu:start">akademy-es 2010</a> ospatzen da, <a href="http://www.ingeniaritza-bilbao.ehu.es/p224-home/eu/">Bilboko Ingeniaritza Goi Eskola Teknikoan</a>. Akademy-es estatu mailan egiten den KDEri buruzko kongresua da. Hitzaldi teknikoaz eta ez horren teknikoaz beteta egongo da, <a href="http://kde-espana.es/akademy-es2010/doku.php?id=:eu:programa">egitarauan</a> ikus daitekeen moduan. Nik pare bat emango ditut, bata <a href="http://www.clutter-project.org/">clutter</a> liburutegiari buruz (gaztelaniaz) KDE euskaratzeari buruz (euskaraz)</p>
<p>Gertaera berezia izango da niretzat hainbat arrazoiengatik. Alde batetik, ikasle, ikertzaile eta irakasle moduan ibilitako Ingenieritza Eskolara itzuliko naiz, nahiko denbora pasa ostean.</p>
<p>Bestalde, pozten nau <a href="http://itsas.ehu.es/">ITSAS</a> hartu duen indarra ikusteak, eta nola lagundu duten antolaketa lanetan hainbat ikasle, irakasle eta baita unibertsitateko beste langile (IISIZ, etab.).</p>
<p>Orain hilabeteak pasa ondoren dana ia prest dago, antolaketan parte hartu duten guztiei zorionak eta eskerrak eman baino ez (batez ere, <a href="http://www.danitxu.com/">Dani errudun nagusiari</a>). Bertaratzea baino ez da falta, anima zaitezte!</p>
]]></content:encoded>
			<wfw:commentRss>http://alfredobeaumont.org/blog/2010/05/05/akademy-es-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Up &amp; running again</title>
		<link>http://alfredobeaumont.org/blog/2009/04/15/up-running-again/</link>
		<comments>http://alfredobeaumont.org/blog/2009/04/15/up-running-again/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 14:02:27 +0000</pubDate>
		<dc:creator>Alfredo Beaumont</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>

		<guid isPermaLink="false">http://alfredobeaumont.org/?p=4</guid>
		<description><![CDATA[It&#8217;s been a long time since my site went down. My hosting provider lost not only my site but also my database, with all the blog data with it. I even had a backup contracted, which allowed me to notice &#8230; <a href="http://alfredobeaumont.org/blog/2009/04/15/up-running-again/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a long time since my site went down. My hosting provider lost not only my site but also my database, with all the blog data with it. I even had a backup contracted, which allowed me to notice they weren&#8217;t been done properly&#8230;</p>
<p>So, my data is lost, but my site is up again with a new hosting provider. A new time for my blog. This time i expect to be a bit different. I expect to write about more broad topics and probably in different languages. My blog engine now supports tags, so you&#8217;ll be able to select by posts by language if you wish (supposing there&#8217;s someone reading! <img src='http://alfredobeaumont.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> )</p>
]]></content:encoded>
			<wfw:commentRss>http://alfredobeaumont.org/blog/2009/04/15/up-running-again/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

