<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Code on Zio Ivan</title>
    <link>https://ivandemarino.me/tags/code/</link>
    <description>Recent content in Code on Zio Ivan</description>
    <generator>Hugo</generator>
    <language>en</language>
    <managingEditor>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</managingEditor>
    <webMaster>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</webMaster>
    <copyright>2004-2026 Ivan De Marino. Licensed under CC BY 4.0</copyright>
    <lastBuildDate>Thu, 02 Jun 2011 12:24:10 +0000</lastBuildDate>
    <atom:link href="https://ivandemarino.me/tags/code/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Coffee-Shit</title>
      <link>https://ivandemarino.me/posts/coffee-shit/</link>
      <pubDate>Thu, 02 Jun 2011 12:24:10 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/coffee-shit/</guid>
      <description>&lt;p&gt;I had it. I&amp;rsquo;m sick and tired of this nonsense. People, Devs in the
specific, should pull their head out of their ass right now and act
like adults.&lt;/p&gt;
&lt;p&gt;What am I on about? I&amp;rsquo;m about re-factored, recompiled languages. Stuff like
CoffeShit (yeah, &lt;a href=&#34;http://jashkenas.github.com/coffee-script/&#34;&gt;Coffee-SHIT&lt;/a&gt; - so what?).&lt;/p&gt;
&lt;h2 id=&#34;who-the-fuck-cares&#34;&gt;Who the fuck cares?&lt;/h2&gt;
&lt;p&gt;Come on people, are we really saying that the grammar of a language
makes you a better/smarter/faster developer? &lt;strong&gt;This is BULLSHIT!&lt;/strong&gt; Grammar has nothing to do with the quality of your code or with your
development speed. NOTHING!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Thinking out aloud: a JavaScript based console?</title>
      <link>https://ivandemarino.me/posts/thinking-out-aloud-a-javascript-based-console/</link>
      <pubDate>Thu, 05 May 2011 21:45:56 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/thinking-out-aloud-a-javascript-based-console/</guid>
      <description>&lt;p&gt;In the last month or two &lt;a href=&#34;https://github.com/detro/phantomjs&#34;&gt;I started contributing&lt;/a&gt; to &lt;a href=&#34;http://www.phantomjs.org&#34;&gt;PhantomJS&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;PhantomJS logo&#34; loading=&#34;lazy&#34; src=&#34;http://www.openclipart.org/image/800px/svg_to_png/lemmling_Cartoon_ghost.png&#34;&gt;
PhantomJS logo&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;PhantomJS is a headless WebKit with JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.
PhantomJS is an optimal solution for headless testing of web-based applications, site scraping, pages capture, SVG renderer, PDF converter and many other use cases.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;The project is really interesting and we are seeing a steady growth in terms of:&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Wordpress to Bloggart</title>
      <link>https://ivandemarino.me/posts/from-wordpress-to-bloggart/</link>
      <pubDate>Mon, 11 Oct 2010 22:32:25 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/from-wordpress-to-bloggart/</guid>
      <description>&lt;p&gt;This post has been in my &amp;ldquo;TODO list&amp;rdquo; long enough. It&amp;rsquo;s time to put it in words.
Let&amp;rsquo;s go!&lt;/p&gt;
&lt;p&gt;As you probably know, &lt;a href=&#34;http://blog.ivandemarino.me/2010/08/30/Hello-World-again&#34;&gt;I decided to give up Wordpress.org&lt;/a&gt;
in favour of &lt;a href=&#34;http://github.com/detro/bloggart&#34;&gt;Bloggart on App Engine&lt;/a&gt;. A great choice so far I must say.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Migration&#34; loading=&#34;lazy&#34; src=&#34;http://farm4.static.flickr.com/3646/3482243965_02d4129590_b.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Migration, a proper one&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;what-i-wanted-to-achieve&#34;&gt;What I wanted to achieve&lt;/h3&gt;
&lt;p&gt;My aim was to migrate more than 6 years of content (posts &lt;em&gt;and&lt;/em&gt; comments) from my previous blog at &lt;strong&gt;detronizator.org&lt;/strong&gt; into a bloggart installation.
Why bloggart? &lt;a href=&#34;http://blog.notdot.net/&#34;&gt;Nick Johnson&lt;/a&gt;, the original author of Bloggart on Appengine,
wrote &lt;a href=&#34;http://blog.notdot.net/2009/10/Writing-a-blog-system-on-App-Engine&#34;&gt;a series of article&lt;/a&gt;
on how to build a nice, little, smart blogging app on App Engine.
At the same time, work on &lt;a href=&#34;http://www.txty.mobi&#34;&gt;txty.mobi&lt;/a&gt; started to get more and more engaging,
making me a lover (and advocate) of &lt;a href=&#34;code.google.com/appengine/&#34;&gt;Google App Engine&lt;/a&gt;.
Plus, I was interested in &amp;ldquo;starting from scratch&amp;rdquo;: &lt;a href=&#34;http://www.wordpress.org&#34;&gt;Wordpress.org&lt;/a&gt;
is a great project, but I just didn&amp;rsquo;t feel it &lt;em&gt;&amp;ldquo;mine enough&amp;rdquo;&lt;/em&gt;. My blog must feel really &lt;em&gt;mine&lt;/em&gt;:
it&amp;rsquo;s about me after all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>gredirector - &#39;HTTP 301&#39; through App Engine</title>
      <link>https://ivandemarino.me/posts/gredirector-http-301-through-app-engine/</link>
      <pubDate>Wed, 29 Sep 2010 00:00:29 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/gredirector-http-301-through-app-engine/</guid>
      <description>&lt;p&gt;When I decided to &lt;a href=&#34;http://blog.ivandemarino.me/2010/08/30/Hello-World-again&#34;&gt;migrate to this new blog&lt;/a&gt; I was confronted by a very important issue: how do I make sure that the (already modest) traffic going to &lt;code&gt;http://www.detronizator.org/*&lt;/code&gt; would be redirected to this new URL?&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://www.hellboundbloggers.com/wp-content/uploads/2009/05/301-Redirection.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;301 Redirection&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I started searching and I found &lt;a href=&#34;http://blog.dantup.com/2010/01/generic-redirection-script-for-google-app-engine&#34;&gt;this article by Danny Tuppeny&lt;/a&gt; on how to use a &lt;a href=&#34;http://code.google.com/appengine/&#34;&gt;Google App Engine&lt;/a&gt; application to do the trick.&lt;/p&gt;
&lt;p&gt;So, what I did was to take his code and started putting it in place for me at &lt;a href=&#34;http://redirector.ivandemarino.me&#34;&gt;http://redirector.ivandemarino.me&lt;/a&gt;. But because I&amp;rsquo;m a Software Developer that likes to make elegant stuff, I noticed that quite few things were missing:&lt;/p&gt;</description>
    </item>
    <item>
      <title>3 o&#39;clock javascript</title>
      <link>https://ivandemarino.me/posts/3-o-clock-javascript/</link>
      <pubDate>Sun, 28 Mar 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/3-o-clock-javascript/</guid>
      <description>&lt;p&gt;I was writing some code to react at a &lt;code&gt;textarea.onKeyUp&lt;/code&gt;. I take the size of the current &lt;code&gt;textarea.val().length&lt;/code&gt;, update an element and do some other stuff.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Yawn&#34; loading=&#34;lazy&#34; src=&#34;http://talkpractice.files.wordpress.com/2009/05/yawn.jpg&#34;&gt;
&lt;em&gt;yawn&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The first version of the code looked like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;keyup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chars_num&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;new_len&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#sms_num&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Math&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;floor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;length&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;161&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Working good, but was clearly slow: every keystroke was &amp;ldquo;giving back the cursor&amp;rdquo; too slowly for a fast typer like me. I went to take a look at &lt;a href=&#34;http://www.twitter.com/&#34;&gt;twitter&lt;/a&gt;, and their text box was WAY FASTER.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Binary Tree Rebuilder</title>
      <link>https://ivandemarino.me/posts/binary-tree-rebuilder/</link>
      <pubDate>Fri, 05 Feb 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/binary-tree-rebuilder/</guid>
      <description>&lt;p&gt;Imagine you have a &lt;a href=&#34;http://en.wikipedia.org/wiki/Binary_tree&#34;&gt;Binary Tree&lt;/a&gt;, with those characteristics:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;* Nodes do not respect any order relation - In other words: it&#39;s &amp;lt;strong&amp;gt;not&amp;lt;/strong&amp;gt; a [Binary Search Tree](http://en.wikipedia.org/wiki/Binary_search_tree) of any kind

* Every node appears &amp;lt;em&amp;gt;once and only once&amp;lt;/em&amp;gt; within the tree
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&#34;A nice Binary Tree&#34; loading=&#34;lazy&#34; src=&#34;http://www.drunkmenworkhere.org/bintree/pagerank.png&#34;&gt;
&lt;em&gt;A nice Binary Tree&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Then, your little brother passes by your desk and, to upset you, deletes the tree from your computer memory/HD (yeah, I know, I&amp;rsquo;m pathetic at inventing hypothetical situations :-P ).&lt;/p&gt;
&lt;p&gt;Fortunately though, you previously did a &lt;a href=&#34;http://en.wikipedia.org/wiki/Tree_traversal&#34;&gt;Pre-Order and an In-Order visit of your tree&lt;/a&gt;, and stored the result in an 2 nice array.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can you rebuild the original tree structure out of this 2 array?&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;How are you going to rebuild it?&lt;/h3&gt;
Yes, you can! (Sorry, I couldn&#39;t resist). And it&#39;s quite easy as well. What you have to do, is the following: 
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Take the first element of the PreOrder Array and use it as root of a new tree&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Find the position of this New Node in the InOrder Array, scanning it from &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;n-1&lt;/code&gt; (&lt;code&gt;n&lt;/code&gt; is the number of Nodes)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IF next element in the PreOrder Array is on the left of the New Node in the InOrder array: call RECURSIVELY this procedure, this time taking into account the portion of InOrder array that goes from &lt;code&gt;0&lt;/code&gt; to the &lt;code&gt;position of the New Node in the InOrder Array -1&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IF next element in the PreOrder Array is on the right of the New Node in the InOrder array: call RECURSIVELY this procedure, this time taking into account the portion of InOrder array that goes from the&lt;code&gt; position of the New Node in the InOrder Array +1&lt;/code&gt; to &lt;code&gt;n-1&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Return the New Node&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the way, this doesn&amp;rsquo;t work. To fix it we should be more generic, specifying things a little bit better. Things like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;* Every recursive calls takes into account a portion of the InOrder array; in the case of the first call it&#39;s the entire array

* There is going to be as much recursive calls as the number of elements in the PreOrder array
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Of course, is a tree what we are talking about here: &lt;strong&gt;recursion is a MUST&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prime Numbers Generator</title>
      <link>https://ivandemarino.me/posts/prime-numbers-generator/</link>
      <pubDate>Sat, 23 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/prime-numbers-generator/</guid>
      <description>&lt;p&gt;I believe I don&amp;rsquo;t have to describe what &lt;a href=&#34;http://en.wikipedia.org/wiki/Prime_number&#34;&gt;primes&lt;/a&gt; are, what are their properties and what not. This post is more a tribute to geek-ness of 2 friends-and-colleagues (&lt;a href=&#34;http://twitter.com/lucabox&#34;&gt;@lucabox&lt;/a&gt;) that have fun thinking of algorithms to solve stupid (or less stupid), and always useless problems ;-) .&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Optimus Prime&#34; loading=&#34;lazy&#34; src=&#34;http://scottthong.files.wordpress.com/2006/08/optimus_prime.jpg&#34;&gt;
Optimus Prime :-P - yeah yeah, a stupid joke&lt;/p&gt;
&lt;h2 id=&#34;briefing&#34;&gt;Briefing&lt;/h2&gt;
&lt;p&gt;This code is based on the assumption that we want to generate very very large primes, so it uses &lt;code&gt;unsigned long long&lt;/code&gt; to store the values, instead of classical &lt;code&gt;unsigned int&lt;/code&gt;. Live with that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#34;Bidirectionally multiplied&#34; array</title>
      <link>https://ivandemarino.me/posts/bidirectionally-multiplied-array/</link>
      <pubDate>Fri, 22 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/bidirectionally-multiplied-array/</guid>
      <description>&lt;p&gt;Another small problem before I go to sleep tonight:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;There is an array A[N] of N numbers.
You have to compose an array Output[N] such that Output[i] will be equal
to multiplication of all the elements of A[N] except A[i].
For example Output[0] will be multiplication of A[1] to A[N-1] and Output[1]
will be multiplication of A[0] and from A[2] to A[N-1].
&lt;strong&gt;Solve it without division operator and in O(n).&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use Backtracking to print all Subsets</title>
      <link>https://ivandemarino.me/posts/use-backtracking-to-print-all-subsets/</link>
      <pubDate>Fri, 22 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/use-backtracking-to-print-all-subsets/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m &amp;ldquo;studying&amp;rdquo; this algorithmic technique: &lt;a href=&#34;http://en.wikipedia.org/wiki/Backtracking&#34;&gt;Backtracking&lt;/a&gt;. This is an algorithmic approach to problem solution that I trust every good Computer Scientist already uses; but taking a &lt;a href=&#34;http://www.algorist.com/&#34;&gt;good theo-practical look&lt;/a&gt; at it is something better.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;A Backtracking Tree&#34; loading=&#34;lazy&#34; src=&#34;http://upload.wikimedia.org/wikipedia/commons/2/2c/Depthfirst.png&#34;&gt;
A Backtracking Tree&lt;/p&gt;
&lt;p&gt;I believe you can find enough informations about it online (the 2 links I provided are more than enough), so I&amp;rsquo;ll go straight to the problem.&lt;/p&gt;
&lt;h2 id=&#34;problem-definition&#34;&gt;Problem definition&lt;/h2&gt;
&lt;p&gt;Given an integer &lt;code&gt;n&lt;/code&gt;, and the set &lt;code&gt;S = { 1 &amp;hellip; n }&lt;/code&gt;, calculate (print) all the possible subsets of &lt;code&gt;S&lt;/code&gt;. For example, for &lt;code&gt;n = 1&lt;/code&gt;, all the possible subsets are &lt;code&gt;{ 1 }&lt;/code&gt; and &lt;code&gt;{ }&lt;/code&gt; (empty set). For &lt;code&gt;n = 2&lt;/code&gt;, all the possible subsets are: &lt;code&gt;{ 1 2 } { 1 } { 2 } { }&lt;/code&gt;. In general, for the set made of the first &lt;code&gt;n Integers&lt;/code&gt;, the number of possible subsets is &lt;code&gt;2&lt;sup&gt;n&lt;/sup&gt;&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Money change problem: Greedy vs. Dyn.Pro.</title>
      <link>https://ivandemarino.me/posts/money-change-problem-greedy-vs-dyn-pro/</link>
      <pubDate>Sun, 17 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/money-change-problem-greedy-vs-dyn-pro/</guid>
      <description>&lt;p&gt;This is a classical problem of &lt;a href=&#34;http://en.wikipedia.org/wiki/Computer_science&#34;&gt;Computer Science&lt;/a&gt;: it&amp;rsquo;s used to study both &lt;a href=&#34;http://en.wikipedia.org/wiki/Greedy_algorithm&#34;&gt;Greedy&lt;/a&gt; and &lt;a href=&#34;http://en.wikipedia.org/wiki/Dynamic_programming&#34;&gt;Dynamic Programming&lt;/a&gt; algorithmic techniques.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Coins&#34; loading=&#34;lazy&#34; src=&#34;http://www.freephotosbank.com/photographers/photos1/45/med_53ff4957d796d0ff0a7d3151ec4e4a20.jpg&#34;&gt;
I hate having my pocket full of copper!!! -_-&lt;/p&gt;
&lt;h2 id=&#34;definition&#34;&gt;Definition&lt;/h2&gt;
&lt;p&gt;Given:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A set of &lt;code&gt;n&lt;/code&gt; Denominations &lt;code&gt;D[0&amp;hellip;n-1]&lt;/code&gt; in ascending order, representing a Monetary Coin System&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;An money amount &lt;code&gt;A&lt;/code&gt;, as input&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;calculate a solution:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;* &amp;lt;strong&amp;gt;&amp;lt;code&amp;gt;S[0...n-1]&amp;lt;/code&amp;gt;&amp;lt;/strong&amp;gt;, with &amp;lt;code&amp;gt;0 &amp;amp;lt;= S[i] &amp;amp;lt;= (A/S[i])&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;0 &amp;amp;lt; i &amp;amp;lt; n-1&amp;lt;/code&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;where:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;* &amp;lt;strong&amp;gt;&amp;lt;code&amp;gt;A = Sum&amp;lt;sub&amp;gt;[i=0 -&amp;gt; n-1]&amp;lt;/sub&amp;gt; { D[i] * S[i] }&amp;lt;/code&amp;gt;&amp;lt;/strong&amp;gt;

* &amp;lt;strong&amp;gt;&amp;lt;code&amp;gt;Min{ Sum&amp;lt;sub&amp;gt;[i=0 -&amp;gt; n-1]&amp;lt;/sub&amp;gt; { S[i] } }&amp;lt;/code&amp;gt;&amp;lt;/strong&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;in-other-words&#34;&gt;In other words&lt;/h2&gt;
&lt;p&gt;Find the smallest amount of coins to make the given amount.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Calculate abs(int) without branching</title>
      <link>https://ivandemarino.me/posts/calculate-abs-int-without-branching/</link>
      <pubDate>Wed, 13 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/calculate-abs-int-without-branching/</guid>
      <description>&lt;p&gt;For this you need someone to teach it to you: if you made it yourself, then you are a very good &lt;a href=&#34;http://en.wikipedia.org/wiki/Computer_science&#34;&gt;Comp-Sci&lt;/a&gt;, and you should send your CV to &lt;a href=&#34;http://www.google.co.uk/intl/en/jobs/&#34;&gt;Google&lt;/a&gt; ASAP. ;)&lt;/p&gt;
&lt;h2 id=&#34;without-branching-o_o&#34;&gt;Without branching O_o?&lt;/h2&gt;
&lt;p&gt;Yes, without using any &amp;ldquo;&lt;code&gt;if ( a &amp;lt; 0 )&amp;hellip;&lt;/code&gt;&amp;rdquo;. To do that, you need to refresh how &lt;a href=&#34;http://en.wikipedia.org/wiki/Two&#34;&gt;Two&amp;rsquo;s Complement works&lt;/a&gt;, then come back.&lt;/p&gt;
&lt;p&gt;What we really need to focus on is that, given a &lt;code&gt;signed int A&lt;/code&gt;, the negative of that number is: &lt;code&gt;B = ~A + 1&lt;/code&gt;. BUT, we are trying to calculate the Absolute Value, not the negative. So, something like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Swap the value of two integers without temporary storage</title>
      <link>https://ivandemarino.me/posts/swap-the-value-of-two-integers-without-temporary-storage/</link>
      <pubDate>Wed, 13 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/swap-the-value-of-two-integers-without-temporary-storage/</guid>
      <description>&lt;p&gt;Someone says this is an old lame trick. I think it&amp;rsquo;s simple and clever use of XOR.&lt;/p&gt;
&lt;h2 id=&#34;howwhy-does-it-work&#34;&gt;How/Why does it work?&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s built around the properties of the &lt;code&gt;XOR ^&lt;/code&gt; operator, who has the following properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;A ^ B = B ^ A&lt;/code&gt; (commutative)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;A ^ 0 = A&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;A ^ 1 = ~A&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;A ^ A = 0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, you can see how it get&amp;rsquo;s applied here:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio .h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;// ... populate somehow &amp;#34;a&amp;#34; and &amp;#34;b&amp;#34;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;a = %d - b = %d&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;^=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// store in &amp;#34;a&amp;#34; the value of &amp;#34;a XOR b&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;^=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// store in &amp;#34;b&amp;#34; the value of &amp;#34;a XOR b XOR b&amp;#34; = &amp;#34;a XOR 0&amp;#34; = &amp;#34;a&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;^=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// store in &amp;#34;a&amp;#34; the velue of &amp;#34;a XOR b XOR a&amp;#34; = &amp;#34;b XOR 0&amp;#34; = &amp;#34;b&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;a = %d - b = %d&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Neat.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pascal&#39;s Triangle generator</title>
      <link>https://ivandemarino.me/posts/pascal-s-triangle-generator/</link>
      <pubDate>Mon, 11 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/pascal-s-triangle-generator/</guid>
      <description>&lt;p&gt;What&amp;rsquo;s &lt;a href=&#34;http://en.wikipedia.org/wiki/Pascal&#34;&gt;Pascal&amp;rsquo;s Triangle&lt;/a&gt;? That&amp;rsquo;s what it is (&lt;a href=&#34;http://en.wikipedia.org/wiki/Pascal&#34;&gt;Wikipedia&lt;/a&gt; has all the theory, if you need).&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pascal&#34; loading=&#34;lazy&#34; src=&#34;http://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Pascal%27s_triangle_5.svg/250px-Pascal%27s_triangle_5.svg.png&#34;&gt;
Pascal&amp;rsquo;s Triangle first 6 rows&lt;/p&gt;
&lt;p&gt;The thing I wrote here is a generator of the &lt;em&gt;n-th row&lt;/em&gt; of the triangle, that doesn&amp;rsquo;t use more then the memory needed to store the solution. Instead of allocating a &lt;em&gt;Triangular Matrix&lt;/em&gt;, and building every row based on the one above, solution is &lt;em&gt;built in place&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-does-it-work&#34;&gt;How does it work&lt;/h2&gt;
&lt;p&gt;The result is generated &lt;em&gt;&amp;ldquo;filling the row from right to left&amp;rdquo;&lt;/em&gt;. I start initiating the element on the right hand side to &lt;code&gt;&amp;lsquo;1&amp;rsquo;&lt;/code&gt;. Then, I run something like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>String search in O(n &#43; m)</title>
      <link>https://ivandemarino.me/posts/string-search-in-o-n-m/</link>
      <pubDate>Fri, 08 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/string-search-in-o-n-m/</guid>
      <description>&lt;p&gt;Searching a string inside another string is a very easy task. Given a string &lt;code&gt;A&lt;/code&gt; and a string &lt;code&gt;B&lt;/code&gt;, start a loop over &lt;code&gt;A&lt;/code&gt; from left to right and, for every letter, start an internal loop to see if there is a match with the letters of &lt;code&gt;B&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;String&#34; loading=&#34;lazy&#34; src=&#34;http://dm.ncl.ac.uk/peterevans/blog/wp-content/uploads/2009/04/string.jpg&#34;&gt;
A ball of string&lt;/p&gt;
&lt;p&gt;Pseudo code would look something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;NaiveSearch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sub&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;≠&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sub&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;jump&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;next&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iteration&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;outer&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loop&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Time Complexity? &lt;strong&gt;O(n * m), where &lt;code&gt;n&lt;/code&gt; is the size of &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;m&lt;/code&gt; is the size of &lt;code&gt;B&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Count bits set in parallel</title>
      <link>https://ivandemarino.me/posts/count-bits-set-in-parallel/</link>
      <pubDate>Thu, 07 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/count-bits-set-in-parallel/</guid>
      <description>&lt;p&gt;This time it&amp;rsquo;s not something I make myself. Indeed, I still can&amp;rsquo;t &amp;ldquo;see&amp;rdquo; it 100%: I got it, but it&amp;rsquo;s a bit complex.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Counting kid&#34; loading=&#34;lazy&#34; src=&#34;http://www.familyhelptree.com/blog/wp-content/uploads/2007/10/counting.jpg&#34;&gt;
A cute little lady counting (bits? ;-) )&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a method to count the number of bits in a number in O(1), in just 5 lines of code. &lt;strong&gt;INHUMAN.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;the-human-solutions&#34;&gt;The &amp;ldquo;human&amp;rdquo; solutions&lt;/h2&gt;
&lt;p&gt;Of course, there are methods that look way more easy and, given that the size of a number in memory is &amp;ldquo;fixed&amp;rdquo;, the O(1) still stands. For example:
&lt;strong&gt;0. Based on the &amp;ldquo;evenness/oddness&amp;rdquo; of the number&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;bits_counter_v0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// If odd, add 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;1. Counting one bit at a time (always the least significant one)&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;bits_counter_v1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// If least-significant bit is 1, add 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2. Counting 4 bit at a time with max 8 shifts, using an &amp;ldquo;hashmap&amp;rdquo; with precalculated results&lt;/strong&gt;
The fact that it can count the bits in &lt;em&gt;&amp;ldquo;max 8 shifts&amp;rdquo;&lt;/em&gt; has the trade off of the memory used by the hashmap.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;bits_counter_v2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// &amp;#34;Hashmap&amp;#34; of the values for the least significant 4 bits
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;int_to_bits_count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 0  00
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 1  01
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 2  10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 3  11
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 4  100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 5  101
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 6  110
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 7  111
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 8  1000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 9  1001
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 10 1010
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 11 1011
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 12 1100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 13 1101
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 14 1110
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// 15 1111
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// Add the bits count of the least significant 4 bits
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;int_to_bits_count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s see what some insane people made.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Largest square array of same integers</title>
      <link>https://ivandemarino.me/posts/largest-square-array-of-same-integers/</link>
      <pubDate>Thu, 07 Jan 2010 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/largest-square-array-of-same-integers/</guid>
      <description>&lt;p&gt;Tonight it&amp;rsquo;s a challenging one. Or, better, a problem of which is really difficult to find a good solution in &lt;strong&gt;&amp;lt; O(n&lt;sup&gt;3&lt;/sup&gt;)&lt;/strong&gt;. Indeed, it&amp;rsquo;s a question that an ex-colleague was asked during an interview with &lt;a href=&#34;http://www.google.com&#34;&gt;Big-G&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The guy, a part from being a REALLY smart guy, is also very humble, and he doesn&amp;rsquo;t want to be mentioned by name. So, sorry for girls looking for a young, smart, promising young man: you need to find who he is yourself. ;)&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Find the non repeating char in O(n) time and O(1) space - v2</title>
      <link>https://ivandemarino.me/posts/find-the-non-repeating-char-in-o-n-time-and-o-1-space-v2/</link>
      <pubDate>Fri, 18 Dec 2009 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/find-the-non-repeating-char-in-o-n-time-and-o-1-space-v2/</guid>
      <description>&lt;p&gt;My colleague and friend Luca (&lt;a href=&#34;http://twitter.com/lucabox&#34;&gt;@lucabox&lt;/a&gt;) described a better solution to the problem of &lt;em&gt;&amp;quot;&lt;a href=&#34;http://www.detronizator.org/2009/12/13/find-the-non-repeating-char-in-on-time-and-o1-space/&#34;&gt;Finding the first non repearing char in a string in O(n) time and O(1) space&lt;/a&gt;&amp;quot;&lt;/em&gt;. It uses smartly the space, making the solution nicer and slicker.
Or we are just 2 geeks that need to give more attention to their girlfriends :P&lt;/p&gt;
&lt;h2 id=&#34;lucas-solution-description&#34;&gt;Luca&amp;rsquo;s solution description&lt;/h2&gt;
&lt;p&gt;The logic of this solution is based on the usage of an array of unsigned chars.
Every char (assumed to be lowecase) has an associated small byte (1 char = 8 bits), where the bits 0x1 and 0x2 (the 2 least significant) represents, respectively, &amp;ldquo;&lt;em&gt;present once in the input string&lt;/em&gt;&amp;rdquo; and &amp;ldquo;&lt;em&gt;present multiple times in the input string&lt;/em&gt;&amp;rdquo;. After the input is &amp;ldquo;scanned&amp;rdquo; once, and every letter is marked with the correspondent &amp;ldquo;&lt;em&gt;presence bit&lt;/em&gt;&amp;rdquo; (once, multiple or none), it get&amp;rsquo;s scanned a second time to find the first char of the input which has the bit &amp;ldquo;present once&amp;rdquo; set to &amp;ldquo;1&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Personalize your $PS1</title>
      <link>https://ivandemarino.me/posts/personalize-your-ps1/</link>
      <pubDate>Mon, 21 Apr 2008 00:00:00 +0000</pubDate><author>detronizator&#43;blog@gmail.com (Ivan De Marino, aka &#34;Zio Ivan&#34;, aka &#34;detro&#34;)</author>
      <guid>https://ivandemarino.me/posts/personalize-your-ps1/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://4.bp.blogspot.com/_Zfnd5XZP80Y/S8S8ZPTdVvI/AAAAAAAABg8/dfnIlEXmDJM/s1600/Picture+2.png&#34;&gt;
Fancy $PS1 setting&lt;/p&gt;
&lt;p&gt;The code to make the &lt;a href=&#34;http://www.gnu.org/software/bash/&#34;&gt;Bash&lt;/a&gt; prompt looks like mine is (&lt;code&gt;~/.bashrc&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$TERM&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	xterm*&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rxvt*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nv&#34;&gt;TITLEBAR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\[\033]0;\u@\h:\w\007\]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nv&#34;&gt;TITLEBAR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PS1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TITLEBAR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\n\[\033[0;0m\][\033[0;32m\]time: \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;\[\033[0m\]\[\033[1;31m\]\t\[\033[0m\]\[\033[0;0m\]]-\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;[\[\033[0m\]\[\033[0;32m\]host: \[\033[0m\]\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;\[\033[1;31m\]\h\[\033[0m\]\[\033[0;0m\]]-\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;[\[\033[0m\]\[\033[0;32m\]user: \[\033[0m\]\[\033[1;31m\]\u\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;\[\033[0m\]\[\033[0;0m\]]-[\[\033[0m\]\[\033[0;32m\]bash: \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;\[\033[0m\]\[\033[1;31m\]\v\[\033[0;0m\]]\n\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;\[\033[0;0m\][\[\033[0;32m\]cwd: \[\033[0m\]\[\033[1;31m\]\w\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;\[\033[0m\]\[\033[0;0m\]]# &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Thanks to &lt;a href=&#34;http://www.gilesorr.com/bashprompt/howto/&#34;&gt;Bash Prompt HOWTO&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
