批处理脚本,需要帮助生成六个不同数字的行,与任何前一行的公共数字不超过 2 个
目标是生成一个 csv 文件,其中包含 300 组 6 个介于 1 到 39 之间的随机数,每组 6 个位于单独的行上,并且每行最多有两个数字与任何前一行相同(两个数字与任何一个数字)之前所有行的行)。这就是目标。我遇到了困难。我希望有人能看到更简单的方法。
我制作的脚本(拼凑在一起)生成一个列表文件,在行中没有重复,但行本身变得越来越长,而不是在 6 处切断。我还需要检查所有先前行以确保最大行数的部分两个重复项。如果有人有解决方法(真诚的解决方法),我非常感谢任何可以帮助更快实现目标的人。
这是到目前为止的脚本:
@echo off
setlocal enabledelayedexpansion
for /L %%j in (1 1 10) do (
call:get_rand
echo %%j ;!NUM[1]!;!NUM[2]!;!NUM[3]!;!NUM[4]!;!NUM[5]!;!NUM[6]! >> test.txt
sort "get_six.txt" >> "get_sort.txt"
for /f %%b in (get_sort.txt) do findstr "%%~b" "get_tmp.txt" >nul 2>&1 || echo %%b>>"get_tmp.txt"
call:get_horiz
rem call:del_get_files
)
goto:EOF
rem delete extra files:
rem :del_get_files
rem for %%z in (get_six.txt,get_sort.txt,get_tmp.txt) do (
rem if exist "%%z" del /q /f "%%z"
rem )
rem goto:EOF
rem get_tmp.txt vertical list to csv horizontal list.txt
:get_horiz
set var=
for /f "tokens=*" %%c in (get_tmp.txt) do (
call set var=%%var%%,%%c
)
SET var=%var:~1%
echo !var! >> list.txt
goto:EOF
rem get first set of six random numbers
:get_rand
for /L %%i in (1 1 6) do (
call:get_n %%i
rem get random number, 1 is the min, 39 is the max
echo !num[%%i]! >> get_six.txt
)
goto:EOF
rem get random num[%%i] between 1 and 39
:get_n
set /a num[%1] = %RANDOM% * 39 / 32768 + 1
goto:EOF
=========
list.txt (expected):
03,11,17,24,28,37
11,13,25,26,36,39
02,09,15,23,28,37
03,13,14,26,28,32
08,11,21,22,34,36
02,13,16,26,27,31
01,06,14,20,27,31
07,09,20,23,33,34
...
条件1:每行没有重复的数字
条件 2:与任何其他行匹配的数字不超过两个
(我只目视检查过这些,我可能错过了一些,但是,例如,第四行“03,13,14,26,28,32”与第一行“03, 11,17,24,28,37”,以及 13 和 26 以及第二个“11,13,25,26,36,39”——没关系,在允许的最大值内)
list.txt (current):
10,28,39
10,28,39,14,20,22,36
10,28,39,14,20,22,36,25,34,35
10,28,39,14,20,22,36,25,34,35,18,31,32
10,28,39,14,20,22,36,25,34,35,18,31,32,19,29,7
10,28,39,14,20,22,36,25,34,35,18,31,32,19,29,7,11,17,21,23,33
10,28,39,14,20,22,36,25,34,35,18,31,32,19,29,7,11,17,21,23,33,12,37
10,28,39,14,20,22,36,25,34,35,18,31,32,19,29,7,11,17,21,23,33,12,37,24
10,28,39,14,20,22,36,25,34,35,18,31,32,19,29,7,11,17,21,23,33,12,37,24,15
10,28,39,14,20,22,36,25,34,35,18,31,32,19,29,7,11,17,21,23,33,12,37,24,15,27
:/