#!/bin/bash RETURN=0 function div { let RETURN=$[1000*$1/$2 | bc -l] } ORIGINAL=0 NUMERATOR=1 DENOMINATOR=1 for i in `seq 10 99`; do for j in `seq $[$i+1] 99` do div $i $j let ORIGINAL=$RETURN if [ $[j / 10] -eq $[$i % 10] ]; then if [ $[$j % 10] -gt 0 ]; then div $[$i / 10] $[$j % 10] if [ $ORIGINAL -eq $RETURN ]; then let NUMERATOR*=$i let DENOMINATOR*=$j fi fi fi done done #This is obviously not generally how one finds the denominator #of a lowest-terms fraction...but it is in this case, as the #numerator is a factor of the denominator echo $[$DENOMINATOR / $NUMERATOR]
Friday, August 30, 2013
Problem 33 - Bash, for a change of pace
Recently, most of my solutions have been either in very nice or very esoteric languages. For this problem, I decided to use bash: certainly a very real language, just not exactly one that is normally used for the likes of Project Euler. Anyway, this problem went fairly well, even though I had to do something fairly silly to account for all variables storing integers (I only operation I perform once I have the value of a fraction is comparison...so I just multiply all fractions by 1000 to store them as integers) - and I was a bit of a wimp on the last step (finding the denominator of a simplified fraction in a way that only works when the numerator of the simplified fraction is 1, instead of a more generalized method) - but nonetheless, everything worked out well, and another language is crossed off my list of options. Notably, using bash reminded me that I still haven't used assembly language...
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment