On 02/27/2011 03:08 AM, Mike Miller wrote:
> On Sat, 26 Feb 2011, Erik Mitchell wrote:
>
>> One thing I'd suggest looking into is Project Euler. It provides a
>> great set of computation problems to work through, and you can do it
>> in any language you like. Having real programming problems to work on
>> helps because you're not paying as much attention to the language as
>> you are figuring out how to solve the problem at hand.
>>
>> http://projecteuler.net/
>
>
> Fun.  Never heard of it.  I'll do some using GNU commands from the
> bash prompt.  Let me know if you have ways of making these better
> (e.g., shorter or faster).
>
>
> Here's my effort on Problem #1, using only GNU utils on the Bash
> command line:
>
> seq 999 | awk '$1%5==0 || $1%3==0 {s+=$1}{print s}' | tail -1
>
> I like to do lots of math/stats in GNU R or GNU Octave, both great
> programs, but I also do a lot of things on the Bash command line
> because it is very quick and efficient, once you've learned the
> tricks.  It took me many years to get good enough, a little at a
> time.  I'm sure one good course would do it, but I never had one.
>
>
> Here's my GNU/bash answer to Problem #2:
>
> ( x=1 ; y=1 ; while [ $y -lt 4000000 ] ; do z=$y ; let y=$x+$z ; x=$z
> ; echo $z ; done ) | awk '$1%2==0 {s+=$1}{print s}' | tail -1
>
>
> Here's my answer to Problem #3:
>
> ( x=600851475143 ; max_fac=10000 ; while [ $x -gt 1 ] ; do i=$(seq 2
> $max_fac | awk -v x=$x 'x%$1==0' | head -1) ; echo $i ; let x=$x/$i ;
> done ) | tail -1
>
> I did it first with a larger value of max_fac, but that slows it way
> down.
>
> This will print the prime factors of the number "x" in order, as long
> as all of them are less than max_fac, but keep max_fac small because
> larger max_fac slows it down:
>
> x=600851475143 ; max_fac=10000 ; while [ $x -gt 1 ] ; do i=$(seq 2
> $max_fac | awk -v x=$x 'x%$1==0' | head -1) ; echo $i ; let x=$x/$i ;
> done
>
> With a double while-loop and no max_fac, it is slow on the larger
> factors:
>
> x=600851475143 ; while [ $x -gt 1 ] ; do f=2 ; while [ $(echo $f | awk
> -v x=$x '{print x%$1}') -gt 0 ] ; do let f=$f+1 ; done ; echo $f ; let
> x=$x/$f ; done
>
>
> Another GNU/bash answer, this for Problem #4:
>
> ( for i in $(seq 100 999) ; do for j in $(seq 100 $i) ; do let k=$i*$j
> ; echo $k ; echo $k | rev ; done ; done ) | uniq -c | awk '$1 > 1' |
> cut -c9- | sort -n | tail -1
>
> It isn't very efficient, though.  It took 13 minutes on my machine.  I
> could have taken a shortcut by guessing that the answer would involve
> larger numbers.  This gives the same answer in 23 seconds:
>
> ( for i in $(seq 901 999) ; do for j in $(seq 901 $i) ; do let k=$i*$j
> ; echo $k ; echo $k | rev ; done ; done ) | uniq -c | awk '$1 > 1' |
> cut -c9- | sort -n | tail -1
>
> I did use "rev" which could be considered cheating.  It can be written
> in pure internal bash but that is awkward and a bit long.
>
>
> This is my answer for Problem #5:
>
> let x=2*3*2*5*7*2*3*11*13*2*17*19 ; echo $x
>
> It's just too easy to do it that way.  If they wanted something
> bigger, maybe I'd program the algorithm.
>
>
> Problem #6:
>
> seq 100 | awk '{s+=$1}{s2+=$1^2}{print s^2-s2}' | tail -1
>
>
> Must sleep...
>
>
> Mike
> _______________________________________________
> TCLUG Mailing List - Minneapolis/St. Paul, Minnesota
> tclug-list at mn-linux.org
> http://mailman.mn-linux.org/mailman/listinfo/tclug-list
Addictive isn't it?

-- 
Patrick "Finn" Robins
/Be who you are and say what you feel, because those who mind don't
matter and those who matter don't mind.
- Dr. Seuss/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.mn-linux.org/pipermail/tclug-list/attachments/20110227/caf2b499/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: kubuntu-user.png
Type: image/png
Size: 10677 bytes
Desc: not available
URL: <http://mailman.mn-linux.org/pipermail/tclug-list/attachments/20110227/caf2b499/attachment-0001.png>