<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://arachnode.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Classic CS Programming Challenges</title><subtitle type="html" /><id>http://arachnode.net/blogs/programming_challenges/atom.aspx</id><link rel="alternate" type="text/html" href="http://arachnode.net/blogs/programming_challenges/default.aspx" /><link rel="self" type="application/atom+xml" href="http://arachnode.net/blogs/programming_challenges/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2009-09-25T08:59:00Z</updated><entry><title>Does a LinkedList contain a loop...</title><link rel="alternate" type="text/html" href="/blogs/programming_challenges/archive/2013/02/25/does-a-linkedlist-contain-a-loop.aspx" /><id>/blogs/programming_challenges/archive/2013/02/25/does-a-linkedlist-contain-a-loop.aspx</id><published>2013-02-26T02:58:00Z</published><updated>2013-02-26T02:58:00Z</updated><content type="html">&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #a31515; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//the Console.Write(...); calls are debug and do not check for null...&lt;/span&gt;

&lt;span class="preproc"&gt;#region&lt;/span&gt;

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Diagnostics;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; CSChallenges
{
    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Node&amp;lt;T&amp;gt;
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; T Value { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Node&amp;lt;T&amp;gt; Next;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ToString()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; Value.ToString();
        }
    }

    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; n1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; { Value = 1 };
            Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; n2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; { Value = 2 };
            Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; n3 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; { Value = 3 };
            Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; n4 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; { Value = 4 };
            Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; n5 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; { Value = 5 };
            Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; n6 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; { Value = 6 };

            n1.Next = n2;
            n2.Next = n3;
            n3.Next = n4;
            n4.Next = n6;
            n5.Next = n6;
            n6.Next = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

            Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; iterator = n1;

            &lt;span class="kwrd"&gt;do&lt;/span&gt;
            {
                &lt;span class="rem"&gt;//proper check for null...&lt;/span&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (iterator != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    Console.Write(iterator.Value + &lt;span class="str"&gt;" | "&lt;/span&gt;);

                    iterator = iterator.Next;
                }
            } while (iterator != &lt;span class="kwrd"&gt;null&lt;/span&gt;); &lt;span class="rem"&gt;//is there an end...&lt;/span&gt;

            &lt;span class="rem"&gt;/**/&lt;/span&gt;
            Console.WriteLine();

            n6.Next = n1;
            iterator = n1;

            &lt;span class="kwrd"&gt;do&lt;/span&gt;
            {
                &lt;span class="rem"&gt;//proper check for null...&lt;/span&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (iterator != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    Console.Write(iterator.Value + &lt;span class="str"&gt;" | "&lt;/span&gt;);

                    iterator = iterator.Next;
                }
            } while (iterator != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; iterator != n1); &lt;span class="rem"&gt;//is there an end and assumes we know the 'head node'...&lt;/span&gt;

            &lt;span class="rem"&gt;/**/&lt;/span&gt;
            Console.WriteLine();

            n6.Next = n3; &lt;span class="rem"&gt;//set to something other than the head node...&lt;/span&gt;
            iterator = n2;

            Stopwatch stopwatch = &lt;span class="kwrd"&gt;new&lt;/span&gt; Stopwatch();
            stopwatch.Start();

            &lt;span class="rem"&gt;//but what if we start in the 'middle' and there is a loop?&lt;/span&gt;
            &lt;span class="kwrd"&gt;do&lt;/span&gt;
            {
                &lt;span class="rem"&gt;//proper check for null...&lt;/span&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (iterator != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    Console.Write(iterator.Value + &lt;span class="str"&gt;" | "&lt;/span&gt;);

                    iterator = iterator.Next;
                }
            } while (iterator != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; iterator != n1 &amp;amp;&amp;amp; stopwatch.Elapsed.TotalMilliseconds &amp;lt; 100); &lt;span class="rem"&gt;//timed loop terminator...&lt;/span&gt;

            &lt;span class="rem"&gt;//well, we'd loop forever if our Stopwatch didn't blow the whistle...&lt;/span&gt;
            &lt;span class="rem"&gt;//it isn't feasible to keep track of every value - there could be duplicates, by value.&lt;/span&gt;

            &lt;span class="rem"&gt;/**/&lt;/span&gt;
            Console.WriteLine();

            iterator = n2;
            Node&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; iteratorFast = n2;

            &lt;span class="rem"&gt;//the answer is to keep two Node&amp;lt;T&amp;gt; references, send them off at n and n+1 Next's and should n+1 detect n at n or n+1 Nodes ahead there is a loop...&lt;/span&gt;
            &lt;span class="kwrd"&gt;do&lt;/span&gt;
            {
                &lt;span class="rem"&gt;//proper check for null(s)...&lt;/span&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (iterator != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; iteratorFast != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    Console.Write(iterator.Value + &lt;span class="str"&gt;" "&lt;/span&gt; + iteratorFast.Value + &lt;span class="str"&gt;" -&amp;gt; "&lt;/span&gt;);

                    &lt;span class="rem"&gt;//moves by 1...&lt;/span&gt;
                    iterator = iterator.Next;

                    &lt;span class="rem"&gt;//moves by 2...&lt;/span&gt;
                    iteratorFast = iteratorFast.Next;
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (iteratorFast != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                    {
                        iteratorFast = iteratorFast.Next;
                    }
                    &lt;span class="kwrd"&gt;else&lt;/span&gt;
                    {
                        &lt;span class="rem"&gt;//return value (true) if this were a function...&lt;/span&gt;
                        &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                    }

                    Console.Write(iterator.Value + &lt;span class="str"&gt;" "&lt;/span&gt; + iteratorFast.Value + &lt;span class="str"&gt;" -&amp;gt; "&lt;/span&gt;);

                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (iteratorFast == iterator || iteratorFast.Next == iterator)
                    {
                        &lt;span class="rem"&gt;//return value (true) if this were a function...&lt;/span&gt;
                        &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                    }
                }
            } while (iterator != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; iteratorFast != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; iterator != n1 &amp;amp;&amp;amp; iteratorFast != n1); &lt;span class="rem"&gt;//is there an end and assumes we know the 'head node'...&lt;/span&gt;

            &lt;span class="rem"&gt;/**/&lt;/span&gt;
            Console.WriteLine();

            iterator = n2;
            iteratorFast = n2;

            &lt;span class="rem"&gt;//or, more succinctly...&lt;/span&gt;
            while(iteratorFast != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; iteratorFast.Next != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                Console.Write(iterator.Value + &lt;span class="str"&gt;" "&lt;/span&gt; + iteratorFast.Value + &lt;span class="str"&gt;" -&amp;gt; "&lt;/span&gt;);

                iterator = iterator.Next;
                iteratorFast = iteratorFast.Next.Next;

                Console.Write(iterator.Value + &lt;span class="str"&gt;" "&lt;/span&gt; + iteratorFast.Value + &lt;span class="str"&gt;" -&amp;gt; "&lt;/span&gt;);

                &lt;span class="kwrd"&gt;if&lt;/span&gt;(iteratorFast == iterator)
                {
                    &lt;span class="rem"&gt;//return value (true) if this were a function...&lt;/span&gt;
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                }
            }

            &lt;span class="rem"&gt;/**/&lt;/span&gt;
            Console.WriteLine();

            iterator = n2;
            iteratorFast = n2;

            &lt;span class="rem"&gt;//and, with an optimization...&lt;/span&gt;
            while (iteratorFast != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; iteratorFast.Next != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                Console.Write(iterator.Value + &lt;span class="str"&gt;" "&lt;/span&gt; + iteratorFast.Value + &lt;span class="str"&gt;" -&amp;gt; "&lt;/span&gt;);

                iterator = iterator.Next;
                iteratorFast = iteratorFast.Next.Next;

                Console.Write(iterator.Value + &lt;span class="str"&gt;" "&lt;/span&gt; + iteratorFast.Value + &lt;span class="str"&gt;" -&amp;gt; "&lt;/span&gt;);

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (iteratorFast == iterator || (iteratorFast != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; iteratorFast.Next == iterator))
                {
                    &lt;span class="rem"&gt;//return value (true) if this were a function...&lt;/span&gt;
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                }
            }

            Console.WriteLine();

            Console.WriteLine(&lt;span class="str"&gt;"Finished..."&lt;/span&gt;);
            Console.ReadLine();
        }
    }
}
&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://arachnode.net/aggbug.aspx?PostID=43021" width="1" height="1"&gt;</content><author><name>arachnode.net</name><uri>http://arachnode.net/members/arachnode.net/default.aspx</uri></author></entry><entry><title>Recursively traverse a directory...</title><link rel="alternate" type="text/html" href="/blogs/programming_challenges/archive/2013/02/19/recursively-traverse-a-directory.aspx" /><id>/blogs/programming_challenges/archive/2013/02/19/recursively-traverse-a-directory.aspx</id><published>2013-02-20T01:02:00Z</published><updated>2013-02-20T01:02:00Z</updated><content type="html">&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #a31515; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt;

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Diagnostics;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; CSChallenges
{
    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; enumeratedFiles = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(Directory.EnumerateFiles(&lt;span class="str"&gt;"C:\\Applications"&lt;/span&gt;, &lt;span class="str"&gt;"*.*"&lt;/span&gt;, SearchOption.AllDirectories));

            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; enumeratedFiles2 = EnumerateFiles(&lt;span class="str"&gt;"C:\\Applications"&lt;/span&gt;);

            Debug.Assert(enumeratedFiles.Count == enumeratedFiles2.Count);

            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; enumeratedFiles.Count; i++)
            {
                Debug.Assert(enumeratedFiles[ i ] == enumeratedFiles2[ i ]);
            }

            Console.WriteLine(&lt;span class="str"&gt;"Finished..."&lt;/span&gt;);
            Console.ReadLine();
        }

        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// This leaves out a LOT of conditions, like error handling... (Access Denied, etc.)&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;param name="path"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; EnumerateFiles(&lt;span class="kwrd"&gt;string&lt;/span&gt; path)
        {
            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; enumeratedFiles = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            EnumerateFiles(path, enumeratedFiles);

            &lt;span class="kwrd"&gt;return&lt;/span&gt; enumeratedFiles;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; EnumerateFiles(&lt;span class="kwrd"&gt;string&lt;/span&gt; path, List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; enumeratedFiles)
        {
            enumeratedFiles.AddRange(Directory.GetFiles(path));

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; directory &lt;span class="kwrd"&gt;in&lt;/span&gt; Directory.GetDirectories(path))
            {
                EnumerateFiles(directory, enumeratedFiles);
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; enumeratedFiles;
        }
    }
}&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://arachnode.net/aggbug.aspx?PostID=43012" width="1" height="1"&gt;</content><author><name>arachnode.net</name><uri>http://arachnode.net/members/arachnode.net/default.aspx</uri></author><category term="Recursion" scheme="http://arachnode.net/blogs/programming_challenges/archive/tags/Recursion/default.aspx" /></entry><entry><title>FizzBuzz</title><link rel="alternate" type="text/html" href="/blogs/programming_challenges/archive/2013/02/18/fizzbuzz.aspx" /><id>/blogs/programming_challenges/archive/2013/02/18/fizzbuzz.aspx</id><published>2013-02-19T01:40:00Z</published><updated>2013-02-19T01:40:00Z</updated><content type="html">&lt;p&gt;&lt;span&gt;Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Taken from:&amp;nbsp;&lt;/span&gt;http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #a31515; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt;

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Challenges
{
    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span class="rem"&gt;//yes, I added debug...&lt;/span&gt;

            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 1; i &amp;lt;= 100; i++)
            {
                &lt;span class="kwrd"&gt;bool&lt;/span&gt; multipleOfThree = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                &lt;span class="kwrd"&gt;bool&lt;/span&gt; multipleOfFive = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                
                &lt;span class="kwrd"&gt;if&lt;/span&gt;(i % 3 == 0)
                {
                    multipleOfThree = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                }
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (i % 5 == 0)
                {
                    multipleOfFive = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                }

                &lt;span class="kwrd"&gt;if&lt;/span&gt;(!multipleOfThree &amp;amp;&amp;amp; !multipleOfFive)
                {
                    Console.WriteLine(i);
                    &lt;span class="kwrd"&gt;continue&lt;/span&gt;;
                }
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (multipleOfThree &amp;amp;&amp;amp; multipleOfFive)
                {
                    Console.WriteLine(&lt;span class="str"&gt;"FizzBuzz ("&lt;/span&gt; + i + &lt;span class="str"&gt;")"&lt;/span&gt;);
                    &lt;span class="kwrd"&gt;continue&lt;/span&gt;;
                }
                &lt;span class="kwrd"&gt;if&lt;/span&gt;(multipleOfThree)
                {
                    Console.WriteLine(&lt;span class="str"&gt;"Fizz ("&lt;/span&gt; + i + &lt;span class="str"&gt;")"&lt;/span&gt;);
                    &lt;span class="kwrd"&gt;continue&lt;/span&gt;;
                }
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (multipleOfFive)
                {
                    Console.WriteLine(&lt;span class="str"&gt;"Buzz ("&lt;/span&gt; + i + &lt;span class="str"&gt;")"&lt;/span&gt;);
                    &lt;span class="kwrd"&gt;continue&lt;/span&gt;;
                }
            }

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            Console.ReadLine();

            &lt;span class="rem"&gt;//better yet...&lt;/span&gt;

            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 1; i &amp;lt;= 100; i++)
            {
                &lt;span class="kwrd"&gt;bool&lt;/span&gt; printInt = &lt;span class="kwrd"&gt;true&lt;/span&gt;;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (i % 3 == 0)
                {
                    printInt = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                    Console.Write(&lt;span class="str"&gt;"Fizz"&lt;/span&gt;);
                }
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (i % 5 == 0)
                {
                    printInt = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                    Console.Write(&lt;span class="str"&gt;"Buzz"&lt;/span&gt;);
                }
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (printInt)
                {
                    Console.WriteLine(i);
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                {
                    Console.WriteLine(&lt;span class="str"&gt;" ("&lt;/span&gt; + i + &lt;span class="str"&gt;")"&lt;/span&gt;);
                }
            }

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            Console.ReadLine();
        }
    }
}&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://arachnode.net/aggbug.aspx?PostID=43011" width="1" height="1"&gt;</content><author><name>arachnode.net</name><uri>http://arachnode.net/members/arachnode.net/default.aspx</uri></author></entry><entry><title>Binary Search Tree Challenge</title><link rel="alternate" type="text/html" href="/blogs/programming_challenges/archive/2013/02/18/binary-search-tree-challenge.aspx" /><id>/blogs/programming_challenges/archive/2013/02/18/binary-search-tree-challenge.aspx</id><published>2013-02-19T01:34:00Z</published><updated>2013-02-19T01:34:00Z</updated><content type="html">&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #a31515; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt;

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; BinaryTreeSearch
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TreeNode&amp;lt;T&amp;gt;
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; TreeNode&amp;lt;T&amp;gt; Parent { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; TreeNode&amp;lt;T&amp;gt; Left { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; TreeNode&amp;lt;T&amp;gt; Right { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; T Value { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ToString()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"Parent: "&lt;/span&gt; + (Parent == &lt;span class="kwrd"&gt;null&lt;/span&gt; ? &lt;span class="kwrd"&gt;default&lt;/span&gt;(T) : Parent.Value) + &lt;span class="str"&gt;" Number: "&lt;/span&gt; + Value + &lt;span class="str"&gt;" Left: "&lt;/span&gt; + (Left == &lt;span class="kwrd"&gt;null&lt;/span&gt; ? &lt;span class="kwrd"&gt;default&lt;/span&gt;(T) : Left.Value) + &lt;span class="str"&gt;" Right: "&lt;/span&gt; + (Right == &lt;span class="kwrd"&gt;null&lt;/span&gt; ? &lt;span class="kwrd"&gt;default&lt;/span&gt;(T) : Right.Value);
        }
    }

    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; treeNode = &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; {Value = 100};

            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; {Value = 95});
            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; {Value = 105});

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; {Value = 93});
            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; {Value = 97});

            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; {Value = 103});
            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; {Value = 107});

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; { Value = 92 });
            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; { Value = 94 });
            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; { Value = 96 });
            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; { Value = 98 });

            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; { Value = 102 });
            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; { Value = 104 });
            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; { Value = 106 });
            AddTreeNode(treeNode, &lt;span class="kwrd"&gt;new&lt;/span&gt; TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; { Value = 108 });

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            Console.WriteLine(&lt;span class="str"&gt;"DepthWiseIterationFromTheLeft"&lt;/span&gt;);
            DepthWiseIterationFromTheLeft(treeNode);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            Console.WriteLine(&lt;span class="str"&gt;"\n\nDepthWiseIterationFromTheRight"&lt;/span&gt;);
            DepthWiseIterationFromTheRight(treeNode);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            Console.WriteLine(&lt;span class="str"&gt;"\n\nBreadthWiseIterationFromTheLeft"&lt;/span&gt;);
            BreadthWiseIterationFromTheLeft(treeNode);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            Console.WriteLine(&lt;span class="str"&gt;"\n\nBreadthWiseIterationFromTheRight"&lt;/span&gt;);
            BreadthWiseIterationFromTheRight(treeNode);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            Console.ReadLine();
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddTreeNode(TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; treeNode, TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; treeNodeToAdd)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode == &lt;span class="kwrd"&gt;null&lt;/span&gt; || treeNodeToAdd == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNodeToAdd.Value &amp;lt;= treeNode.Value)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode.Left == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    treeNodeToAdd.Parent = treeNode;
                    treeNode.Left = treeNodeToAdd;
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                {
                    AddTreeNode(treeNode.Left, treeNodeToAdd);
                }
            }

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNodeToAdd.Value &amp;gt; treeNode.Value)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode.Right == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    treeNodeToAdd.Parent = treeNode;
                    treeNode.Right = treeNodeToAdd;
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                {
                    AddTreeNode(treeNode.Right, treeNodeToAdd);
                }
            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DepthWiseIterationFromTheLeft(TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; treeNode)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            Console.Write(treeNode.Value + &lt;span class="str"&gt;" "&lt;/span&gt;);

            DepthWiseIterationFromTheLeft(treeNode.Left);
            DepthWiseIterationFromTheLeft(treeNode.Right);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DepthWiseIterationFromTheRight(TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; treeNode)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            Console.Write(treeNode.Value + &lt;span class="str"&gt;" "&lt;/span&gt;);

            DepthWiseIterationFromTheRight(treeNode.Right);
            DepthWiseIterationFromTheRight(treeNode.Left);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BreadthWiseIterationFromTheLeft(TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; treeNode)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            &lt;span class="kwrd"&gt;var&lt;/span&gt; queue = &lt;span class="kwrd"&gt;new&lt;/span&gt; Queue&amp;lt;TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt;&amp;gt;();

            queue.Enqueue(treeNode);

            while(queue.Count != 0)
            {
                &lt;span class="kwrd"&gt;var&lt;/span&gt; treeNode2 = queue.Dequeue();

                Console.Write(treeNode2.Value + &lt;span class="str"&gt;" "&lt;/span&gt;);

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode2.Left != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    queue.Enqueue(treeNode2.Left);
                }
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode2.Right != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    queue.Enqueue(treeNode2.Right);
                }
            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BreadthWiseIterationFromTheRight(TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt; treeNode)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            &lt;span class="kwrd"&gt;var&lt;/span&gt; queue = &lt;span class="kwrd"&gt;new&lt;/span&gt; Queue&amp;lt;TreeNode&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt;&amp;gt;();

            queue.Enqueue(treeNode);

            while (queue.Count != 0)
            {
                &lt;span class="kwrd"&gt;var&lt;/span&gt; treeNode2 = queue.Dequeue();

                Console.Write(treeNode2.Value + &lt;span class="str"&gt;" "&lt;/span&gt;);

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode2.Right != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    queue.Enqueue(treeNode2.Right);
                }
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (treeNode2.Left != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    queue.Enqueue(treeNode2.Left);
                }
            }
        }
    }
}&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://arachnode.net/aggbug.aspx?PostID=43010" width="1" height="1"&gt;</content><author><name>arachnode.net</name><uri>http://arachnode.net/members/arachnode.net/default.aspx</uri></author></entry><entry><title>Reversing last names...</title><link rel="alternate" type="text/html" href="/blogs/programming_challenges/archive/2013/02/11/reversing-last-names.aspx" /><id>/blogs/programming_challenges/archive/2013/02/11/reversing-last-names.aspx</id><published>2013-02-12T01:40:00Z</published><updated>2013-02-12T01:40:00Z</updated><content type="html">&lt;p&gt;If I have a list of first and last names in a HashSet&amp;lt;string&amp;gt;, how would I go about reversing the names?&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #a31515; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt;

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Interview
{
    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            HashSet&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; firstAndLastNames = &lt;span class="kwrd"&gt;new&lt;/span&gt; HashSet&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            firstAndLastNames.Add(&lt;span class="str"&gt;"Mike Anderson"&lt;/span&gt;);
            firstAndLastNames.Add(&lt;span class="str"&gt;"Jeff Basquat"&lt;/span&gt;);
            firstAndLastNames.Add(&lt;span class="str"&gt;"Paul Thompson"&lt;/span&gt;);
            firstAndLastNames.Add(&lt;span class="str"&gt;"Brent Smith"&lt;/span&gt;);
            firstAndLastNames.Add(&lt;span class="str"&gt;"Chris Price"&lt;/span&gt;);

            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; firstNames = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();
            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; lastNames = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; fullName &lt;span class="kwrd"&gt;in&lt;/span&gt; firstAndLastNames)
            {
                &lt;span class="rem"&gt;//assumes first and last and only one space in the name...&lt;/span&gt;
                &lt;span class="kwrd"&gt;string&lt;/span&gt;[] fullNameSplit = fullName.Split(&lt;span class="str"&gt;' '&lt;/span&gt;);

                firstNames.Add(fullNameSplit[0]);
                lastNames.Add(fullNameSplit[1]);
            }

            HashSet&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; newFirstAndLastNames = &lt;span class="kwrd"&gt;new&lt;/span&gt; HashSet&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0, j = firstAndLastNames.Count - 1; i &amp;lt; firstAndLastNames.Count &amp;amp;&amp;amp; j &amp;gt;= 0; i++, j--)
            {
                newFirstAndLastNames.Add(firstNames[ i ] + &lt;span class="str"&gt;" "&lt;/span&gt; + lastNames[ j ]);
            }

            Console.WriteLine(&lt;span class="str"&gt;"Done."&lt;/span&gt;);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            Console.ReadLine();
        }

        &lt;span class="rem"&gt;//what I wrote during the interview...&lt;/span&gt;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ReverseLastNames()
        {
            Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; original = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            original.Add(&lt;span class="str"&gt;"Mike"&lt;/span&gt;, &lt;span class="str"&gt;"Anderson"&lt;/span&gt;);
            original.Add(&lt;span class="str"&gt;"Jeff"&lt;/span&gt;, &lt;span class="str"&gt;"Basquat"&lt;/span&gt;);
            original.Add(&lt;span class="str"&gt;"Paul"&lt;/span&gt;, &lt;span class="str"&gt;"Thompson"&lt;/span&gt;);
            original.Add(&lt;span class="str"&gt;"Brent"&lt;/span&gt;, &lt;span class="str"&gt;"Smith"&lt;/span&gt;);
            original.Add(&lt;span class="str"&gt;"Chris"&lt;/span&gt;, &lt;span class="str"&gt;"Price"&lt;/span&gt;);

            &lt;span class="kwrd"&gt;string&lt;/span&gt;[] lastNames = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[original.Count];

            &lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0;
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; lastName &lt;span class="kwrd"&gt;in&lt;/span&gt; original.Values)
            {
                lastNames[i++] = lastName;
            }

            Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; reversed = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(original.Count);

            i = lastNames.Length - 1;
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; firstName &lt;span class="kwrd"&gt;in&lt;/span&gt; original.Keys)
            {
                reversed.Add(firstName, lastNames[i--]);
            }
        }
    }
}&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://arachnode.net/aggbug.aspx?PostID=43005" width="1" height="1"&gt;</content><author><name>arachnode.net</name><uri>http://arachnode.net/members/arachnode.net/default.aspx</uri></author></entry><entry><title>Intersecting lists of strings...</title><link rel="alternate" type="text/html" href="/blogs/programming_challenges/archive/2013/02/11/intersecting-lists-of-strings.aspx" /><id>/blogs/programming_challenges/archive/2013/02/11/intersecting-lists-of-strings.aspx</id><published>2013-02-12T01:06:00Z</published><updated>2013-02-12T01:06:00Z</updated><content type="html">&lt;p&gt;Find the intersection between two lists of strings.&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #a31515; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt;

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Diagnostics;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Interview
{
    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; one = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();
            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; two = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            one.AddRange(&lt;span class="kwrd"&gt;new&lt;/span&gt;[] {&lt;span class="str"&gt;"1"&lt;/span&gt;, &lt;span class="str"&gt;"1"&lt;/span&gt;, &lt;span class="str"&gt;"4"&lt;/span&gt;, &lt;span class="str"&gt;"6"&lt;/span&gt;, &lt;span class="str"&gt;"7"&lt;/span&gt;, &lt;span class="str"&gt;"9"&lt;/span&gt;, &lt;span class="str"&gt;"3"&lt;/span&gt;, &lt;span class="str"&gt;"6"&lt;/span&gt;, &lt;span class="str"&gt;"9"&lt;/span&gt;});
            one.AddRange(one);
            one.AddRange(one);
            one.AddRange(one);
            one.AddRange(one);
            one.AddRange(one);
            one.AddRange(one);
            two.AddRange(&lt;span class="kwrd"&gt;new&lt;/span&gt;[] {&lt;span class="str"&gt;"1"&lt;/span&gt;, &lt;span class="str"&gt;"8"&lt;/span&gt;, &lt;span class="str"&gt;"3"&lt;/span&gt;, &lt;span class="str"&gt;"1"&lt;/span&gt;, &lt;span class="str"&gt;"6"&lt;/span&gt;, &lt;span class="str"&gt;"2"&lt;/span&gt;, &lt;span class="str"&gt;"4"&lt;/span&gt;, &lt;span class="str"&gt;"6"&lt;/span&gt;});
            two.AddRange(two);
            two.AddRange(two);
            two.AddRange(two);
            two.AddRange(two);
            two.AddRange(two);
            two.AddRange(two);

            Stopwatch stopwatch = &lt;span class="kwrd"&gt;new&lt;/span&gt; Stopwatch();
            &lt;span class="kwrd"&gt;int&lt;/span&gt; numberOfIterations = 25000;

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            stopwatch.Reset();
            stopwatch.Start();
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; numberOfIterations; i++)
            {
                List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; result = Linq(one, two);
            }

            Console.WriteLine(stopwatch.Elapsed);
            Console.WriteLine(&lt;span class="str"&gt;"Linq\n"&lt;/span&gt;);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            stopwatch.Reset();
            stopwatch.Start();
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; numberOfIterations; i++)
            {
                List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; result = Slow(one, two);
            }

            Console.WriteLine(stopwatch.Elapsed);
            Console.WriteLine(&lt;span class="str"&gt;"Slow\n"&lt;/span&gt;);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            stopwatch.Reset();
            stopwatch.Start();
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; numberOfIterations; i++)
            {
                List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; result = SlowWithOptimization(one, two);
            }

            Console.WriteLine(stopwatch.Elapsed);
            Console.WriteLine(&lt;span class="str"&gt;"SlowWithOptimization\n"&lt;/span&gt;);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            stopwatch.Reset();
            stopwatch.Start();
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; numberOfIterations; i++)
            {
                List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; result = Faster(one, two);
            }

            Console.WriteLine(stopwatch.Elapsed);
            Console.WriteLine(&lt;span class="str"&gt;"Faster\n"&lt;/span&gt;);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            stopwatch.Reset();
            stopwatch.Start();
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; numberOfIterations; i++)
            {
                List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; result = MuchFaster(one, two);
            }

            Console.WriteLine(stopwatch.Elapsed);
            Console.WriteLine(&lt;span class="str"&gt;"MuchFaster\n"&lt;/span&gt;);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            stopwatch.Reset();
            stopwatch.Start();
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; numberOfIterations; i++)
            {
                List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; result = FasterThanLinq(one, two);
            }

            Console.WriteLine(stopwatch.Elapsed);
            Console.WriteLine(&lt;span class="str"&gt;"FasterThanLinq\n"&lt;/span&gt;);

            Console.WriteLine(&lt;span class="str"&gt;"Done."&lt;/span&gt;);

            &lt;span class="rem"&gt;/**/&lt;/span&gt;

            Console.ReadLine();
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; Linq(List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; one, List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; two)
        {
            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; intersection = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            intersection.AddRange(one.Intersect(two).ToList());

            &lt;span class="kwrd"&gt;return&lt;/span&gt; intersection;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; Slow(List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; one, List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; two)
        {
            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; intersection = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; stringOne &lt;span class="kwrd"&gt;in&lt;/span&gt; one)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (two.Contains(stringOne))
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!intersection.Contains(stringOne))
                    {
                        intersection.Add(stringOne);
                    }
                }
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; intersection;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; SlowWithOptimization(List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; one, List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; two)
        {
            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; intersection = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; stringOne &lt;span class="kwrd"&gt;in&lt;/span&gt; one)
            {
                &lt;span class="rem"&gt;//kinda, until 'intersection' fills...&lt;/span&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (!intersection.Contains(stringOne))
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (two.Contains(stringOne))
                    {
                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!intersection.Contains(stringOne))
                        {
                            intersection.Add(stringOne);
                        }
                    }
                }
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; intersection;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; Faster(List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; one, List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; two)
        {
            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; intersection = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            one.Sort();
            two.Sort();

            &lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0;
            &lt;span class="kwrd"&gt;int&lt;/span&gt; j = 0;

            while (i &amp;lt; one.Count &amp;amp;&amp;amp; j &amp;lt; two.Count)
            {
                &lt;span class="kwrd"&gt;string&lt;/span&gt; stringOne = one[ i ];
                &lt;span class="kwrd"&gt;string&lt;/span&gt; stringTwo = two[ j ];

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (stringOne == stringTwo)
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!intersection.Contains(stringOne))
                    {
                        intersection.Add(stringOne);
                    }

                    &lt;span class="kwrd"&gt;do&lt;/span&gt;
                    {
                        ++i;
                    } while (i &amp;lt; one.Count &amp;amp;&amp;amp; one[ i ] == stringOne);

                    &lt;span class="kwrd"&gt;do&lt;/span&gt;
                    {
                        ++j;
                    } while (j &amp;lt; two.Count &amp;amp;&amp;amp; two[ j ] == stringTwo);

                    &lt;span class="kwrd"&gt;continue&lt;/span&gt;;
                }

                j++;
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; intersection;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; MuchFaster(List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; one, List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; two)
        {
            Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; intersection = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;();

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; stringOne &lt;span class="kwrd"&gt;in&lt;/span&gt; one)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (!intersection.ContainsKey(stringOne))
                {
                    intersection.Add(stringOne, -1);
                }
            }

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; stringTwo &lt;span class="kwrd"&gt;in&lt;/span&gt; two)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (!intersection.ContainsKey(stringTwo))
                {
                    intersection.Add(stringTwo, 1);
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (intersection[stringTwo] == -1)
                    {
                        intersection[stringTwo] = 0;
                    }
                }
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; intersection.Where(kvp =&amp;gt; kvp.Value == 0).Select(kvp =&amp;gt; kvp.Key).ToList();
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; FasterThanLinq(List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; one, List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; two)
        {
            HashSet&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; existsInOne = &lt;span class="kwrd"&gt;new&lt;/span&gt; HashSet&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();
            HashSet&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; existsInTwo = &lt;span class="kwrd"&gt;new&lt;/span&gt; HashSet&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; stringOne &lt;span class="kwrd"&gt;in&lt;/span&gt; one)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (!existsInOne.Contains(stringOne))
                {
                    existsInOne.Add(stringOne);
                }
            }

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; stringTwo &lt;span class="kwrd"&gt;in&lt;/span&gt; two)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (existsInOne.Contains(stringTwo))
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!existsInTwo.Contains(stringTwo))
                    {
                        existsInTwo.Add(stringTwo);
                    }
                }
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; existsInTwo.ToList();
        }
    }
}&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://arachnode.net/aggbug.aspx?PostID=43004" width="1" height="1"&gt;</content><author><name>arachnode.net</name><uri>http://arachnode.net/members/arachnode.net/default.aspx</uri></author></entry><entry><title>Recursive tree traversal orders...</title><link rel="alternate" type="text/html" href="/blogs/programming_challenges/archive/2009/09/25/recursive-tree-traversal-orders.aspx" /><id>/blogs/programming_challenges/archive/2009/09/25/recursive-tree-traversal-orders.aspx</id><published>2009-09-25T16:05:00Z</published><updated>2009-09-25T16:05:00Z</updated><content type="html">&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #a31515; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; VMTree
{
    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; Queue&amp;lt;Node&amp;gt; Queue = &lt;span class="kwrd"&gt;new&lt;/span&gt; Queue&amp;lt;Node&amp;gt;();

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main()
        {
            &lt;span class="kwrd"&gt;var&lt;/span&gt; node1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node();
            &lt;span class="kwrd"&gt;var&lt;/span&gt; node2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node();
            &lt;span class="kwrd"&gt;var&lt;/span&gt; node3 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node();
            &lt;span class="kwrd"&gt;var&lt;/span&gt; node4 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node();
            &lt;span class="kwrd"&gt;var&lt;/span&gt; node5 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node();
            &lt;span class="kwrd"&gt;var&lt;/span&gt; node6 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node();
            &lt;span class="kwrd"&gt;var&lt;/span&gt; node7 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Node();

            node1.Value = 1;
            node2.Value = 2;
            node3.Value = 3;
            node4.Value = 4;
            node5.Value = 5;
            node6.Value = 6;
            node7.Value = 7;

            node1.Left = node2;
            node1.Right = node3;

            node2.Left = node4;
            node2.Right = node5;

            node3.Left = node6;
            node3.Right = node7;

            Console.WriteLine(&lt;span class="str"&gt;"PreorderTraversal"&lt;/span&gt;);

            PreorderTraversal(node1);

            Console.WriteLine(&lt;span class="str"&gt;"InorderTraversal"&lt;/span&gt;);

            InorderTraversal(node1);

            Console.WriteLine(&lt;span class="str"&gt;"PostorderTraversal"&lt;/span&gt;);

            PostorderTraversal(node1);

            Console.WriteLine(&lt;span class="str"&gt;"BreathFirstTraversal"&lt;/span&gt;);

            BreadthFirstTraversal(node1);

            Console.ReadLine();
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PreorderTraversal(Node node)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (node == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            Console.WriteLine(node.Value.ToString());

            PreorderTraversal(node.Left);
            PreorderTraversal(node.Right);
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InorderTraversal(Node node)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (node == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            InorderTraversal(node.Left);

            Console.WriteLine(node.Value);

            InorderTraversal(node.Right);
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PostorderTraversal(Node node)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (node == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            PostorderTraversal(node.Left);

            PostorderTraversal(node.Right);

            Console.WriteLine(node.Value);
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BreadthFirstTraversal(Node node)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (node == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            Queue.Enqueue(node.Left);

            Queue.Enqueue(node.Right);

            Console.WriteLine(node.Value);

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Queue.Count != 0)
            {
                BreadthFirstTraversal(Queue.Dequeue());
            }
        }
    }

    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Node
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Value { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Node Left { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Node Right { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ToString()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; Value.ToString();
        }
    }
}&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://arachnode.net/aggbug.aspx?PostID=11024" width="1" height="1"&gt;</content><author><name>arachnode.net</name><uri>http://arachnode.net/members/arachnode.net/default.aspx</uri></author><category term="recursive tree traversal" scheme="http://arachnode.net/blogs/programming_challenges/archive/tags/recursive+tree+traversal/default.aspx" /></entry><entry><title>Reversing a string...</title><link rel="alternate" type="text/html" href="/blogs/programming_challenges/archive/2009/09/25/reversing-a-string.aspx" /><id>/blogs/programming_challenges/archive/2009/09/25/reversing-a-string.aspx</id><published>2009-09-25T16:01:00Z</published><updated>2009-09-25T16:01:00Z</updated><content type="html">&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #a31515; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt;

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; StringReversal
{
    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main()
        {
            &lt;span class="rem"&gt;//this is the easy way...&lt;/span&gt;
            &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; sentence = &lt;span class="str"&gt;"Reverse me."&lt;/span&gt;;

            &lt;span class="kwrd"&gt;var&lt;/span&gt; stringBuilder = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(sentence.Length);

            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = sentence.Length - 1; i &amp;gt;= 0; i--)
            {
                stringBuilder.Append(sentence[ i ]);
            }

            &lt;span class="rem"&gt;//slightly harder, but not by much.&lt;/span&gt;
            Console.WriteLine(stringBuilder.ToString());

            &lt;span class="kwrd"&gt;var&lt;/span&gt; reversed = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;char&lt;/span&gt;[sentence.Length];

            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = sentence.Length - 1, j = 0; i &amp;gt;= 0; i--, j++)
            {
                reversed[j] = sentence[ i ];
            }

            Console.WriteLine(&lt;span class="kwrd"&gt;new&lt;/span&gt; String(reversed));

            &lt;span class="rem"&gt;//OK, finally now, without using a second array.&lt;/span&gt;
            &lt;span class="kwrd"&gt;char&lt;/span&gt;[] reversed2 = sentence.ToCharArray();

            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; reversed2.Length/2; i++)
            {
                &lt;span class="kwrd"&gt;char&lt;/span&gt; temp = reversed2[ i ];

                reversed2[ i ] = reversed2[reversed2.Length - i - 1];

                reversed2[reversed2.Length - i - 1] = temp;
            }

            Console.WriteLine(&lt;span class="kwrd"&gt;new&lt;/span&gt; String(reversed));

            &lt;span class="rem"&gt;//end&lt;/span&gt;
            Console.ReadLine();
        }
    }
}&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://arachnode.net/aggbug.aspx?PostID=11022" width="1" height="1"&gt;</content><author><name>arachnode.net</name><uri>http://arachnode.net/members/arachnode.net/default.aspx</uri></author><category term="reversing a string" scheme="http://arachnode.net/blogs/programming_challenges/archive/tags/reversing+a+string/default.aspx" /></entry><entry><title>Does an array contain the sum...</title><link rel="alternate" type="text/html" href="/blogs/programming_challenges/archive/2009/09/25/does-an-array-contain-the-sum.aspx" /><id>/blogs/programming_challenges/archive/2009/09/25/does-an-array-contain-the-sum.aspx</id><published>2009-09-25T15:59:00Z</published><updated>2009-09-25T15:59:00Z</updated><content type="html">&lt;p&gt;A few days ago someone asked me to detect if an integer could be produced by the sum of two integers in an array of integers.&lt;/p&gt;
&lt;p&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Diagnostics;&lt;br /&gt;&lt;br /&gt;namespace LittleProblem&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; internal class Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static void Main()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; long algorithmTimeForContainsSum1 = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; long algorithmTimeForContainsSum2 = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var algorithmTimesForContainsSum1 = new List&amp;lt;long&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var algorithmTimesForContainsSum2 = new List&amp;lt;long&amp;gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var random = new Random();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var stopwatch = new Stopwatch();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int containedSum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int didNotContainSum = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //main iteration loop...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; 10000; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var list = new List&amp;lt;int&amp;gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //create arrays of varying length, from 1 to the main iteration loop length...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int j = 0; j &amp;lt; i + 1; j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.Add(random.Next(1, 100));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Console.WriteLine(i + &amp;quot; : &amp;quot; + j);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numberToFind = random.Next(1, 100)*2;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stopwatch.Start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool containsSum1ContainsSum = ContainsSum1(list, numberToFind);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stopwatch.Stop();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; algorithmTimeForContainsSum1 += stopwatch.ElapsedMilliseconds;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; algorithmTimesForContainsSum1.Add(stopwatch.ElapsedMilliseconds);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stopwatch.Reset();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stopwatch.Start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool containsSum2ContainsSum = ContainsSum2(list, numberToFind);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stopwatch.Stop();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; algorithmTimeForContainsSum2 += stopwatch.ElapsedMilliseconds;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; algorithmTimesForContainsSum2.Add(stopwatch.ElapsedMilliseconds);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.Assert(containsSum1ContainsSum == containsSum2ContainsSum);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (containsSum1ContainsSum)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; containedSum++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; didNotContainSum++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(containedSum + &amp;quot; : &amp;quot; + didNotContainSum);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(algorithmTimeForContainsSum1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(algorithmTimeForContainsSum2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //O(n^2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static bool ContainsSum1(IList&amp;lt;int&amp;gt; list, int sum)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; list.Count; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int j = 0; j &amp;lt; list.Count; j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i != j)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (list&lt;img src="http://arachnode.net/emoticons/emotion-55.gif" alt="Idea" /&gt; + list[j] == sum)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //O(n log n)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static bool ContainsSum2(List&amp;lt;int&amp;gt; list, int sum)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.Sort();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int j = list.Count - 1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (i != j)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int sum2 = list&lt;img src="http://arachnode.net/emoticons/emotion-55.gif" alt="Idea" /&gt; + list[j];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (list&lt;img src="http://arachnode.net/emoticons/emotion-55.gif" alt="Idea" /&gt; + list[j] == sum)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sum2 &amp;lt; sum)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j--;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://arachnode.net/aggbug.aspx?PostID=11020" width="1" height="1"&gt;</content><author><name>arachnode.net</name><uri>http://arachnode.net/members/arachnode.net/default.aspx</uri></author></entry></feed>