<?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>Flying memes &#187; Ruby</title>
	<atom:link href="http://sandropaganotti.com/tag/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://sandropaganotti.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 08 Jan 2012 16:00:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Ruby-dlx, le otto regine e le colonne secondarie</title>
		<link>http://sandropaganotti.com/2008/12/16/ruby-dlx-le-otto-regine-e-le-colonne-secondarie/</link>
		<comments>http://sandropaganotti.com/2008/12/16/ruby-dlx-le-otto-regine-e-le-colonne-secondarie/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 21:39:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Algoritmi]]></category>
		<category><![CDATA[8 regine]]></category>
		<category><![CDATA[Dancing Links]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby-dlx]]></category>

		<guid isPermaLink="false">http://sandropaganotti.com/?p=73</guid>
		<description><![CDATA[Eravamo rimasti al seguente quesito: &#8220;Come implementiamo l&#8217;insieme di costrizioni che abbiamo evinto in modo da risolvere il problema delle 8 regine con i Dancing Links ?&#8221; Guardiamo insieme il codice di &#8216;dancing_links_queens.rb&#8216;: def initialize() labels = (1..42).to_a @dla = DancingLinksArena.new(labels,[false]*16 + [true]*26) given_list = [] row_data = [] 8.times do &#124;x&#124; 8.times do &#124;y&#124; [...]]]></description>
			<content:encoded><![CDATA[<p>Eravamo rimasti al seguente quesito: &#8220;Come implementiamo l&#8217;insieme di costrizioni che abbiamo evinto in modo da risolvere il problema delle 8 regine con i Dancing Links ?&#8221;</p>
<p><span id="more-73"></span><br />
Guardiamo insieme il codice di &#8216;<a href="http://github.com/sandropaganotti/ruby-dlx/tree/master/examples/8queens/dancing_links_queens.rb">dancing_links_queens.rb</a>&#8216;:</p>
<pre><code class="ruby">def initialize()
    labels = (1..42).to_a
    @dla = DancingLinksArena.new(labels,[false]*16 + [true]*26)
    given_list = []
    row_data = []

    8.times do |x|
      8.times do |y|
        row_data[0] = x+1
        row_data[1] = y+1 + 8
        row_data &lt;&lt;  ((y+1) - (x+1)) + 7  + 16  unless [-7,7].include?(y - x)
        row_data &lt;&lt;  (x + y + 2) - 2 + 13 + 16  unless [0,14].include?(x + y)
        new_row = @dla.add_initial_row(row_data)
        row_data = []
      end
    end
  end
</code></pre>
<p>Nella prima riga creo un array di 42 elementi ( 8 righe + 8 colonne + 13 diagonali da sx a dx + 13 diagonali da dx a sx ), da notare che considero solo 13 diagonali per direzione ( e non 15 ) perchè 2 contengono un solo elemento. Ognuno di questi 42 elementi diverrà una colonna nella matrice DLX.</p>
<p>Nella seconda riga creo un oggetto &#8216;Dancing Links&#8217; al quale passo l&#8217;array di etichette e un array di 16 &#8216;true&#8217; e 26 &#8216;false&#8217;, questo perchè le prime 16 colonne sono primarie (cioè dovranno contenere esattamente un 1) mentre le ultime 26 sono secondarie (cioè possono contenere o 0 o 1 elemento). Questa scelta è stata dettata dal fatto che mentre per ogni riga e ogni colonna della scacchiera dovrà necessariamente essere presente una regina, lo stesso non è valido per ogni diagonale ( abbiamo solo 8 regine e 26 diagonali&#8230; ).</p>
<p>Ora mi resta solo da impostare per ognuna delle 64 caselle della scacchiera le relative costrizioni ed aggiungerle alla DLA, nel dettaglio per ogni casella devo specificare il &#8216;nome&#8217; (da 1 a 42) dei label corrispondenti alla costrazione che definisce tale casella; facciamo un esempio, per la casella 1-1 questi sono i label interessati:</p>
<ul>
<li>il label 1 che corrisponde alla riga 1</li>
<li>il label 9 che corrisponde alla colonna 1</li>
<li>il label 36 che identifica la diagonale che interessa la casella 1-1</li>
</ul>
<p>Potete visionare e testare l&#8217;esempio completo sul <a href="http://github.com/sandropaganotti/ruby-dlx/tree/master/examples/8queens/dancing_links_queens.rb">mio account di github</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sandropaganotti.com/2008/12/16/ruby-dlx-le-otto-regine-e-le-colonne-secondarie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Risolvere i Sudoku in Ruby con i Dancing Links: ruby-dlx</title>
		<link>http://sandropaganotti.com/2008/12/02/risolvere-i-sudoku-in-ruby-con-i-dancing-links-ruby-dlx/</link>
		<comments>http://sandropaganotti.com/2008/12/02/risolvere-i-sudoku-in-ruby-con-i-dancing-links-ruby-dlx/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 21:40:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Algoritmi]]></category>
		<category><![CDATA[Librerie]]></category>
		<category><![CDATA[Dancing Links]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://sandropaganotti.com/?p=57</guid>
		<description><![CDATA[Ho appena effettuato il commit della prima release funzionante di ruby-dlx. Ruby dlx è una piccola libreria che implementa in Ruby l&#8217;algoritmo dei Dancing Links descritto nel post di settimana scorsa. Per rendere il tutto più utilizzabile ho inoltre allegato alla libreria anche un esempio: un piccolo programma che usando la matrice di costrizione spiegata [...]]]></description>
			<content:encoded><![CDATA[<p>Ho appena effettuato il commit della prima release funzionante di <a href="http://github.com/sandropaganotti/ruby-dlx/tree/master">ruby-dlx</a>. Ruby dlx è una piccola libreria che implementa in Ruby l&#8217;algoritmo dei Dancing Links descritto nel <a href="http://sandropaganotti.com/2008/11/23/knuth-e-i-dancing-links/">post di settimana scorsa</a>.</p>
<p><span id="more-57"></span></p>
<p>Per rendere il tutto più utilizzabile ho inoltre allegato alla libreria anche un esempio: un piccolo programma che usando la matrice di costrizione spiegata <a href="http://sandropaganotti.com/2008/11/14/un-algoritmo-per-creare-sudoku/">nell&#8217;articolo di due settimane fa</a> è capace di risolvere un Sudoku.</p>
<p>Potete trovare questo programma all&#8217;interno del mio repository di GitHub, nella sottocartella <a href="http://github.com/sandropaganotti/ruby-dlx/tree/master/examples/sudoku">examples/sudoku</a>; per eseguirlo lanciate il file sudoku.rb.</p>
<p>La settimana prossima proporrò un tutorial nel quale utilizzeremo questa libreria per risolvere  il famosissimo <a href="http://it.wikipedia.org/wiki/Rompicapo_delle_otto_regine">problema delle otto regine</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sandropaganotti.com/2008/12/02/risolvere-i-sudoku-in-ruby-con-i-dancing-links-ruby-dlx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

