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

Problem 14


コラッツです。単純に最初から順に長さを計算すると、3日くらいかかりそうです。

@echo off

set /a N = 100
set /a s = 0
for /L %%i in (2, 1, %N%) do call :max_Collatz %%i
echo %s%
exit /b 0

rem // 引数からのコラッツの列の長さを求め、
rem // それがsより大きければそれをsとする
:max_Collatz
    set /a k = 1
    set /a m = %1
    :loop_max_Collatz
        set /a r = %m% %% 2
        if %r% == 0 (
            set /a m /= 2
        ) else (
            set /a m = %m% * 3 + 1
        )
        set /a k += 1
        if %m% GTR 1 goto :loop_max_Collatz
    
    if %k% GTR %s% set /a s = %k%
    exit /b 0