バッチファイルでProject Euler(24)

Problem 8


数字の並びはテキストファイルにしておきます。実はバッチファイルはテキストファイルを読めるのです。

@echo off

for /F %%s in (%1) do echo %%s

これでテキストファイルを表示できます。これは1行ずつ読んでそれをスペースとタブで区切った最初のトークンが%%sにセットされて、それを表示します。区切らない方法もあるのですが、ここでは気にしなくてもよいでしょう。
あとは読み込んだ文字列を結合して、頭から5つの数字を掛け合わせて文字列から頭を1文字削る、という処理を繰り返します。

@echo off

set s=
for /F %%s in (%1) do call :concat %%s
call :max_product %s%
echo %ERRORLEVEL%
exit /b

:concat
    set s=%s%%1
    exit /b 0

:max_product
    setlocal
    set s=%1
    if "%s:~4,1%" == "" exit /b 0
    set /a n = %s:~0,1% * %s:~1,1% * %s:~2,1% * %s:~3,1% * %s:~4,1%
    call :max_product %s:~1%
    call :max %n% %ERRORLEVEL%
    exit /b %ERRORLEVEL%

:max
    setlocal
    if %1 GTR %2 exit /b %1
    exit /b %2