One of the fun parts about working at a college is the intellectual cross-pollination that occurs here from time to time. Today, for example, our programming instructor came up to me and told me about Project Euler
, which maintains a list of increasingly difficult mathematics/computer problems. Since this seemed like as good of time as any to brush up on my scripting skills and to show him the anachronistic horror that is Windows CMD Shell syntax
, I thought it would be fun to start implementing them as batch scripts. Here's my solution for the easiest of the bunch - Problem 1
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
My solution, which gives an answer of 233,168:
FOR /L %%G IN (1,1,999) DO (CALL :ThreeByFive %%G)
:: Our "function" - checks if a number is evenly divisible by
:: 3, 5, or both, and adds the number if so.
:: Keep most of our variables in local scope
:: Check for divisibility.
SET /A "_ModF=%1%%5"
SET /A "_ModT=%1%%3"
:: Now to perform some tests. Note the use of a
:: GOTO statement to skip a check if one passes.
IF %_ModT% EQU 0 GOTO SumVal
IF %_ModF% EQU 0 GOTO SumVal
:: Failed all checks - end subroutine
:: Passed at least one of the checks - add the number!
ENDLOCAL & SET /A "_Sum+=%1"
For what it's worth, he found the syntax suitably horrifying, especially when I showed him the difference between how CMD handles variables with EnableDelayedExpansion
on and with it off while I performed my initial bug and logic testing.
Post a Comment