<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;DEcGQXw_eCp7ImA9WxNaGEs.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984</id><updated>2009-12-03T13:47:00.240-05:00</updated><title>Programming Questions</title><subtitle type="html">A collection of short programming questions, of the type often used in interviews, along with a few answers and discussions.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ProgrammingQuestions" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;AkUFSHs4cCp7ImA9WxJQGUo.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-645749222542637263</id><published>2009-06-02T17:30:00.000-04:00</published><updated>2009-06-02T17:30:19.538-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-02T17:30:19.538-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hard" /><title>Facebook Puzzles Rock!</title><content type="html">If you want some really good programming challenges go to the &lt;a href="http://www.facebook.com/careers/puzzles.php"&gt;facebook puzzles page&lt;/a&gt;. These are really neat because you can submit the answer and their email robot will automatically tell you if it is good. So far I've only solved &lt;code&gt;usrbincrash&lt;/code&gt; and &lt;code&gt;smallworld&lt;/code&gt;. A very evil person also described the &lt;code&gt;gattaca&lt;/code&gt; puzzle to me and I've been trying to figure out how to solve it ever since.&lt;br /&gt;
&lt;br /&gt;
From what I've seen these puzzles the very nice characteristic that it is rather easy to come up with a solution. However, that solution will run in exponential time and, thus, will not be accepted by the robot. The solutions they are looking for generally run in quadratic time. Finding these solutions is much, much harder.&lt;br /&gt;
&lt;br /&gt;
If you are confronted with questions like these in an interview, the best strategy is to start by solving them using the obvious-but-slow method. Then, once that works, start to think about how to solve them faster. Sometimes this requires completely re-writing your algorithm, often you will need an &lt;b&gt;aha! moment&lt;/b&gt; (wish there was a way to work up to those!). Other times it seems one can gradually get to the solution by adding small improvements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-645749222542637263?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/645749222542637263/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=645749222542637263" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/645749222542637263?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/645749222542637263?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2009/06/facebook-puzzles-rock.html" title="Facebook Puzzles Rock!" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CUECQH48eSp7ImA9WxRbF0g.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-6768061901767818020</id><published>2008-12-08T11:13:00.003-05:00</published><updated>2008-12-08T11:27:41.071-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-08T11:27:41.071-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="hard" /><title>Small World</title><content type="html">Given a list of points in the plane, write a program that outputs each point along with the three other points that are closest to it. These three points ordered by distance.&lt;br /&gt;&lt;br /&gt;For example, given a set of points where each line is of the form: ID x-coordinate y-coordinate&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;1  0.0      0.0&lt;br /&gt;2  10.1     -10.1&lt;br /&gt;3  -12.2    12.2&lt;br /&gt;4  38.3     38.3&lt;br /&gt;5  79.99    179.99&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Your program should output:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;1 2,3,4&lt;br /&gt;2 1,3,4&lt;br /&gt;3 1,2,4&lt;br /&gt;4 1,2,3&lt;br /&gt;5 4,3,1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is &lt;a href="http://www.facebook.com/jobs_puzzles/#/jobs_puzzles/index.php?puzzle_id=6"&gt;facebook's smallword puzzle&lt;/a&gt;, but I am only asking for a O(n&lt;sup&gt;2&lt;/sup&gt;) solution.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Below is a program that will solve the smallworld puzzle in n-squared time. Notice that this &lt;b&gt;will not be accepted&lt;/b&gt; by the facebook robot as it is too slow so don't even bother submitting it (I already tried). If you don't believe me try running it with 10,000 input coordinates. &lt;br /&gt;&lt;br /&gt;There is a way to do this in close to linear time, can you figure out how?&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="comment"&gt;#!/usr/bin/env python&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt; sys&lt;br /&gt;&lt;span class="keyword"&gt;from&lt;/span&gt; math &lt;span class="keyword"&gt;import&lt;/span&gt; sqrt&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;Node&lt;/span&gt;:&lt;br /&gt;    &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;__init__&lt;/span&gt;(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;,name,x,y):&lt;br /&gt;        &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.name =  name&lt;br /&gt;        &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.x = x&lt;br /&gt;        &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.y = y&lt;br /&gt;        e = Edge(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;,&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;)&lt;br /&gt;        e.distance = 1e1000&lt;br /&gt;        &lt;span class="comment"&gt;#3 smallest edges, sorted by distance&lt;br /&gt;&lt;/span&gt;        &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.closest = [e,e,e]&lt;br /&gt;&lt;br /&gt;    &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;__str__&lt;/span&gt;(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;):&lt;br /&gt;        &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="py-builtins"&gt;str&lt;/span&gt;(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.name) + "&lt;span class="string"&gt; &lt;/span&gt;" + &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.closest[0].b.name + "&lt;span class="string"&gt;,&lt;/span&gt;" + &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.closest[1].b.name + "&lt;span class="string"&gt;,&lt;/span&gt;" + &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.closest[2].b.name&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;#O(1) since we keep self.closest limited to 3&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;addNeighbor&lt;/span&gt;(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;,other):&lt;br /&gt;        """&lt;span class="string"&gt;Add other to the closest list, but only if it is&lt;br /&gt;           closer than the farthest one in the list.&lt;/span&gt;"""&lt;br /&gt;        e = Edge(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;,other) &lt;span class="comment"&gt;# I am always first&lt;br /&gt;&lt;/span&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (e.distance &amp;lt; &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.closest[2].distance):&lt;br /&gt;            &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.closest.append(e)&lt;br /&gt;            &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.closest.sort()&lt;br /&gt;            &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.closest = &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.closest[:3]&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (e.distance &amp;lt; other.closest[2].distance):&lt;br /&gt;            e = Edge(other,&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;) &lt;span class="comment"&gt;# I am always first&lt;br /&gt;&lt;/span&gt;            other.closest.append(e)&lt;br /&gt;            other.closest.sort()&lt;br /&gt;            other.closest = other.closest[:3]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;Edge&lt;/span&gt;:&lt;br /&gt;    &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;__init__&lt;/span&gt;(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;, a, b):&lt;br /&gt;        &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.a = a&lt;br /&gt;        &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.b = b&lt;br /&gt;        dx = (a.x - b.x)&lt;br /&gt;        dy = (a.y - b.y)&lt;br /&gt;        &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.distance = sqrt(dx*dx + dy*dy)&lt;br /&gt;&lt;br /&gt;    &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;__cmp__&lt;/span&gt;(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;,other):&lt;br /&gt;        &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="py-builtins"&gt;cmp&lt;/span&gt;(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.distance, other.distance)&lt;br /&gt;&lt;br /&gt;    &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;__str__&lt;/span&gt;(&lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;):&lt;br /&gt;        &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.a.name + "&lt;span class="string"&gt;-&lt;/span&gt;" + &lt;span class="py-pseudo-keyword"&gt;self&lt;/span&gt;.b.name&lt;br /&gt;&lt;br /&gt;filename = sys.argv[1]&lt;br /&gt;f=&lt;span class="py-builtins"&gt;open&lt;/span&gt;(filename)&lt;br /&gt;nodes = []&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;# O(n), where n is the number of nodes (friends)&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt; l &lt;span class="keyword"&gt;in&lt;/span&gt; f:&lt;br /&gt;    items = l.split()&lt;br /&gt;    n = Node(items[0], &lt;span class="py-builtins"&gt;float&lt;/span&gt;(items[1]), &lt;span class="py-builtins"&gt;float&lt;/span&gt;(items[2]))&lt;br /&gt;    nodes.append(n)&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;# O(n^2)&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt; i &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="py-builtins"&gt;xrange&lt;/span&gt;(0,&lt;span class="py-builtins"&gt;len&lt;/span&gt;(nodes)-1):&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; j &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="py-builtins"&gt;xrange&lt;/span&gt;(i+1,&lt;span class="py-builtins"&gt;len&lt;/span&gt;(nodes)):&lt;br /&gt;        nodes[i].addNeighbor(nodes[j])&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;# O(n)&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt; n &lt;span class="keyword"&gt;in&lt;/span&gt; nodes:&lt;br /&gt;    &lt;span class="keyword"&gt;print&lt;/span&gt; n&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-6768061901767818020?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/6768061901767818020/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=6768061901767818020" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/6768061901767818020?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/6768061901767818020?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/12/small-world_08.html" title="Small World" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;D0MMRH06cSp7ImA9WxZbEkU.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-7603655030554570433</id><published>2008-04-15T14:39:00.002-04:00</published><updated>2008-04-15T14:51:25.319-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-15T14:51:25.319-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="hard" /><title>Nth Smallest Number</title><content type="html">Find the nth smallest number in an unsorted array of numbers. Do it in linear time and without using any added memory.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;It is easy to come up with a solution to this problem: sort it then return the nth element. The problem is that sorting is O(n log n). The insight comes from knowing how quicksort is implemented and then realizing that it can be modified not to sort all elements but only try to sort those parts of the array that contain the nth element.&lt;br /&gt;&lt;br /&gt;One should also ask about the size of n. If n is always a very small or very large (equal to the array size) value then a more straight-forward linear search might be better. The approach shown below works for all values of n and has a linear expected run time.&lt;br /&gt;&lt;br /&gt;This algorithm was first published by C.A.R Hoare (quicksort) and appears in &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201657880/ref=nosim/multiagentcom"&gt;Programming Pearls&lt;/a&gt; as Problem 11.9.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="comment"&gt;#!/usr/bin/python&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;from&lt;/span&gt; Numeric &lt;span class="keyword"&gt;import&lt;/span&gt; *&lt;br /&gt;&lt;span class="keyword"&gt;from&lt;/span&gt; random &lt;span class="keyword"&gt;import&lt;/span&gt; *&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;split&lt;/span&gt;(a):&lt;br /&gt;    """&lt;span class="string"&gt;Using a random pivot, order a such that&lt;br /&gt;    a[0..x-1] &amp;lt;= (pivot = a[x]) &amp;lt; a[x+1..]&lt;br /&gt;    Returns x&lt;/span&gt;"""&lt;br /&gt;    pivot = randrange(0,&lt;span class="py-builtins"&gt;len&lt;/span&gt;(a))&lt;br /&gt;    a[0],a[pivot] = a[pivot],a[0]&lt;br /&gt;    last = 1;&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; i &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="py-builtins"&gt;range&lt;/span&gt;(1,&lt;span class="py-builtins"&gt;len&lt;/span&gt;(a)):&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (a[i] &amp;lt;= a[0]):&lt;br /&gt;            a[last],a[i] = a[i],a[last]&lt;br /&gt;            last = last + 1&lt;br /&gt;    a[last-1],a[0] = a[0],a[last-1]&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; last - 1&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;sortNthElement&lt;/span&gt;(a, n, first = 0):&lt;br /&gt;    """&lt;span class="string"&gt;Sorts at least the nth element of a[].  That is, the nth&lt;br /&gt;    element of a sorted a[] is placed in the nth position. Other&lt;br /&gt;    elements are also moved in a[]."&lt;/span&gt;""&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (&lt;span class="py-builtins"&gt;len&lt;/span&gt;(a) &amp;lt;= 1):&lt;br /&gt;        &lt;span class="keyword"&gt;return&lt;/span&gt;&lt;br /&gt;    mid = split(a)&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (n &amp;lt; first + mid):&lt;br /&gt;        sortNthElement(a[0:mid],n,first)&lt;br /&gt;    &lt;span class="keyword"&gt;elif&lt;/span&gt; (n  &amp;gt; first + mid):&lt;br /&gt;        sortNthElement(a[mid+1:],n,first+mid+1)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;findNthSmallest&lt;/span&gt;(a,n):&lt;br /&gt;    """&lt;span class="string"&gt;Returns the nth smallest number in a[].&lt;br /&gt;       Effects: modifies the order of numbers in a[]&lt;/span&gt;"""&lt;br /&gt;    sortNthElement(a,n)&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; a[n]&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;#Using a regular array, like a = [0,1,2], will not work because&lt;br /&gt;# slicing (a[0:5]) those creates new copies, but slices of an&lt;br /&gt;# array([]) still refer to the original.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;runTests&lt;/span&gt;():&lt;br /&gt;    l = []&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; i &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="py-builtins"&gt;range&lt;/span&gt;(0,1000):&lt;br /&gt;        l.append(i)&lt;br /&gt;    a = array(l)&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; i &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="py-builtins"&gt;range&lt;/span&gt;(0,1000):&lt;br /&gt;        shuffle(a)&lt;br /&gt;        choice = randrange(0,&lt;span class="py-builtins"&gt;len&lt;/span&gt;(a))&lt;br /&gt;        &lt;span class="keyword"&gt;assert&lt;/span&gt; (findNthSmallest(a,choice) == choice)&lt;br /&gt;    &lt;span class="comment"&gt;#now, with repeats&lt;br /&gt;&lt;/span&gt;    l = []&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; i &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="py-builtins"&gt;range&lt;/span&gt;(0,1000):&lt;br /&gt;        l.append(i) &lt;br /&gt;        l.append(i)&lt;br /&gt;    a = array(l)&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; i &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="py-builtins"&gt;range&lt;/span&gt;(0,1000):&lt;br /&gt;        shuffle(a)&lt;br /&gt;        choice = randrange(0,&lt;span class="py-builtins"&gt;len&lt;/span&gt;(a))&lt;br /&gt;        &lt;span class="keyword"&gt;assert&lt;/span&gt; (findNthSmallest(a,choice) == choice / 2)&lt;br /&gt;    &lt;span class="keyword"&gt;print&lt;/span&gt; "&lt;span class="string"&gt;Tests OK&lt;/span&gt;"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-7603655030554570433?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/7603655030554570433/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=7603655030554570433" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/7603655030554570433?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/7603655030554570433?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/nth-smallest-number.html" title="Nth Smallest Number" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CkUHQng-eip7ImA9WxZUGUs.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-6591467002351931106</id><published>2008-04-11T20:24:00.003-04:00</published><updated>2008-04-11T20:30:33.652-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T20:30:33.652-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Search in a Sorted List</title><content type="html">Implement a function which, given an array of sorted numbers and a number will determine if that number is in the array.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;The solution is to implement a binary search algorithm. As &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201657880/ref=nosim/multiagentcom"&gt;Programming Pearls&lt;/a&gt; tells us, this is a notoriously difficult simple algorithm to get correct. Much unit testing is needed. In fact, the one I wrote below is probably wrong.&lt;br /&gt;&lt;br /&gt;There are two implementations: one is recursive and I am fairly sure that one is correct, and the other is iterative and I can't be sure its really completely correct without a lot of testing.&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="preprocessor"&gt;#include&lt;/span&gt;&amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;span class="preprocessor"&gt;#include&lt;/span&gt;&amp;lt;vector&amp;gt;&lt;br /&gt;&lt;span class="preprocessor"&gt;#include&lt;/span&gt;&amp;lt;algorithm&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="keyword"&gt;namespace&lt;/span&gt; &lt;span class="reference"&gt;std&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class="type"&gt;bool&lt;/span&gt; &lt;span class="function-name"&gt;myBinarySearchHelper&lt;/span&gt;(&lt;span class="type"&gt;vector&lt;/span&gt;&amp;lt;&lt;span class="type"&gt;int&lt;/span&gt;&amp;gt; &amp;amp; &lt;span class="variable-name"&gt;v&lt;/span&gt;, &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;start&lt;/span&gt;, &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;end&lt;/span&gt;, &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;e&lt;/span&gt;){&lt;br /&gt;  &lt;span class="keyword"&gt;if&lt;/span&gt; (start == end) &lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; (e == v[start]);&lt;br /&gt;  &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;mid&lt;/span&gt; = (end+start)/2;&lt;br /&gt;  &lt;span class="keyword"&gt;if&lt;/span&gt; (e &amp;lt;= v[mid])&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; myBinarySearchHelper(v,start,mid,e);&lt;br /&gt;  &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; myBinarySearchHelper(v,mid+1,end,e);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="type"&gt;bool&lt;/span&gt; &lt;span class="function-name"&gt;myBinarySearchRecursive&lt;/span&gt;(&lt;span class="type"&gt;vector&lt;/span&gt;&amp;lt;&lt;span class="type"&gt;int&lt;/span&gt;&amp;gt; &amp;amp; &lt;span class="variable-name"&gt;v&lt;/span&gt;, &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;e&lt;/span&gt;){&lt;br /&gt;  &lt;span class="keyword"&gt;return&lt;/span&gt; myBinarySearchHelper(v, 0 , v.size(), e);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="type"&gt;bool&lt;/span&gt; &lt;span class="function-name"&gt;myBinarySearch&lt;/span&gt;(&lt;span class="type"&gt;vector&lt;/span&gt;&amp;lt;&lt;span class="type"&gt;int&lt;/span&gt;&amp;gt; &amp;amp; &lt;span class="variable-name"&gt;v&lt;/span&gt;, &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;e&lt;/span&gt;){&lt;br /&gt;  &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;start&lt;/span&gt; = 0;&lt;br /&gt;  &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;end&lt;/span&gt; = v.size();&lt;br /&gt;  &lt;span class="keyword"&gt;while&lt;/span&gt; (start &amp;lt; end){&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;mid&lt;/span&gt; = (end+start)/2;&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (e == v[mid])&lt;br /&gt;      &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="constant"&gt;true&lt;/span&gt;;&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (e &amp;lt; v[mid])&lt;br /&gt;      end = mid;&lt;br /&gt;    &lt;span class="keyword"&gt;else&lt;/span&gt;&lt;br /&gt;      start = mid + 1;&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;print&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;e&lt;/span&gt;){&lt;br /&gt;  cout &amp;lt;&amp;lt; e &amp;lt;&amp;lt; '&lt;span class="string"&gt; &lt;/span&gt;';&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt;() {&lt;br /&gt;  &lt;span class="type"&gt;vector&lt;/span&gt;&amp;lt;&lt;span class="type"&gt;int&lt;/span&gt;&amp;gt; &lt;span class="variable-name"&gt;v&lt;/span&gt;;&lt;br /&gt;  v.push_back(1); v.push_back(2); v.push_back(3); &lt;br /&gt;  v.push_back(4); v.push_back(6); v.push_back(8);&lt;br /&gt;  v.push_back(9); v.push_back(10);&lt;br /&gt;  &lt;br /&gt;  for_each(v.begin(), v.end(), print);&lt;br /&gt;  cout &amp;lt;&amp;lt; endl;&lt;br /&gt;  &lt;br /&gt;  &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; = 3; i&amp;lt; 12; i++){&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (myBinarySearch(v, i)) &lt;br /&gt;      cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; "&lt;span class="string"&gt; is in &lt;/span&gt;" &amp;lt;&amp;lt; endl;&lt;br /&gt;    &lt;span class="keyword"&gt;else&lt;/span&gt;&lt;br /&gt;      cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; "&lt;span class="string"&gt; is not in&lt;/span&gt;" &amp;lt;&amp;lt; endl;&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="keyword"&gt;return&lt;/span&gt; 0;&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-6591467002351931106?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/6591467002351931106/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=6591467002351931106" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/6591467002351931106?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/6591467002351931106?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/search-in-sorted-list.html" title="Search in a Sorted List" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;AkMAQnk-eSp7ImA9WxZUGUg.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-4575138402237954227</id><published>2008-04-11T19:44:00.002-04:00</published><updated>2008-04-11T20:00:43.751-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T20:00:43.751-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="big-O" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Running Time</title><content type="html">Calculate the time T(N) that each of the following recursive functions takes to execute. That is, find the recursive function T(N), for example: T(N) = 3* T(N/2). You do not need to solve the recursive equation.&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="function-name"&gt;foo&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;N&lt;/span&gt;) {&lt;br /&gt;  &lt;span class="keyword"&gt;if&lt;/span&gt; (N == 0)&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; 1;&lt;br /&gt;  &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; N * foo(N-1);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="function-name"&gt;bar&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;N&lt;/span&gt;) {&lt;br /&gt;  &lt;span class="keyword"&gt;if&lt;/span&gt; (N == 1)&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; 1;&lt;br /&gt;  &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; = 1; i &amp;lt; N; i++){&lt;br /&gt;    bar(N-1);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="function-name"&gt;bazo&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;N&lt;/span&gt;) {&lt;br /&gt;  &lt;span class="keyword"&gt;if&lt;/span&gt; (N &amp;lt; 1)&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; 1;&lt;br /&gt;  &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; = 1; i &amp;lt; N*N; i++){&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (j = 1; j &amp;lt; i; j++) {&lt;br /&gt;      bazo(N/2);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="function-name"&gt;hard&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;N&lt;/span&gt;) {&lt;br /&gt;  &lt;span class="keyword"&gt;if&lt;/span&gt; (N &amp;lt; 1)&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; 1;&lt;br /&gt;  &lt;span class="keyword"&gt;return&lt;/span&gt; (N*hard(N/2))/hard(N-1);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Any computer science student shoud be able to calculate hat:&lt;br /&gt;&lt;br /&gt;foo(N) = T(N) = T(N-1) = T(N)&lt;br /&gt;bar(N) = T(N) = (N-1)*T(N-1)&lt;br /&gt;bazo(N) = T(N) = N2*O(N2)*T(N/2)&lt;br /&gt;hard(N) = T(N) = T(N/2)+T(N-1)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-4575138402237954227?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/4575138402237954227/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=4575138402237954227" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/4575138402237954227?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/4575138402237954227?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/running-time.html" title="Running Time" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DUMGSHwyeip7ImA9WxZUGUg.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-4588117297648691821</id><published>2008-04-11T18:51:00.002-04:00</published><updated>2008-04-11T19:43:49.292-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T19:43:49.292-04:00</app:edited><title>DNA</title><content type="html">As you know, the DNA that guides the development of all living things is just a very long string where each character is one of the four letters: A, G, C, T. Implement a class called DNAString which stores as its member variable one such string, can turn itself into a string, and implements a function called positionOf which takes as input a string and returns the starting position of that substring in the DNA string.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;For the positionOf we search from left to right. The inner &lt;code&gt;break&lt;/code&gt; means we don't waste time on impossible matches.&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;DNAString&lt;/span&gt; {&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/** The gene. I choose to represent it as an array since its is then&lt;br /&gt;     more natural to access random positions and I can change it in&lt;br /&gt;     place without copying the whole thing (Remember: Strings are&lt;br /&gt;     immutable). */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;protected&lt;/span&gt; &lt;span class="type"&gt;char&lt;/span&gt;[] &lt;span class="variable-name"&gt;strand&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;DNAString&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;length&lt;/span&gt;){&lt;br /&gt;    strand= &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;char&lt;/span&gt;[length];&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;set&lt;/span&gt;(&lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;g&lt;/span&gt;){&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i &amp;lt; g.length(); i++){&lt;br /&gt;      strand[i] = g.charAt(i);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="function-name"&gt;toString&lt;/span&gt;(){&lt;br /&gt;    &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;result&lt;/span&gt; = "";&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;char&lt;/span&gt; &lt;span class="variable-name"&gt;g&lt;/span&gt; : strand){&lt;br /&gt;      result += g;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; result;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/** &lt;/span&gt;&lt;span class="doc-string"&gt;&lt;span class="constant"&gt;@param&lt;/span&gt;&lt;/span&gt;&lt;span class="doc-string"&gt; s the substring we are looking for.&lt;br /&gt;  Returns the starting position of s in this DNAString or -1 if s is&lt;br /&gt;  not found anywhere in this strand */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="function-name"&gt;positionOf&lt;/span&gt;(&lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;s&lt;/span&gt;){&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i &amp;lt; strand.length - s.length(); i++){&lt;br /&gt;      &lt;span class="type"&gt;boolean&lt;/span&gt; &lt;span class="variable-name"&gt;match&lt;/span&gt; = true;&lt;br /&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;j&lt;/span&gt; =0; j&amp;lt; s.length(); j++){&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (strand[i+j] != s.charAt(j)) {&lt;br /&gt;          match = false;&lt;br /&gt;          &lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt; (match) {&lt;br /&gt;        &lt;span class="keyword"&gt;return&lt;/span&gt; i;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; -1;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt; (&lt;span class="type"&gt;String&lt;/span&gt; [] &lt;span class="variable-name"&gt;args&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;joeDNA&lt;/span&gt; = "&lt;span class="string"&gt;AGCTGAAAAAGTCCCCACGATCATCAAGACTTGACTACGCTAGC&lt;/span&gt;";&lt;br /&gt;    &lt;span class="type"&gt;DNAString&lt;/span&gt; &lt;span class="variable-name"&gt;joe&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;DNAString&lt;/span&gt;(joeDNA.length());&lt;br /&gt;    joe.set(joeDNA);&lt;br /&gt;    System.out.println(joe);&lt;br /&gt;&lt;br /&gt;    System.out.println("&lt;span class="string"&gt;AAGT is first found at position &lt;/span&gt;" + joe.positionOf("&lt;span class="string"&gt;AAGT&lt;/span&gt;"));&lt;br /&gt;    &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-4588117297648691821?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/4588117297648691821/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=4588117297648691821" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/4588117297648691821?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/4588117297648691821?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/dna.html" title="DNA" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DkYGQXY9eyp7ImA9WxZUGUg.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-431347144965738594</id><published>2008-04-11T18:46:00.002-04:00</published><updated>2008-04-11T18:48:40.863-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T18:48:40.863-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Fibonacci</title><content type="html">The Fibonacci series consists of a series of numbers where the next number is calculated by adding the previous two. The first two numbers in the series are 1. That is, the series starts out:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;1&lt;br /&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;5&lt;br /&gt;8&lt;br /&gt;13&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Write a function which takes as input an integer x an returns an array of integers filled with fibonacci numbers in order.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;First declare the array then fill it with the appropriate numbers by iterating from the smallest to the biggest.&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;Fibonacci&lt;/span&gt; {&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="function-name"&gt;getSeries&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;x&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;result&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[x];&lt;br /&gt;    result[0]= 1;&lt;br /&gt;    result[1]= 1;&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=2; i &amp;lt; x; i++){&lt;br /&gt;      result[i] = result[i-1] + result[i-2];&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; result;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt; (&lt;span class="type"&gt;String&lt;/span&gt; [] &lt;span class="variable-name"&gt;args&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;fib&lt;/span&gt; = Fibonacci.getSeries(20);&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; : fib){&lt;br /&gt;      System.out.println(i);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-431347144965738594?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/431347144965738594/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=431347144965738594" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/431347144965738594?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/431347144965738594?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/fibonacci.html" title="Fibonacci" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CU4FSHg7eyp7ImA9WxZUGUg.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-8360552781321580397</id><published>2008-04-11T18:38:00.003-04:00</published><updated>2008-04-11T18:45:19.603-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T18:45:19.603-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Magic Square</title><content type="html">A 3x3 normal magic square is a 3x3 grid where the numbers on each row, each column, and both diagonals  all add up to the same number, and the square contains the numbers 1 to 9 exactly. For example, the following is the Lo Shu magic square:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;4  9  2&lt;br /&gt;3  5  7&lt;br /&gt;8  1  6&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Implement a function which, given a two-dimensional 3 by 3 array of ints returns a boolean that tells us if the given square (represented by the array) is a normal 3 by 3 magic square or not.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;All we have to do is check all rows, all cols, and diagonals. A bit tedious but straightforward. Is there a solution that uses significantly fewer lines of code? I can't think of one (in Java).&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;Magic&lt;/span&gt; {&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;boolean&lt;/span&gt; &lt;span class="function-name"&gt;check&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt;[][] &lt;span class="variable-name"&gt;a&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;sum&lt;/span&gt;,&lt;span class="variable-name"&gt;s&lt;/span&gt;;&lt;br /&gt;    sum=0;&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;col&lt;/span&gt; = 0; col&amp;lt; 3; col++) &lt;span class="comment"&gt;//first set the sum (15 always?)&lt;br /&gt;&lt;/span&gt;      sum += a[0][col];&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//check the next two rows&lt;br /&gt;&lt;/span&gt;    s = 0;&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;row&lt;/span&gt; = 1; row &amp;lt; 3; row++){&lt;br /&gt;      s = 0;&lt;br /&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;col&lt;/span&gt; = 0; col&amp;lt; 3; col++) &lt;br /&gt;        s += a[row][col];&lt;br /&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt; (s != sum)&lt;br /&gt;        &lt;span class="keyword"&gt;return&lt;/span&gt; false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//check columns&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;col&lt;/span&gt; = 0; col&amp;lt; 3; col++) {&lt;br /&gt;      s = 0;&lt;br /&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;row&lt;/span&gt; = 0; row &amp;lt; 3; row++){&lt;br /&gt;        s += a[row][col];&lt;br /&gt;      }&lt;br /&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt; (s != sum)&lt;br /&gt;        &lt;span class="keyword"&gt;return&lt;/span&gt; false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//check diagonal 1&lt;br /&gt;&lt;/span&gt;    s =0;&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;row&lt;/span&gt; = 0; row &amp;lt; 3; row++){&lt;br /&gt;      s += a[row][row];&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (s != sum)&lt;br /&gt;      &lt;span class="keyword"&gt;return&lt;/span&gt; false;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//check diagonal 2&lt;br /&gt;&lt;/span&gt;    s =0;&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;row&lt;/span&gt; = 0; row &amp;lt; 3; row++){&lt;br /&gt;      s += a[row][2 - row];&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (s != sum)&lt;br /&gt;      &lt;span class="keyword"&gt;return&lt;/span&gt; false;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//check that the numbers 1..9 appear&lt;br /&gt;&lt;/span&gt;    &lt;span class="comment"&gt;//We use an array of booleans and mark each one as we find it.&lt;br /&gt;&lt;/span&gt;    &lt;span class="type"&gt;boolean&lt;/span&gt;[] &lt;span class="variable-name"&gt;appears&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;boolean&lt;/span&gt;[9];&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i &amp;lt; 9; i++){&lt;br /&gt;      appears[i] = false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//Check each one&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;col&lt;/span&gt; = 0; col&amp;lt; 3; col++) {&lt;br /&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;row&lt;/span&gt; = 0; row &amp;lt; 3; row++){&lt;br /&gt;        &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;num&lt;/span&gt; = a[row][col];&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (appears[num-1]) &lt;span class="comment"&gt;//its easy to forget that -1.&lt;br /&gt;&lt;/span&gt;          &lt;span class="keyword"&gt;return&lt;/span&gt; false; &lt;span class="comment"&gt;//oops, this number appears twice!&lt;br /&gt;&lt;/span&gt;        appears[num-1] = true;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//I could check here that all the values in appears are true but&lt;br /&gt;&lt;/span&gt;    &lt;span class="comment"&gt;// since there are 9 positions in both appears and a[][], I know&lt;br /&gt;&lt;/span&gt;    &lt;span class="comment"&gt;// that if we get to this point then all the values in appears[]&lt;br /&gt;&lt;/span&gt;    &lt;span class="comment"&gt;// must be true!&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; true;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt; (&lt;span class="type"&gt;String&lt;/span&gt;[] &lt;span class="variable-name"&gt;args&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt;[][] &lt;span class="variable-name"&gt;loshu&lt;/span&gt; = {{4,9,2},{3,5,7},{8,1,6}};&lt;br /&gt;    System.out.println(Magic.check(loshu));&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt;[][] &lt;span class="variable-name"&gt;no1&lt;/span&gt; = {{4,9,2},{3,7,5},{8,1,6}};&lt;br /&gt;    System.out.println(Magic.check(no1));&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt;[][] &lt;span class="variable-name"&gt;no2&lt;/span&gt; = {{4,9,2},{3,3,5},{8,1,6}};&lt;br /&gt;    System.out.println(Magic.check(no2));&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="doc-string"&gt;/** From wikipedia: The Lo Shu square (3&amp;#215;3 magic square)&lt;br /&gt;&lt;br /&gt;Chinese literature dating from as early as 2800 BC tells the legend of&lt;br /&gt;Lo Shu or "scroll of the river Lo". In ancient China, there was a huge&lt;br /&gt;flood. The people tried to offer some sacrifice to the river god of&lt;br /&gt;one of the flooding rivers, the Lo river, to calm his anger. Then,&lt;br /&gt;there emerged from the water a turtle with a curious figure/pattern on&lt;br /&gt;its shell; there were circular dots of numbers that were arranged in a&lt;br /&gt;three by three nine-grid pattern such that the sum of the numbers in&lt;br /&gt;each row, column and diagonal was the same: 15. This number is also&lt;br /&gt;equal to the number of days in each of the 24 cycles of the Chinese&lt;br /&gt;solar year. This pattern, in a certain way, was used by the people in&lt;br /&gt;controlling the river. */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-8360552781321580397?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/8360552781321580397/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=8360552781321580397" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/8360552781321580397?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/8360552781321580397?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/magic-square.html" title="Magic Square" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CUQHR38zcSp7ImA9WxZUGUg.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-1897447426409100789</id><published>2008-04-11T18:27:00.003-04:00</published><updated>2008-04-11T18:35:36.189-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T18:35:36.189-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>2D Cellular Automata</title><content type="html">A two-dimensional cellular automata implements the same idea but in a two-dimensional array. The most famous one is Conway's game of life which uses the following rules:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Any live cell with fewer than two live neighbours dies, as if by loneliness.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Any live cell with more than three live neighbours dies, as if by overcrowding.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Any live cell with two or three live neighbours lives, unchanged, to the next generation.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Any dead cell with exactly three live neighbours comes to life.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Where the neighbors of a cell are those which immediately surround it. Thus, if you start with&lt;br /&gt;&lt;pre&gt;.......&lt;br /&gt;.......&lt;br /&gt;.......&lt;br /&gt;..XXX..&lt;br /&gt;.......&lt;br /&gt;.......&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;then the next step is&lt;br /&gt;&lt;pre&gt;.......&lt;br /&gt;.......&lt;br /&gt;...X...&lt;br /&gt;...X...&lt;br /&gt;...X...&lt;br /&gt;.......&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Write a class which implements and displays Conway's game of life. This time, try to make the cells on the edge (border) neighbors of those at the other side, that is, make the space wrap around.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;This program is too long to fit on a whiteboard (at least, in Java) but a good programmer should be able to write out the basic functions in a piece of paper, but getting all the details correct (such as the module arithmetic and the update function) will likely require testing. It is a good test of your debugging abilities as well as your matrix manipulation capabilities.&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;TwoDCell&lt;/span&gt; {&lt;br /&gt;  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[][] &lt;span class="variable-name"&gt;board&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/**Creates a square board */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;TwoDCell&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;length&lt;/span&gt;){&lt;br /&gt;    board = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[length][length];&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; = 0; i &amp;lt; board.length; i++)&lt;br /&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;j&lt;/span&gt;=0; j &amp;lt; board[i].length; j++)&lt;br /&gt;        board[i][j] = 0;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/** Ugly hack, just for testing. Its a flipper. */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;setup&lt;/span&gt;(){&lt;br /&gt;    board[4][3] = 1;&lt;br /&gt;    board[4][4] = 1;&lt;br /&gt;    board[4][5] = 1;}&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/** A true modulo function for the board. Negative numbers get&lt;br /&gt;     wrapped around, as well as numbers bigger than the size of the&lt;br /&gt;     board. Only works if n &lt;/span&gt;&lt;span class="doc-string"&gt;&lt;span class="warning"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="doc-string"&gt;= -board.length.*/&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="function-name"&gt;mod&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;n&lt;/span&gt;){&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (n &amp;lt; 0) &lt;span class="keyword"&gt;return&lt;/span&gt; board.length + n;&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; n % board.length;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/** Return the number of neighbors, assumes that x,y are not on the&lt;br /&gt;     border of the board. This works out because I set 0 to be a dead&lt;br /&gt;     cell and 1 to be a live cell...sneaky me.*/&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="function-name"&gt;getNumNeighbors&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;x&lt;/span&gt;, &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;y&lt;/span&gt;){&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="comment"&gt;//picture this&lt;br /&gt;&lt;/span&gt;      board[mod(x-1)][mod(y-1)] + board[x][mod(y-1)] + board[mod(x+1)][mod(y-1)] + &lt;br /&gt;      board[mod(x-1)][y]                             + board[mod(x+1)][y] +&lt;br /&gt;      board[mod(x-1)][mod(y+1)] + board[x][mod(y+1)] + board[mod(x+1)][mod(y+1)];&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  &lt;span class="doc-string"&gt;/** Take a step in Conway's Game of Life */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;step&lt;/span&gt;(){&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt;[][] &lt;span class="variable-name"&gt;newBoard&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[board.length][board.length];&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//Apply the rule of Life&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; = 0; i &amp;lt; board.length; i++)&lt;br /&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;j&lt;/span&gt;=0; j &amp;lt; board[i].length; j++){&lt;br /&gt;        &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;neighbors&lt;/span&gt; = getNumNeighbors(i,j);&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (board[i][j] == 1) {&lt;br /&gt;          &lt;span class="keyword"&gt;if&lt;/span&gt; (neighbors &amp;lt; 2) {&lt;br /&gt;            newBoard[i][j] = 0;}&lt;br /&gt;          &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; (neighbors &amp;lt; 4) {&lt;br /&gt;            newBoard[i][j] = 1;}&lt;br /&gt;          &lt;span class="keyword"&gt;else&lt;/span&gt; { &lt;span class="comment"&gt;//5 or more &lt;br /&gt;&lt;/span&gt;            newBoard[i][j] = 0;}}&lt;br /&gt;        &lt;span class="keyword"&gt;else&lt;/span&gt; {&lt;span class="comment"&gt;//dead cell&lt;br /&gt;&lt;/span&gt;          &lt;span class="keyword"&gt;if&lt;/span&gt; (neighbors == 3) {&lt;br /&gt;            newBoard[i][j] = 1;}&lt;br /&gt;          &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;br /&gt;            newBoard[i][j] = 0;}};&lt;br /&gt;&lt;br /&gt;    board = newBoard;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/**The Obvious visualization */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="function-name"&gt;toString&lt;/span&gt;(){&lt;br /&gt;    &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;result&lt;/span&gt; = "";&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i&amp;lt; board.length; i++){&lt;br /&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;j&lt;/span&gt;=1; j &amp;lt; board.length; j++){&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (board[i][j] == 0) &lt;br /&gt;          result += '&lt;span class="string"&gt;.&lt;/span&gt;';&lt;br /&gt;        &lt;span class="keyword"&gt;else&lt;/span&gt;&lt;br /&gt;          result += '&lt;span class="string"&gt;X&lt;/span&gt;';}&lt;br /&gt;      result += '&lt;span class="string"&gt;\n&lt;/span&gt;';}&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; result;}&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;//Unit testing&lt;br /&gt;&lt;/span&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt;(&lt;span class="type"&gt;String&lt;/span&gt;[] &lt;span class="variable-name"&gt;argc&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;TwoDCell&lt;/span&gt; &lt;span class="variable-name"&gt;life&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;TwoDCell&lt;/span&gt;(8);&lt;br /&gt;    life.setup();&lt;br /&gt;    System.out.println(life);&lt;br /&gt;    life.step();&lt;br /&gt;    System.out.println(life);&lt;br /&gt;    life.step();&lt;br /&gt;    System.out.println(life);&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-1897447426409100789?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/1897447426409100789/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=1897447426409100789" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/1897447426409100789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/1897447426409100789?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/2d-cellular-automata.html" title="2D Cellular Automata" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEAMRH49fSp7ImA9WxZUGUg.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-1786844450056818823</id><published>2008-04-11T18:22:00.002-04:00</published><updated>2008-04-11T18:26:25.065-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T18:26:25.065-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Cellular Automata</title><content type="html">A one-dimensional cellular automata is an array where each position is either off (.) or on (X). At each time step the contents of each cell are updated using a simple rule such as the following:&lt;br /&gt;&lt;br /&gt;    * If a cell is off then next time it will be in the same state that the cell to its right is currently at.&lt;br /&gt;    * If a cell is on then next time it will be off if both of its neighbors are currently on, otherwise it will stay on.&lt;br /&gt;&lt;br /&gt;For example, if you start with&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;....X&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;then next time you will have&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;...XX&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and the next two steps will be&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;..XXX&lt;br /&gt;.XX.X&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Write a problem that implements and displays this one dimensional cellular automata rule. You can assume that the first and last positions never change their state.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;This problem might be a bit too long to solve on a whiteboard (at least in Java) but you should be able to write it down in one sheet of paper. All we do is create a new row from the old one.&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;OneDCell&lt;/span&gt; {&lt;br /&gt;  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="type"&gt;char&lt;/span&gt;[] &lt;span class="variable-name"&gt;row&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;OneDCell&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;length&lt;/span&gt;){&lt;br /&gt;    row = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;char&lt;/span&gt;[length];&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; = 0; i &amp;lt; row.length; i++){&lt;br /&gt;      row[i] = '&lt;span class="string"&gt;.&lt;/span&gt;';}&lt;br /&gt;    row[row.length-1] = '&lt;span class="string"&gt;X&lt;/span&gt;';&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/** Implement Wolfram's rule 110.&lt;br /&gt;   * Did you know: Stephen Wolfram believes&lt;br /&gt;   * the universe is best&lt;br /&gt;   * understood using cellular automata */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;step&lt;/span&gt;(){&lt;br /&gt;    &lt;span class="type"&gt;char&lt;/span&gt;[] &lt;span class="variable-name"&gt;newRow&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;char&lt;/span&gt;[row.length];&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//To Do: Generalize this to encode anyone of the 2^8 rules.&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;x&lt;/span&gt;=1; x &amp;lt; row.length -1; x++){&lt;br /&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt; (row[x] == '&lt;span class="string"&gt;.&lt;/span&gt;'){&lt;br /&gt;        newRow[x] = row[x+1];&lt;br /&gt;      }&lt;br /&gt;      &lt;span class="keyword"&gt;else&lt;/span&gt; {&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (row[x-1] == '&lt;span class="string"&gt;X&lt;/span&gt;' &amp;amp;&amp;amp; row[x+1] == '&lt;span class="string"&gt;X&lt;/span&gt;'){&lt;br /&gt;          newRow[x] = '&lt;span class="string"&gt;.&lt;/span&gt;';}&lt;br /&gt;        &lt;span class="keyword"&gt;else&lt;/span&gt; {&lt;br /&gt;          newRow[x] = '&lt;span class="string"&gt;X&lt;/span&gt;';}&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="comment"&gt;//Set the first and last&lt;br /&gt;&lt;/span&gt;    newRow[0] = row[0];&lt;br /&gt;    newRow[row.length-1] = row[row.length-1];&lt;br /&gt;    row = newRow;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/**The Obvious visualization */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="function-name"&gt;toString&lt;/span&gt;(){&lt;br /&gt;    &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;result&lt;/span&gt; = "";&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i&amp;lt; row.length; i++){&lt;br /&gt;      result += row[i];}&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; result;}&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;//Unit testing&lt;br /&gt;&lt;/span&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt;(&lt;span class="type"&gt;String&lt;/span&gt;[] &lt;span class="variable-name"&gt;argc&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;OneDCell&lt;/span&gt; &lt;span class="variable-name"&gt;ca&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;OneDCell&lt;/span&gt;(80);&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;//Behold! complexity arises out of simplicity!&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;while&lt;/span&gt; (true) {&lt;br /&gt;      System.out.println(ca);&lt;br /&gt;      ca.step();}&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-1786844450056818823?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/1786844450056818823/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=1786844450056818823" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/1786844450056818823?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/1786844450056818823?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/cellular-automata.html" title="Cellular Automata" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEQBSXg5cCp7ImA9WxZUGUg.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-1215685822466720019</id><published>2008-04-11T18:10:00.004-04:00</published><updated>2008-04-11T18:19:18.628-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T18:19:18.628-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Make a Distribution</title><content type="html">Write a function which takes as input a string that consists only of the digits from 0 to 9 and outputs a distribution (like a grade distribution) showing how many times each digit appears in the string. Specifically, the following main&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt;(&lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;args&lt;/span&gt;[]){&lt;br /&gt;    &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;s&lt;/span&gt; = "&lt;span class="string"&gt;01223334444566&lt;/span&gt;";&lt;br /&gt;    Distribution.doDistribution(s);&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;should produce the following output:&lt;pre&gt;&lt;br /&gt;0:*&lt;br /&gt;1:*&lt;br /&gt;2:**&lt;br /&gt;3:***&lt;br /&gt;4:****&lt;br /&gt;5:*&lt;br /&gt;6:**&lt;br /&gt;7:&lt;br /&gt;8:&lt;br /&gt;9:&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;We have an outer look that iterates over the numbers (chars) 0 to 9 and then we count how many times each one has occurred. Note that while the numbers in the example are in order, the instructions do not make that claim. A good programmer should realize that if the number are, in fact, always in order that we could re-write this program to use only one loop.&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;Distribution&lt;/span&gt;{&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;doDistribution&lt;/span&gt;(&lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;s&lt;/span&gt;){&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;char&lt;/span&gt; &lt;span class="variable-name"&gt;c&lt;/span&gt; = '&lt;span class="string"&gt;0&lt;/span&gt;'; c &amp;lt;= '&lt;span class="string"&gt;9&lt;/span&gt;' ; c++){&lt;br /&gt;      &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;index&lt;/span&gt; = 0;&lt;br /&gt;      &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;count&lt;/span&gt; = 0;&lt;br /&gt;      &lt;span class="keyword"&gt;while&lt;/span&gt; ((index = s.indexOf(c,index)) != -1){&lt;br /&gt;        count++;&lt;br /&gt;        index++;&lt;br /&gt;      }&lt;br /&gt;      System.out.print(c + "&lt;span class="string"&gt;:&lt;/span&gt;");&lt;br /&gt;      &lt;span class="keyword"&gt;for&lt;/span&gt; (;count &amp;gt; 0; count--){&lt;br /&gt;        System.out.print("&lt;span class="string"&gt;*&lt;/span&gt;");&lt;br /&gt;      }&lt;br /&gt;      System.out.println();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt;(&lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;args&lt;/span&gt;[]){&lt;br /&gt;    &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;s&lt;/span&gt; = "&lt;span class="string"&gt;01223334444566&lt;/span&gt;";&lt;br /&gt;    Distribution.doDistribution(s);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-1215685822466720019?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/1215685822466720019/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=1215685822466720019" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/1215685822466720019?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/1215685822466720019?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/make-distribution.html" title="Make a Distribution" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;CEUCQ3c7eCp7ImA9WxZUGUg.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-6658172179881315185</id><published>2008-04-11T18:02:00.003-04:00</published><updated>2008-04-11T18:17:42.900-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T18:17:42.900-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Limit Instances</title><content type="html">Implement a class that limits the number of instances of itself to 4.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;The answer will depend on the programming language. In fact, this might be technically impossible in some languages. However, in C++, Java, C#, and most others the basic idea is to use a static (class) variable to keep track of the number of instances and then write a constructor that refuses to work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;stooge&lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;num&lt;/span&gt; = 0; &lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;stooge&lt;/span&gt;( )&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (num &amp;lt; 4)&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="keyword"&gt;super&lt;/span&gt;( );&lt;br /&gt;      num++;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="keyword"&gt;else&lt;/span&gt; {&lt;br /&gt;      &lt;span class="keyword"&gt;throw&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;Exception&lt;/span&gt;("&lt;span class="string"&gt;ERROR: too many instances&lt;/span&gt;");&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-6658172179881315185?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/6658172179881315185/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=6658172179881315185" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/6658172179881315185?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/6658172179881315185?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/limit-instances.html" title="Limit Instances" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CUMCQXoycCp7ImA9WxZUGU4.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-8428841566896156881</id><published>2008-04-11T12:59:00.002-04:00</published><updated>2008-04-11T13:04:20.498-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T13:04:20.498-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Bigger than N</title><content type="html">Write a function which, given an array and a number n, returns an array of all the numbers in the original array that are bigger than n.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Just search the array linearly and find all the elements that are bigger than n. The one tricky part is that you need to save these in an array and, depending on the language/libraries you are using, you might need to declare the size of the array first. Here I decided to first count the number of items bigger than n, then declare the array, then populate. This program must go over the array twice but only uses as much memory as needed.&lt;br /&gt;&lt;br /&gt;A better solution would use an extensible array (ArrayList in Java).&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;BiggerThanN&lt;/span&gt; {&lt;br /&gt;  &lt;span class="doc-string"&gt;/** &lt;/span&gt;&lt;span class="doc-string"&gt;&lt;span class="constant"&gt;@param&lt;/span&gt;&lt;/span&gt;&lt;span class="doc-string"&gt; a an array of integers of length &lt;/span&gt;&lt;span class="doc-string"&gt;&lt;span class="warning"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="doc-string"&gt; 0&lt;br /&gt;      &lt;/span&gt;&lt;span class="doc-string"&gt;&lt;span class="constant"&gt;@param&lt;/span&gt;&lt;/span&gt;&lt;span class="doc-string"&gt; n&lt;br /&gt;      Returns an array of all a[i] for which a[i] &lt;/span&gt;&lt;span class="doc-string"&gt;&lt;span class="warning"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="doc-string"&gt; n.*/&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="function-name"&gt;biggerThanN&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;a&lt;/span&gt;, &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;n&lt;/span&gt;){&lt;br /&gt;    &lt;span class="comment"&gt;//I don't know how many items are bigger than n so I must&lt;br /&gt;&lt;/span&gt;    &lt;span class="comment"&gt;//first count them so I can then create an array of the correct&lt;br /&gt;&lt;/span&gt;    &lt;span class="comment"&gt;//size&lt;br /&gt;&lt;/span&gt;    &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;count&lt;/span&gt; = 0;&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; =0; i &amp;lt; a.length; i++){&lt;br /&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt; (a[i] &amp;gt; n) {&lt;br /&gt;        count++;}&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;result&lt;/span&gt;[] = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[count];&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;j&lt;/span&gt; = 0;&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; =0; i &amp;lt; a.length; i++){&lt;br /&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt; (a[i] &amp;gt; n) {&lt;br /&gt;        result[j++] = a[i];}}&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; result;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;printArray&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;a&lt;/span&gt;){&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i &amp;lt; a.length; i++){&lt;br /&gt;      System.out.println(a[i]);}&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;//Do some unit testing&lt;br /&gt;&lt;/span&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt; (&lt;span class="type"&gt;String&lt;/span&gt; [] &lt;span class="variable-name"&gt;argv&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;a&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[5];&lt;br /&gt;    a[0] = 1; a[1] = 3; a[2] = 2; a[3] = 7; a[4] = 5;&lt;br /&gt;    printArray(a);&lt;br /&gt;    System.out.println("&lt;span class="string"&gt;-&lt;/span&gt;");&lt;br /&gt;    printArray(biggerThanN(a,4));&lt;br /&gt;    System.out.println("&lt;span class="string"&gt;-&lt;/span&gt;");&lt;br /&gt;    printArray(biggerThanN(a,2));&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-8428841566896156881?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/8428841566896156881/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=8428841566896156881" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/8428841566896156881?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/8428841566896156881?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/bigger-than-n.html" title="Bigger than N" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEAASHg8cCp7ImA9WxZUGU4.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-330236025874820004</id><published>2008-04-11T12:46:00.002-04:00</published><updated>2008-04-11T12:52:29.678-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T12:52:29.678-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Find the Maximum</title><content type="html">Write a function which finds the maximum number in an array or numbers.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;This problem ensures you know how to implement a loop and search in an array.&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;FindMax&lt;/span&gt; {&lt;br /&gt;  &lt;span class="doc-string"&gt;/** &lt;/span&gt;&lt;span class="doc-string"&gt;&lt;span class="constant"&gt;@param&lt;/span&gt;&lt;/span&gt;&lt;span class="doc-string"&gt; a an array of integers of length &lt;/span&gt;&lt;span class="doc-string"&gt;&lt;span class="warning"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="doc-string"&gt; 0&lt;br /&gt;      Returns the maximum integer in a */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="function-name"&gt;findMax&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;a&lt;/span&gt;){&lt;br /&gt;&lt;/span&gt;    &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;theMax&lt;/span&gt; = a[0];&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; =0; i &amp;lt; a.length; i++){&lt;br /&gt;      &lt;span class="keyword"&gt;if&lt;/span&gt; (a[i] &amp;gt; theMax) {&lt;br /&gt;        theMax = a[i];}&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; theMax;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;//Do some unit testing&lt;br /&gt;&lt;/span&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt; (&lt;span class="type"&gt;String&lt;/span&gt; [] &lt;span class="variable-name"&gt;argv&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;a&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[5];&lt;br /&gt;    a[0] = 1; a[1] = 3; a[2] = 2; a[3] = 7; a[4] = 5;&lt;br /&gt;    System.out.println(findMax(a));&lt;br /&gt;  }&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-330236025874820004?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/330236025874820004/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=330236025874820004" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/330236025874820004?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/330236025874820004?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/find-maximum.html" title="Find the Maximum" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C0ADQ345eyp7ImA9WxZUGU4.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-3182643010159269487</id><published>2008-04-11T12:30:00.002-04:00</published><updated>2008-04-11T12:36:12.023-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T12:36:12.023-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Reverse Array</title><content type="html">Write a function which reverses the contents of an array in place.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Just swap the first one with the last one, then the second one with the next to last one, and so on. If there are an even number of elements then we swap the last two, if odd then we end up swapping the last (middle) element with itself, which is OK.&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;Reverse&lt;/span&gt; {&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;swap&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;a&lt;/span&gt;, &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;x&lt;/span&gt;, &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;y&lt;/span&gt;){&lt;br /&gt;  &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;t&lt;/span&gt; = a[x];&lt;br /&gt;  a[x] = a[y];&lt;br /&gt;  a[y] = t;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;  &lt;span class="doc-string"&gt;/** Reverses the order of the elements in a, regardless of the size of a. */&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;reverseArray&lt;/span&gt;(&lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;a&lt;/span&gt;){&lt;br /&gt;    &lt;span class="comment"&gt;//the -1 is tricky&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i&amp;lt;(a.length-1)/2; i++){&lt;br /&gt;      Reverse.swap(a,i,a.length - 1 -i);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="comment"&gt;//Unit testing&lt;br /&gt;&lt;/span&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt; (&lt;span class="type"&gt;String&lt;/span&gt; [] &lt;span class="variable-name"&gt;argv&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;int&lt;/span&gt;[] &lt;span class="variable-name"&gt;a&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt;[9];&lt;br /&gt;    &lt;span class="comment"&gt;//Should test with odd and even.&lt;br /&gt;&lt;/span&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i &amp;lt; a.length; i++){&lt;br /&gt;      a[i] = i*i;}&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i &amp;lt; a.length; i++){&lt;br /&gt;      System.out.print(a[i] + "&lt;span class="string"&gt; &lt;/span&gt;");}&lt;br /&gt;    System.out.println("");&lt;br /&gt;    Reverse.reverseArray(a);&lt;br /&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt;=0; i &amp;lt; a.length; i++){&lt;br /&gt;      System.out.print(a[i] + "&lt;span class="string"&gt; &lt;/span&gt;");}&lt;br /&gt;    System.out.println(""); }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-3182643010159269487?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/3182643010159269487/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=3182643010159269487" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/3182643010159269487?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/3182643010159269487?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/reverse-array.html" title="Reverse Array" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C0QASH0zfyp7ImA9WxZUGU4.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-1188534881320806318</id><published>2008-04-11T12:22:00.003-04:00</published><updated>2008-04-11T12:29:09.387-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T12:29:09.387-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>Read a File</title><content type="html">Write a program that reads and properly parses a file called "people.txt" which contains the name of the person followed by his age and then his height in feet. A sample file looks like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Mario 34 4.5&lt;br /&gt;Donkey Kong 15 5.7&lt;br /&gt;Luigi 38 5.8&lt;br /&gt;Princess Peach Toadstoll 25 5.2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;A very easy question. You need to remember how to loop to read a file and, more importantly, that this data should go into a record or class. Since each row represents a person, a good programmer should initially default to thinking about each row as an object with various attributes.&lt;br /&gt;&lt;br /&gt;The only tricky part in this example is the fact that a person's name could be any number of words. Thus, we have to look for the first integer before we can declare that the complete name has been found.&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class="keyword"&gt;import&lt;/span&gt; &lt;span class="reference"&gt;java&lt;/span&gt;.&lt;span class="reference"&gt;io&lt;/span&gt;.*;&lt;br /&gt;&lt;span class="keyword"&gt;import&lt;/span&gt; &lt;span class="reference"&gt;java&lt;/span&gt;.&lt;span class="reference"&gt;util&lt;/span&gt;.&lt;span class="type"&gt;Scanner&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="type"&gt;Person&lt;/span&gt; {&lt;br /&gt;  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;name&lt;/span&gt;;&lt;br /&gt;  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;age&lt;/span&gt;;&lt;br /&gt;  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="type"&gt;double&lt;/span&gt; &lt;span class="variable-name"&gt;height&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;Person&lt;/span&gt; (&lt;span class="type"&gt;Scanner&lt;/span&gt; &lt;span class="variable-name"&gt;in&lt;/span&gt;){&lt;br /&gt;    name = "";&lt;br /&gt;    &lt;span class="keyword"&gt;while&lt;/span&gt; (!in.hasNextInt()){&lt;br /&gt;      name += in.next() + "&lt;span class="string"&gt; &lt;/span&gt;";&lt;br /&gt;    }&lt;br /&gt;    age = in.nextInt();&lt;br /&gt;    height = in.nextDouble();&lt;br /&gt;    in.nextLine();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="function-name"&gt;toString&lt;/span&gt;(){&lt;br /&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; name + "&lt;span class="string"&gt; &lt;/span&gt;" + age + "&lt;span class="string"&gt; &lt;/span&gt;" + height;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="type"&gt;void&lt;/span&gt; &lt;span class="function-name"&gt;main&lt;/span&gt; (&lt;span class="type"&gt;String&lt;/span&gt;[] &lt;span class="variable-name"&gt;args&lt;/span&gt;){&lt;br /&gt;    &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="variable-name"&gt;filename&lt;/span&gt; = "&lt;span class="string"&gt;people.txt&lt;/span&gt;";&lt;br /&gt;    &lt;span class="keyword"&gt;try&lt;/span&gt; {&lt;br /&gt;      &lt;span class="type"&gt;Scanner&lt;/span&gt; &lt;span class="variable-name"&gt;in&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;Scanner&lt;/span&gt;(&lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;File&lt;/span&gt;(filename));&lt;br /&gt;      &lt;span class="keyword"&gt;while&lt;/span&gt; (in.hasNextLine()){&lt;br /&gt;        &lt;span class="type"&gt;Person&lt;/span&gt; &lt;span class="variable-name"&gt;p&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="type"&gt;Person&lt;/span&gt;(in);&lt;br /&gt;        System.out.println(p);&lt;br /&gt;      }&lt;br /&gt;    } &lt;span class="keyword"&gt;catch&lt;/span&gt; (&lt;span class="type"&gt;FileNotFoundException&lt;/span&gt; &lt;span class="variable-name"&gt;e&lt;/span&gt;){&lt;br /&gt;      System.out.println("&lt;span class="string"&gt;Sorry, could not find file &lt;/span&gt;" + e);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-1188534881320806318?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/1188534881320806318/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=1188534881320806318" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/1188534881320806318?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/1188534881320806318?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/read-file.html" title="Read a File" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C0UBRHc6cSp7ImA9WxZUGU4.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-7926788168287483760</id><published>2008-04-10T13:22:00.006-04:00</published><updated>2008-04-11T12:27:35.919-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-11T12:27:35.919-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="hard" /><title>Find Duplicate in Linear Time</title><content type="html">You are given an array of numbers that contains all numbers from 0 to n, in some random order, except that one number is missing and another number is repeated (thus, there are still n numbers in the array). Find the repeated number in linear time and do not use any other data structure.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;The numbers in the array can just be placed in the appropriate place in the array, just use the number as it's own position index. If when you go to place a number i in position i you notice that a[i] &lt;em&gt;already&lt;/em&gt; contains i then you know you found the duplicate. If not, place it and use the number that was there as your new index.&lt;br /&gt;   &lt;pre&gt;&lt;br /&gt;&lt;span class="comment"&gt;#!/usr/bin/python&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;from&lt;/span&gt; Numeric &lt;span class="keyword"&gt;import&lt;/span&gt; *&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;find&lt;/span&gt;(a):&lt;br /&gt;    i = 0&lt;br /&gt;    &lt;span class="keyword"&gt;while&lt;/span&gt; &lt;span class="py-pseudo-keyword"&gt;True&lt;/span&gt;:&lt;br /&gt;        &lt;span class="keyword"&gt;print&lt;/span&gt; a&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (a[i] == i):&lt;br /&gt;            i += 1&lt;br /&gt;            &lt;span class="keyword"&gt;continue&lt;/span&gt;&lt;br /&gt;        &lt;span class="keyword"&gt;if&lt;/span&gt; (a[a[i]] == a[i]):&lt;br /&gt;            &lt;span class="keyword"&gt;print&lt;/span&gt; "&lt;span class="string"&gt;Repeat is %d&lt;/span&gt;" % a[i]&lt;br /&gt;            &lt;span class="keyword"&gt;return&lt;/span&gt; a[i]&lt;br /&gt;        c = a[a[i]]&lt;br /&gt;        a[a[i]] = a[i]&lt;br /&gt;        a[i] = c&lt;br /&gt;        i = c&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;&lt;span class="comment"&gt;#Test cases&lt;br /&gt;&lt;/span&gt;a = array([0,3,2,1,4,4,6])&lt;br /&gt;a = array([0,1,2,3,4,4,6])&lt;br /&gt;a = array([4,4,2,3,0,1,6])&lt;br /&gt;a = array([4,4,0,1,2,3,6])&lt;br /&gt;&lt;br /&gt;find(a)&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-7926788168287483760?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/7926788168287483760/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=7926788168287483760" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/7926788168287483760?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/7926788168287483760?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/you-are-given-array-of-numbers-that.html" title="Find Duplicate in Linear Time" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C0ADQXg9eSp7ImA9WxRaFU8.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-2463892371002580762</id><published>2008-04-10T09:18:00.013-04:00</published><updated>2008-12-17T08:49:30.661-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-17T08:49:30.661-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hard" /><title>Sorting a Big File</title><content type="html">You have a file that contains at most 10^7 positive integers, all distinct, all between 0 and 10^7. You want to sort these numbers but only have about 2 megabytes of RAMs. How do you do it?&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Before you read the answer here is a tip: the best answer sorts the file in linear time reading every number into memory only once.&lt;br /&gt;&lt;br /&gt;Give up? Since the file contains all distinct integers between 0 and 10,000,000, we can use bits to represent whether every number in this range exists. For this we need only 10^7 bits or 1,250,000 bytes (1.25MB) so it can fit in memory. Here is some pseudocode:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;&lt;span class="type"&gt;boolean&lt;/span&gt; &lt;span class="variable-name"&gt;bit&lt;/span&gt;[10000000]; &lt;br /&gt;&lt;span class="comment"&gt;//An array of bits. I'm assuming a boolean array of size 8&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// uses only one byte.&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;//Set it to 0&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; = i; i &amp;lt; n; i++){&lt;br /&gt;  bit[i] = 0;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;//read every number from file&lt;br /&gt;&lt;/span&gt;f = filestream("&lt;span class="string"&gt;filename&lt;/span&gt;"); &lt;span class="comment"&gt;//pseudocode&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;while&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; &amp;lt;&amp;lt; f){&lt;br /&gt;  bit[i] = 1;&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;//write it out&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="type"&gt;int&lt;/span&gt; &lt;span class="variable-name"&gt;i&lt;/span&gt; = i; i &amp;lt; n; i++){&lt;br /&gt;  &lt;span class="keyword"&gt;if&lt;/span&gt; (bit[i] == 1)&lt;br /&gt;    cout &amp;lt;&amp;lt; i;&lt;br /&gt; };&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is a very old question. It appears in &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201657880/ref=nosim/multiagentcom"&gt;Programming Pearls&lt;/a&gt; by Jon Bentley, a really fun read!&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://books.google.com/books/previewlib.js"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;GBS_insertEmbeddedViewer('ISBN:0201657880',400,620);&lt;/script&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-2463892371002580762?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/2463892371002580762/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=2463892371002580762" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/2463892371002580762?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/2463892371002580762?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/sorting-big-file.html" title="Sorting a Big File" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DEAHQXsyfip7ImA9WxZUGE4.&quot;"><id>tag:blogger.com,1999:blog-1877081801911107984.post-2215097326690236952</id><published>2008-04-10T09:13:00.003-04:00</published><updated>2008-04-10T10:12:10.596-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-10T10:12:10.596-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="easy" /><title>No Calculators Allowed</title><content type="html">Without using a calculator, what is 2 to the 12th power?&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;This is a quick weed out question to differentiate the tech types from the non-tech people. Every programmer should be able to start reciting: 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1877081801911107984-2215097326690236952?l=programmingquestions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://programmingquestions.blogspot.com/feeds/2215097326690236952/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1877081801911107984&amp;postID=2215097326690236952" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/2215097326690236952?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1877081801911107984/posts/default/2215097326690236952?v=2" /><link rel="alternate" type="text/html" href="http://programmingquestions.blogspot.com/2008/04/no-calculators-allowed.html" title="No Calculators Allowed" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry></feed>
