Kaleb's Grey Matter - posts tagged 'CS' http://kaleb.libr8.us/ Kaleb's Grey Matter - posts tagged 'CS' - posts tagged 'CS' http://kaleb.libr8.us/ http://asset.soup.io/asset/0053/6811_9fca.jpeg 128 128 What you may or may not have wanted to know. Palindromicity of Integers in C# In my software engineering course, we were assigned to create a function that will test for the palindromicity of a an integer. My first try is as follows:<br /> <br /> <pre>static bool palindromicity(int n) { return n.ToString() == new String(n.ToString().Reverse().ToArray())); } </pre><br /> I know mine is not as efficient as could be, because I am reversing the entire number instead of just the final half. After examination by the professor, however, my function was incorrect and so were the code samples of the entire class. The defect was that a conversion to string was used, when the professor stated that we must use integers.<br /> <br /> Here is my next try:<br /> <br /> <pre>static bool palindromicity(int n) { if (n &lt; 0) return false; else if (n &lt; 10) return true; else { int head; int tail; for (int m = Convert.ToInt32(Math.Pow(10, Math.Floor(Math.Log10(Convert.ToDouble(n))))); n &gt; 10; m /= 100) { head = n / m; tail = n % 10; if (head != tail) return false; n -= m * head; n /= 10; } return true; } } </pre><div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/22524083-7482082279634101417?l=blog.kaleb.hornsby.ws" height="1" alt="" width="1" /></div><div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=KEccghB4xOE:8quzPg4Xoqs:4cEx4HpKnUU"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=KEccghB4xOE:8quzPg4Xoqs:4cEx4HpKnUU" /></a> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=KEccghB4xOE:8quzPg4Xoqs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=KEccghB4xOE:8quzPg4Xoqs:F7zBnMyn0Lo" /></a> </div>Wed, 25 Aug 2010 03:30:55 GMThttp://kaleb.libr8.us/post/72832203/Palindromicity-of-Integers-in-Curn:www-soup-io:1:72832203regularcsc# Project Euler #9 with Python While doing <a href="http://projecteuler.net/index.php?section=problems&amp;id=9">Project Euler exercise 9</a>, I realized that python has no formal mechanism to break out of an outside loop. Here is my answer:<br /> <br /> <pre>from itertools import count p=False #to break or not to break for b in count(): for a in count(): if a &gt;= b: break c = (a**2 + b**2)**.5 if a &lt; b &lt; c and a + b + c == 1000: p = True break if p: print a * b * c break </pre><div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/22524083-1716064262571617659?l=blog.kaleb.hornsby.ws" height="1" alt="" width="1" /></div><div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=B751LJnLhv8:6mswg_kK1OQ:4cEx4HpKnUU"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=B751LJnLhv8:6mswg_kK1OQ:4cEx4HpKnUU" /></a> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=B751LJnLhv8:6mswg_kK1OQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=B751LJnLhv8:6mswg_kK1OQ:F7zBnMyn0Lo" /></a> </div>Thu, 22 Jul 2010 11:21:53 GMThttp://kaleb.libr8.us/post/66646384/Project-Euler-9-with-Pythonurn:www-soup-io:1:66646384regularcspythonproject euler Project Euler #8 with Python For <a href="http://projecteuler.net/index.php?section=problems&amp;id=8">Project Euler #8</a>, one must find the greatest product of five consecutive digits in a rediculously large number. Here's my go at it:<br /> <br /> <pre>k = '73167176531330624919225119674426574742355349194934' \ '96983520312774506326239578318016984801869478851843' \ '85861560789112949495459501737958331952853208805511' \ '12540698747158523863050715693290963295227443043557' \ '66896648950445244523161731856403098711121722383113' \ '62229893423380308135336276614282806444486645238749' \ '30358907296290491560440772390713810515859307960866' \ '70172427121883998797908792274921901699720888093776' \ '65727333001053367881220235421809751254540594752243' \ '52584907711670556013604839586446706324415722155397' \ '53697817977846174064955149290862569321978468622482' \ '83972241375657056057490261407972968652414535100474' \ '82166370484403199890008895243450658541227588666881' \ '16427171479924442928230863465674813919123162824586' \ '17866458359124566529476545682848912883142607690042' \ '24219022671055626321111109370544217506941658960408' \ '07198403850962455444362981230987879927244284909188' \ '84580156166097919133875499200524063689912560717606' \ '05886116467109405077541002256983155200055935729725' \ '71636269561882670428252483600823257530420752963450' biggest = 0 for a,b in enumerate(k): m = 1 for i in k[int(a):int(a)+5]: if i == '0': continue m*=int(i) if m &gt; biggest: biggest = m</pre><div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/22524083-251114869140329177?l=blog.kaleb.hornsby.ws" height="1" alt="" width="1" /></div><div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=lQtXFLCO2G4:lwuT7vSNIqQ:4cEx4HpKnUU"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=lQtXFLCO2G4:lwuT7vSNIqQ:4cEx4HpKnUU" /></a> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=lQtXFLCO2G4:lwuT7vSNIqQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=lQtXFLCO2G4:lwuT7vSNIqQ:F7zBnMyn0Lo" /></a> </div>Thu, 22 Jul 2010 02:20:10 GMThttp://kaleb.libr8.us/post/66612873/Project-Euler-8-with-Pythonurn:www-soup-io:1:66612873regularcspythonproject euler Project Euler #7 with Python: 10001st Prime Number For <a href="http://projecteuler.net/index.php?section=problems&amp;id=7">this exercise</a>, one must find the 10001st prime number. The following is my code:<br /> <br /> <pre>def is_prime(n): #if n &lt; 2: return False #if n == 2: return True #if n &amp; 1: return False for i in range(3,int(n**.5)+1,2): if not n%i: return False return True def prime_list(n): primes = [2,3,5,7,11,13] i = max(primes) + 2 while len(primes) &lt; n: if is_prime(i): primes.append(i) i+=2 return primes print max(prime_list(10001)) </pre><br /> Notice that in the is_prime function, I have made it faster by removing tests that will not be necessary for the range it is working with. Un-comment those lines, and one will notice significant slow-downs.<br /> <br /> I can comment out these lines in my primality test, because I am:<br /> <ol><li>not testing primality of numbers less than two</li> <li>not testing two at all</li> <li>not testing any even numbers</li> </ol>I just need to optimize and get rid of the doubly nested loops.<br /> <br /> <b>EDIT</b><b>:</b><br /> <br /> After doing some research, I found this <a href="http://stackoverflow.com/questions/567222/simple-prime-generator-in-python/568618#568618">awesome prime number generator</a>:<br /> <br /> <pre>def gen_primes(): D = {} q = 2 while True: if q not in D: yield q D[q * q] = [q] else: for p in D[q]: D.setdefault(p + q, []).append(p) del D[q] q += 1 </pre><br /> With this is play, here is my new answer:<br /> <pre>def nth_prime(n): return (j for i,j in enumerate(gen_primes()) if i == n-1).next() </pre><div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/22524083-3668327302482971566?l=blog.kaleb.hornsby.ws" height="1" alt="" width="1" /></div><div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=Y-iQaO6zKK8:kiX6WoOcA44:4cEx4HpKnUU"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=Y-iQaO6zKK8:kiX6WoOcA44:4cEx4HpKnUU" /></a> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=Y-iQaO6zKK8:kiX6WoOcA44:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=Y-iQaO6zKK8:kiX6WoOcA44:F7zBnMyn0Lo" /></a> </div>Tue, 20 Jul 2010 13:19:40 GMThttp://kaleb.libr8.us/post/66291578/Project-Euler-7-with-Python-10001st-Primeurn:www-soup-io:1:66291578regularcspythonproject euler Project Euler Problem 4 with Python: Largest Palindrome To find the largest palindromic number from multiplying two three digit numbers, I used the following python code:<br /> <br /> <pre>def is_palindromic(n): return str(n) == str(n)[::-1] print max(i*j for i in xrange(999,99,-1) for j in xrange(999,99,-1) if is_palindromic(i*j))</pre><div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/22524083-4585383703389542958?l=blog.kaleb.hornsby.ws" height="1" alt="" width="1" /></div><div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=RLzmQ2lJ7H8:DJv6VjxGx00:4cEx4HpKnUU"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=RLzmQ2lJ7H8:DJv6VjxGx00:4cEx4HpKnUU" /></a> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=RLzmQ2lJ7H8:DJv6VjxGx00:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=RLzmQ2lJ7H8:DJv6VjxGx00:F7zBnMyn0Lo" /></a> </div>Mon, 19 Jul 2010 03:35:58 GMThttp://kaleb.libr8.us/post/66052088/Project-Euler-Problem-4-with-Python-Largesturn:www-soup-io:1:66052088regularcspythonproject euler Project Euler Problem 3 with Python: Greatest Prime Factor This is not very efficient, but here is my solution to <a href="http://projecteuler.net/index.php?section=problems&amp;id=3">Project Euler Problem 3</a> using python.<br /> <br /> <pre>from math import ceil class Prime(object): primes = set([2]) def is_prime(self,n): n = float(n) if n &lt; 2: return False else: for i in xrange(2,int(ceil(n**.5))): f = n/i if not f%1: return False else: return True def greatest_prime_factor(self,n): n = float(n) if self.is_prime(n): return n prime_factors = set() for i in xrange(2,int(ceil(n**.5))): f = n/i if not f%1: if self.is_prime(f): prime_factors.add(f) if self.is_prime(i): prime_factors.add(i) return max(prime_factors) prime = Prime() n = 600851475143 prime.greatest_prime_factor(n)</pre><b>Edit:</b><br /> After looking at some of the other answers, I made the following as translated from a fantastic c answer:<br /> <pre>def greatest_prime_factor(n): divisor = 2 while n &gt; 1: print divisor if not n%divisor: n /= divisor divisor -= 1 divisor += 1 return divisor </pre><div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/22524083-3059340576923266792?l=blog.kaleb.hornsby.ws" height="1" alt="" width="1" /></div><div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=iq9lSQR-RYs:_CDM_Ijij94:4cEx4HpKnUU"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=iq9lSQR-RYs:_CDM_Ijij94:4cEx4HpKnUU" /></a> <a href="http://feeds.feedburner.com/~ff/KalebHornsby?a=iq9lSQR-RYs:_CDM_Ijij94:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/KalebHornsby?i=iq9lSQR-RYs:_CDM_Ijij94:F7zBnMyn0Lo" /></a> </div>Mon, 19 Jul 2010 03:12:55 GMThttp://kaleb.libr8.us/post/66052089/Project-Euler-Problem-3-with-Python-Greatesturn:www-soup-io:1:66052089regularcspythonproject euler Isograms Another Python assignment from my programming languages class:<br /> <blockquote>Write a program that will find isograms from user input.<br /> dog is a 1 letter isogram.<br /> TartAr is a 2 letter isogram.<br /> Remove is not an isogram.<br /> Aqwsssaqwaqwswqa is a 4 letter isogram.<br /> Test-test has an illegal character</blockquote>Here's my answer:<br /> <br /> <div class="syntax"><pre><span class="c">#!/usr/bin/python</span> <span class="k">def</span> <span class="nf">char_count</span><span class="p">(</span><span class="n">word</span><span class="p">):</span> <span class="sd">"""Return a dictionary of character counts."""</span> <span class="n">chars</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># Should use py2.7's Counter class, not dict</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">word</span><span class="p">:</span> <span class="n">chars</span><span class="p">[</span><span class="n">char</span><span class="p">]</span> <span class="o">=</span> <span class="n">chars</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">char</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">return</span> <span class="n">chars</span> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">word</span><span class="p">):</span> <span class="sd">"""If word is an isogram, return its degree, otherwise return 0."""</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">word</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">"Illegal character."</span><span class="p">)</span> <span class="n">vals</span> <span class="o">=</span> <span class="n">char_count</span><span class="p">(</span><span class="n">word</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">return</span> <span class="n">vals</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">any</span><span class="p">([</span><span class="nb">cmp</span><span class="p">(</span><span class="n">vals</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">])</span> <span class="k">else</span> <span class="mi">0</span> </pre></div><div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/22524083-2506023536001022207?l=blog.kaleb.hornsby.ws" height="1" alt="" width="1" /></div>Sat, 13 Mar 2010 02:04:00 GMThttp://kaleb.libr8.us/post/48435048/Isogramsurn:www-soup-io:1:48435048regularcspython Project Euler 55 A few days ago, I made a post about <a href="http://blog.kaleb.hornsby.ws/2010/03/reduction-ad-palindromo.html">palindromic numbers</a>. After some thought, I realized that I should have done some things different. For one, there was no need for the partition function.<br /> <br /> I also found out that a number which cannot become a palindrome through the process of reversing and addition is called a <a href="http://en.wikipedia.org/wiki/Lychrel_number">Lychrel number</a>, and <a href="http://projecteuler.net/">Project Euler</a> has a problem concerning Lychrel numbers.<br /> <br /> From Project Euler <a href="http://projecteuler.net/index.php?section=problems&amp;id=55">question #55</a>:<br /> <blockquote>If we take 47, reverse and add, 47 + 74 = 121, which is palindromic.<br /> <br /> Not all numbers produce palindromes so quickly. For example,<br /> <br /> <blockquote>349 + 943 = 1292,<br /> 1292 + 2921 = 4213<br /> 4213 + 3124 = 7337</blockquote><br /> That is, 349 took three iterations to arrive at a palindrome.<br /> <br /> Although no one has proved it yet, it is thought that some numbers, like 196, never produce a palindrome. A number that never forms a palindrome through the reverse and add process is called a Lychrel number. Due to the theoretical nature of these numbers, and for the purpose of this problem, we shall assume that a number is Lychrel until proven otherwise. In addition you are given that for every number below ten-thousand, it will either (i) become a palindrome in less than fifty iterations, or, (ii) no one, with all the computing power that exists, has managed so far to map it to a palindrome. In fact, 10677 is the first number to be shown to require over fifty iterations before producing a palindrome: 4668731596684224866951378664 (53 iterations, 28-digits).<br /> <br /> Surprisingly, there are palindromic numbers that are themselves Lychrel numbers; the first example is 4994.<br /> <br /> How many Lychrel numbers are there below ten-thousand?</blockquote><br /> Here's my solution:<br /> <br /> <div class="syntax"><pre><span class="n">lychrel</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">10000</span><span class="p">):</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">50</span><span class="p">):</span> <span class="n">r</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)[::</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">r</span> <span class="ow">and</span> <span class="n">k</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> <span class="k">break</span> <span class="k">else</span><span class="p">:</span> <span class="n">i</span> <span class="o">+=</span> <span class="n">r</span> <span class="k">else</span><span class="p">:</span> <span class="n">lychrel</span> <span class="o">+=</span> <span class="mi">1</span> <span class="k">print</span> <span class="n">lychrel</span> </pre></div><br /> I've seen many solutions out there written in Python that were either un-pythonic or slow, and may of the times the former led to the latter. I am pretty sure that this is the fastest Python implementation.<div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/22524083-6834479054896399915?l=blog.kaleb.hornsby.ws" height="1" alt="" width="1" /></div>Fri, 12 Mar 2010 03:48:00 GMThttp://kaleb.libr8.us/post/48277289/Project-Euler-55urn:www-soup-io:1:48277289regulareulercspython Yo Dawg, I heard You Like Perl: Writing a Perl interpreter with Perl Finally, we were given our first assignment in my CSCI 3300 Programming Languages class. We have to write a basic Perl interpreter using Perl. I am not too thrilled about the assignment. I would probably appreciate it better if I could use Perl to write an interpreter of almost <a href="http://www.lua.org/">any</a> <a href="http://www.python.org/">other</a> <a href="http://www.haskell.org/">language</a>.<div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/22524083-3094065524265619209?l=blog.kaleb.hornsby.ws" height="1" alt="" width="1" /></div>Tue, 02 Feb 2010 15:48:00 GMThttp://kaleb.libr8.us/post/44156061/Yo-Dawg-I-heard-You-Like-Perlurn:www-soup-io:1:44156061regularcs