ビンゴの結果を整形表示
Posted feedbacks - Batchfile
「重複無し乱数」で投稿したものを手直ししました。そろそろバッチでできることの限界
が見えてきたような気がします。
e.g.
C:\>bingo 30
1 2 3 4 5 6 7 8 9 10
6 14 2 13 4 28 20 9 12 16
11 12 13 14 15 16 17 18 19 20
26 15 1 30 21 25 27 22 19 29
21 22 23 24 25 26 27 28 29 30
3 23 10 24 5 18 11 17 7 8
C:\>bingo 35
1 2 3 4 5 6 7 8 9 10
10 24 34 13 2 25 17 14 8 30
11 12 13 14 15 16 17 18 19 20
29 12 23 20 18 31 9 6 27 11
21 22 23 24 25 26 27 28 29 30
33 5 35 1 15 21 3 32 26 22
31 32 33 34 35
28 7 19 16 4
遅延環境変数展開を利用しているので、Windows NTでは動作しません。Windows XPで動作
を確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | :: bingo.bat
@echo off
setlocal enabledelayedexpansion
set C=10
set i=0
set j=0
set k=0
set l=0
set m=0
set s=
set t=
set v=0
echo %1|findstr /r "[^0-9]" >NUL 2>&1
if %ERRORLEVEL% equ 0 (echo %~n0 [NUMBER] & goto :EOF)
if %1 equ 0 goto :EOF
:: 擬似配列を生成
for /l %%i in (1,1,%1) do set v_%%i=%%i
:: 値をシャッフル
call :length %1 l
echo set j=%%RANDOM:~-%l%%%>_.bat
set i=1
:shuffle
:: 8進数として解釈されないよう 0を加算
call _.bat & set /a j+=0
set /a j=%j%%%%1+1
set v=!v_%i%!
set v_%i%=!v_%j%!
set v_%j%=%v%
set /a i+=1
if %i% lss %1 goto shuffle
del _.bat
:: 結果を整形表示
set /a i=%1/%C%
set /a m=%1%%%C%
if %m% gtr 0 set /a i+=1
set j=1
set k=%C%
if %1 lss %C% set k=%1
for /l %%i in (1,1,%i%) do (
:: 上段
set s=
for /l %%j in (!j!,1,!k!) do (
set t=%%j
if %%j lss %1 call :lpad !t! %l% t
set s=!s!!t!
if %%j lss !k! set s=!s!
)
echo !s!
:: 下段
set s=
for /l %%j in (!j!,1,!k!) do (
set t=
call :lpad !v_%%j! %l% t
set s=!s!!t!
if %%j lss !k! set s=!s!
)
echo !s!
if %%i lss %i% echo.
set /a j+=%C%
set /a k+=%C%
if !k! gtr %1 set k=%1
)
endlocal
goto :EOF
:lpad
setlocal enabledelayedexpansion
set l=0
set t=
call :length %1 l
set /a l=%2-%l%
for /l %%i in (1,1,%l%) do set t=!t!
endlocal & set %3=%t%%1
goto :EOF
:length
setlocal
set i=0
set t=%1
set t=%t:"=%
:loop
set t=%t:~1%
set /a i+=1
if not "%t%" == "" goto loop
endlocal & set %2=%i%
goto :EOF
|



raynstard
#3403()
Rating1/1=1.00
「重複無し乱数」で作ったbingo関数の結果を下のように「何番目の乱数か」とセットにして10個ずつ折り返して表示するコードを書いてください。
[ reply ]