I apologize for the delay in responding...
I have done some test on various methods. I have little modify for use file input method for load the data
For now I have not moved the macros nor reiterate for better precision
These are the results:
Code: Select all
:penpen_transpose [12x4] Time Elapsed:1cs
:dbenham_transpose [12x4] Time Elapsed:1cs
:aacini_transpose [12x4] Time Elapsed:1cs
Checking results...
No errors!
Premere un tasto per continuare . . .
:penpen_transpose [48x24] Time Elapsed:2cs
:dbenham_transpose [48x24] Time Elapsed:8cs
:aacini_transpose [48x24] Time Elapsed:9cs
Checking results...
No errors!
Premere un tasto per continuare . . .
:penpen_transpose [90x60] Time Elapsed:5cs
:dbenham_transpose [90x60] Time Elapsed:49cs
:aacini_transpose [90x60] Time Elapsed:67cs
Checking results...
No errors!
Premere un tasto per continuare . . .
:penpen_transpose [60x90] Time Elapsed:7cs
:dbenham_transpose [60x90] Time Elapsed:40cs
:aacini_transpose [60x90] Time Elapsed:49cs
Checking results...
No errors!
the code
Code: Select all
@echo off
setlocal enableDelayedExpansion
cls
mode 100,500
rem empty environment for fast "set"
rem for /f "delims==" %%v in ('set') do if /I not "%%v" == "TMP" set %%v=
call :create_mat 12 4 Mat_small.txt
call :penpen_transpose 12 4 Mat_small.txt
call :dbenham_transpose 12 4 Mat_small.txt
call :aacini_transpose 12 4 Mat_small.txt
call :check_results
pause
call :create_mat 48 24 Mat_medium.txt
call :penpen_transpose 48 24 Mat_medium.txt
call :dbenham_transpose 48 24 Mat_medium.txt
call :aacini_transpose 48 24 Mat_medium.txt
call :check_results
pause
call :create_mat 90 60 Mat_big.txt
call :penpen_transpose 90 60 Mat_big.txt
call :dbenham_transpose 90 60 Mat_big.txt
call :aacini_transpose 90 60 Mat_big.txt
call :check_results
pause
call :create_mat 60 90 Mat_big.txt
call :penpen_transpose 60 90 Mat_big.txt
call :dbenham_transpose 60 90 Mat_big.txt
call :aacini_transpose 60 90 Mat_big.txt
call :check_results
endlocal
exit /B
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:create_mat N M file_name
setlocal
type nul >%tmp%\%3
For /L %%R in (1,1,%2) do (
Set "N="
For /L %%C in (1,1,%1) do set "N=!N!!random:~-1!"
echo !N!
) >>%tmp%\%3
:: Show output
rem Type %tmp%\%3
rem echo(
endlocal
exit /b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:check_results
echo Checking results...
fc %tmp%\penpen_out.txt %tmp%\dbenham_out.txt>nul && fc %tmp%\dbenham_out.txt %tmp%\aacini_out.txt>nul
if ERRORLEVEL 1 (echo Errors found^^!
) else echo No errors^^!
exit /b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:penpen_transpose N M file_name
setlocal
echo !time: =0!> "%tmp%\t1.txt"
set /A N=%1, M=%2
::Load data
set /A i=0
for /f delims^=^ eol^= %%A in (%tmp%\%3) do (
set /A i+=1
set "N!i!=%%A"
)
::Transpose data
::Fixed.
set /A "MaxN=%1-1"
set "transposedLine="
for /L %%m in (1, 1, %M%) do set "transposedLine=!transposedLine!^!%%A%%m:~%%n,1^!"
:: output transposed values
:: Fixed.
(for %%A in (N) do for /L %%n in (0, 1, %maxN%) do echo %transposedLine%)>%tmp%\penpen_out.txt
set t2=!time!
call :print_elapsed %0 %1 %2
endlocal
exit /b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:dbenham_transpose N M file_name
setlocal
echo !time: =0!> "%tmp%\t1.txt"
set /A N=%1, M=%2, max=N-1
:: Load and transpose data
for /f delims^=^ eol^= %%A in (%tmp%\%3) do (
set "ln=%%A"
for /l %%N in (0 1 %max%) do set "ln%%N=!ln%%N!!ln:~%%N,1!"
)
:: output transposed values
(for /l %%N in (0 1 %max%) do echo !ln%%N!)>%tmp%\dbenham_out.txt
set t2=!time!
call :print_elapsed %0 %1 %2
endlocal
exit /b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:aacini_transpose N M file_name
setlocal
echo !time: =0!> "%tmp%\t1.txt"
rem Configuration value: Number of columns and ...
rem Prepare the transpose macro
set /A N=%1, lastN=N-1
set "transpose="
for /L %%i in (0,1,%lastN%) do (
set "T%%i="
set transpose=!transpose!^&set "T%%i=^!T%%i^!^!line:~%%i,1^!"
)
rem Process the file
for /F "delims=" %%a in (%tmp%\%3) do (
set "line=%%a"
%transpose:~1%
)
rem Show results
(for /L %%i in (0,1,%lastN%) do echo !T%%i!)>%tmp%\aacini_out.txt
set t2=!time!
call :print_elapsed %0 %1 %2
endlocal
exit /b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:print_elapsed
echo(
set /P "t1=" < "%tmp%\t1.txt"
for /F "tokens=1-8 delims=:.," %%a in ("!t1!:!t2: =0!") do set /a "a=(((1%%e-1%%a)*60)+1%%f-1%%b)*6000+1%%g%%h-1%%c%%d, a+=(a>>31)&8640000"
echo %1 [%2x%3] Time Elapsed:!a!cs
echo(
exit /b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Einstein1969