|
26933062
银牌会员
    
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
 『第 16 楼』:
使用 LLM 解释/回答一下
呵,没想数字排序居然在联盟掀起第二次风波。热闹。。
也贴一段以前的代码。助助兴
:
@echo off&goto start&rem 数字排序
a.txt 中为一行一个数字
可以对任何 200 位以内的整数进行排序。(包括负数、正数、0、及重复的数字)
缺点: 对于0开头的数字,结果会忽略首位的0
::by 26933062 2007-11-25
:start
setlocal EnableDelayedExpansion
for /l %%a in (1 1 200) do set lin=0!lin!
for /f %%a in (a.txt) do (
set "str=%%a"
if "!str:~0,1!"=="-" (set fus=a&set str=!str:~1!&set zf=_) else set zf=+
set str=!lin!!str!
set !zf!!str:~-200! !random!!random!!random!!random!!random!!random!!random!=a
)
if defined fus call :sort _ /r
call :sort +
pause&exit
:sort
for /f "tokens=1,2 delims=_+= " %%a in ('set %1^|sort %2') do (
for /f "tokens=* delims=0" %%i in ("%%a") do (
if "%1"=="_" (set fuhao=-) else set "fuhao="
if "%%i"=="" (echo !fuhao!0) else echo !fuhao!%%i
)
)
goto :eof
Hehe, didn't expect that number sorting actually caused the second storm in the union. It's lively.
Also post a piece of previous code to add some fun
:
@echo off&goto start&rem 数字排序
Numbers are in a.txt, one per line
Can sort any integer within 200 digits. (Including negative numbers, positive numbers, 0, and repeated numbers)
Disadvantage: For numbers starting with 0, the leading 0 will be ignored in the result
::by 26933062 2007-11-25
:start
setlocal EnableDelayedExpansion
for /l %%a in (1 1 200) do set lin=0!lin!
for /f %%a in (a.txt) do (
set "str=%%a"
if "!str:~0,1!"=="-" (set fus=a&set str=!str:~1!&set zf=_) else set zf=+
set str=!lin!!str!
set !zf!!str:~-200! !random!!random!!random!!random!!random!!random!!random!=a
)
if defined fus call :sort _ /r
call :sort +
pause&exit
:sort
for /f "tokens=1,2 delims=_+= " %%a in ('set %1^|sort %2') do (
for /f "tokens=* delims=0" %%i in ("%%a") do (
if "%1"=="_" (set fuhao=-) else set "fuhao="
if "%%i"=="" (echo !fuhao!0) else echo !fuhao!%%i
)
)
goto :eof
|

致精致简! |
|
2008-4-30 08:37 |
|
|
zh159
金牌会员
     
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第 17 楼』:
使用 LLM 解释/回答一下
从负数到正数都可以,会去除重复的数字,对于开头为0得数字不能正确处理
@echo off
setlocal enabledelayedexpansion
set str= %random% %random% -%random% %random% %random% -%random% %random% -%random% %random% %random%
::对于 a.txt 中为一行一个数字采用下一行方式读取,上一行不要
::上一行set str= %random%...的数前面必需要有一个空格
::for /f %%i in (a.txt) do set str=!str! %%i
echo 排序前数组为: %str:~1%
:sort
set num=m
for %%i in (%str%) do if %%i lss !num! set num=%%i
set ret=%ret% %num%
set str=!str: %num%=!
if not "%str%" == "" goto sort
echo 排序后数组为: %ret:~1%
pause
exit
It can range from negative numbers to positive numbers, and it will remove duplicate numbers. It cannot correctly handle numbers that start with 0.
@echo off
setlocal enabledelayedexpansion
set str= %random% %random% -%random% %random% %random% -%random% %random% -%random% %random% %random%
:: For a line - by - line number in a.txt, use the next line to read, and do not need the previous line
:: The number before the previous line set str= %random%... must have a space in front
::for /f %%i in (a.txt) do set str=!str! %%i
echo The array before sorting is: %str:~1%
:sort
set num=m
for %%i in (%str%) do if %%i lss !num! set num=%%i
set ret=%ret% %num%
set str=!str: %num%=!
if not "%str%" == "" goto sort
echo The array after sorting is: %ret:~1%
pause
exit
|

 |
|
2008-4-30 10:13 |
|
|
qzwqzw
银牌会员
     天的白色影子
积分 2343
发帖 636
注册 2004-3-6
状态 离线
|
 『第 18 楼』:
使用 LLM 解释/回答一下
简化一下terse的方案,有不足再改吧
@echo off&setlocal enabledelayedexpansion
set/p str=输入数字(用空格隔开)
for %%i in (%str%) do (
set str=0000000000%%i
set .!str:~-10! !random!=%%i
)
for /f "tokens=2 delims==" %%i in ('set .') do set/p=%%i <nul
pause>nul
Simplify the terse scheme, and we can modify it if there are deficiencies.
@echo off&setlocal enabledelayedexpansion
set/p str=Enter a number (separated by spaces)
for %%i in (%str%) do (
set str=0000000000%%i
set .!str:~-10! !random!=%%i
)
for /f "tokens=2 delims==" %%i in ('set .') do set/p=%%i <nul
pause>nul
|
|
2008-4-30 16:01 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
    『第 19 楼』:
使用 LLM 解释/回答一下
这么热闹,我也来一段了,缺点是效率有点低……
@echo off & Setlocal EnableDelayedExpansion
for /L %%i in (1,1,5) do (
set skip=.!skip!
findstr /rc:"^^!skip!$" file.txt|sort
)
for 里面的 5 根据数字的最大位数来指定,如果不知道也可以写个for语句计算出来,我这里免去了。
So lively, I'll also add a part. The drawback is that the efficiency is a bit low...
@echo off & Setlocal EnableDelayedExpansion
for /L %%i in (1,1,5) do (
set skip=.!skip!
findstr /rc:"^^!skip!$" file.txt|sort
)
In the for, 5 is specified according to the maximum number of digits. If you don't know, you can also write a for statement to calculate it. I omitted it here.
|
|
2008-4-30 17:25 |
|
|
huahua0919
银牌会员
    
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
『第 20 楼』:
使用 LLM 解释/回答一下
Originally posted by lxmxn at 2008-4-30 05:25 PM:
这么热闹,我也来一段了,缺点是效率有点低……
@echo off & Setlocal EnableDelayedExpansion
for /L %%i in (1,1,5) do (
set skip=.!skip!
findstr /rc:"^^!ski ...
版主的代码没看懂,能否解释一下?
好象不支持负数排序
Originally posted by lxmxn at 2008-4-30 05:25 PM:
So lively, I'll also add one, the shortcoming is that the efficiency is a bit low...
@echo off & Setlocal EnableDelayedExpansion
for /L %%i in (1,1,5) do (
set skip=.!skip!
findstr /rc:"^^!ski ...
I didn't understand the moderator's code, can you explain it?
It seems that negative number sorting is not supported
|
|
2008-4-30 18:02 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第 21 楼』:
使用 LLM 解释/回答一下
Originally posted by huahua0919 at 2008-4-30 18:02:
版主的代码没看懂,能否解释一下?
好象不支持负数排序
就是简单的根据数字位数,findstr 出从一位到五位的数,然后 sort 排序就可以了,不过前提是数字都是正整数,而且知道最大位数,严格说起来这个不算是排序~
Originally posted by huahua0919 at 2008-4-30 18:02:
I didn't understand the moderator's code. Can you explain it?
It seems that negative numbers are not supported for sorting
It's simply to find numbers from 1-digit to 5-digit using findstr according to the number of digits, and then sort them with sort. But the premise is that the numbers are all positive integers and the maximum number of digits is known. Strictly speaking, this is not sorting~
|
|
2008-4-30 23:14 |
|
|
MLQX
初级用户
 
积分 28
发帖 15
注册 2008-4-28
状态 离线
|
『第 22 楼』:
这种方法是什么原理?
使用 LLM 解释/回答一下
为什么加一大串零在数字前,然后在环境变量里遍历时把零又截弃掉,它们便能自动排序?
请各位大侠提点一下.
Why add a long string of zeros in front of a number, and then when traversing in the environment variable, the zeros are truncated, and they can be automatically sorted? Please give your advice, great experts.
|
|
2008-5-2 05:09 |
|
|
MLQX
初级用户
 
积分 28
发帖 15
注册 2008-4-28
状态 离线
|
|
2008-5-2 11:26 |
|
|
slore
铂金会员
      
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第 24 楼』:
使用 LLM 解释/回答一下
99
1
888
排序结果是
1
888
99
如果补0的话~结果为:
00001
00099
00888
……
99
1
888
The sorting result is
1
888
99
If padding with zeros, the result is:
00001
00099
00888
……
|
|
2008-5-2 12:14 |
|
|
MLQX
初级用户
 
积分 28
发帖 15
注册 2008-4-28
状态 离线
|
『第 25 楼』:
啊明白了,我真笨,没有想到这点
使用 LLM 解释/回答一下
Originally posted by MLQX at 2008-5-2 11:26 AM:
谢谢了.quote]
Last edited by MLQX on 2008-5-2 at 12:34 PM ]
Originally posted by MLQX at 2008-5-2 11:26 AM:
Thanks.
Last edited by MLQX on 2008-5-2 at 12:34 PM ]
|
|
2008-5-2 12:23 |
|
|
MLQX
初级用户
 
积分 28
发帖 15
注册 2008-4-28
状态 离线
|
『第 26 楼』:
妙,好精炼的代码
使用 LLM 解释/回答一下
Originally posted by zh159 at 2008-4-30 01:51 AM:
以前用过的,忘了出自哪里了
@echo off
setlocal enabledelayedexpansion
set numbers=%random% %random% %random% %random% %random% %random% %random% %random%
echo 排序前 ...
来此论坛学了3 天,今天总算能看懂这段代码了.
在俺这个菜鸟看来,这种思维方法很独特.
在别人看来,也许不是独特,而是经典.
Originally posted by zh159 at 2008-4-30 01:51 AM:
Used before, forgot where it came from
@echo off
setlocal enabledelayedexpansion
set numbers=%random% %random% %random% %random% %random% %random% %random% %random%
echo 排序前 ...
Learned from this forum for 3 days, today I finally can understand this code.
In my eyes as a newbie, this way of thinking is very unique.
In other people's eyes, maybe not unique, but classic.
|
|
2008-5-2 12:45 |
|
|
MLQX
初级用户
 
积分 28
发帖 15
注册 2008-4-28
状态 离线
|
『第 27 楼』:
点号表示什么?
使用 LLM 解释/回答一下
Originally posted by plp626 at 2008-4-29 11:59 PM:
if not %1.==.
难首是文本文件里隐含的结束标志?抑或是表示行首或行尾的标志?
Last edited by MLQX on 2008-5-2 at 01:24 PM ]
Originally posted by plp626 at 2008-4-29 11:59 PM:
if not %1.==.
Is it an implicit end-of-file mark in a text file? Or is it a mark indicating the beginning or end of a line?
Last edited by MLQX on 2008-5-2 at 01:24 PM ]
|
|
2008-5-2 12:53 |
|
|
bat-zw
金牌会员
      永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第 28 楼』:
再来个通用的:
使用 LLM 解释/回答一下
&&想不到一石激起千重浪,几天未来论坛此贴已经变成了精华贴,而且如此之火,真是非我始之所料,今天将我原来的代码又研究了下,有了如下通用性极强的化码:
@echo off&setlocal enabledelayedexpansion
set "str=101 20 14 13 19 18 16 11 5 -7"
for %%i in (%str%) do call,set var=!var! n%%i
for %%i in (%var%) do set a=%%i&call :lp
echo !var:n=!
pause>nul&goto :eof
:lp
for %%i in (!var!) do (
set b=%%i
if !b:~1! lss %a:~1% (
set var=!var:%a% =!
set var=!var:%%i=%%i %a%!
)
)
&&Unexpectedly, a single stone stirs up thousands of waves. I haven't been to the forum for a few days, and this post has become an essence post and is so popular, which is really beyond my initial expectation. Today, I studied my original code again and have the following highly universal code:
@echo off&setlocal enabledelayedexpansion
set "str=101 20 14 13 19 18 16 11 5 -7"
for %%i in (%str%) do call,set var=!var! n%%i
for %%i in (%var%) do set a=%%i&call :lp
echo !var:n=!
pause>nul&goto :eof
:lp
for %%i in (!var!) do (
set b=%%i
if !b:~1! lss %a:~1% (
set var=!var:%a% =!
set var=!var:%%i=%%i %a%!
)
)
|

批处理之家新域名:www.bathome.net |
|
2008-5-3 22:19 |
|
|
MLQX
初级用户
 
积分 28
发帖 15
注册 2008-4-28
状态 离线
|
『第 29 楼』:
我觉得有一个人的代码最精炼:
使用 LLM 解释/回答一下
@echo off&for /f "delims=" %%i in ('sort /+n c.txt') do echo %%i
如果比较三位数,那么把n值改为3即可.
@echo off&for /f "delims=" %%i in ('sort /+n c.txt') do echo %%i
If comparing three-digit numbers, change the n value to 3.
|
|
2008-5-4 00:41 |
|
|
terse
银牌会员
    
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第 30 楼』:
使用 LLM 解释/回答一下
Originally posted by zw19750516 at 2008-5-3 22:19:
&&想不到一石激起千重浪,几天未来论坛此贴已经变成了精华贴,而且如此之火,真是非我始之所料,今天将我原来的代码又研究了下,有了如下 ...
不通用 你这样试 set "str=1111 111 20 14 13 19 18 16 11 5 -7"
Originally posted by zw19750516 at 2008-5-3 22:19:
&&Unexpectedly, a single stone stirs up a thousand waves. I haven't been to the forum for a few days, and this post has become an essence post, and it's so popular. It's really beyond my original expectation. Today, I studied my original code again and have the following...
Not universal. You try set "str=1111 111 20 14 13 19 18 16 11 5 -7"
|

简单!简单!再简单! |
|
2008-5-4 12:02 |
|