中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 对称输出加分题(具有挑战性)
« [1] [2] [3] [4] [5] »
作者:
标题: 对称输出加分题(具有挑战性) 上一主题 | 下一主题
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『楼 主』:  对称输出加分题(具有挑战性)


-----------------------------------
有如下对应关系:
0123456789 | abcdefghij
要求写出人机交互批处理,
-----------------------------------
当输入7时,输出如下:
#######7## | ##c#######   
当输入a5时,输出如下:
#####5###9 | a###e#####
当输入12j时,输出如下:
012####### | #######hij
-----------------------------------
1 本人会视解题思路和技巧予以加分(重在思路)。
2 如不想处理特殊字符,可以略去中间的|不输出。
3 请在解答时注意代码的通用性,并请尽量保持代码简洁(考虑问题复杂化,解决
问题简单化)。
4 在人机交互界面时进行输入时可尽量为解题提供便利。
5 不需写出对输入字符进行判断的代码部分。
-----------------------------------

-----------------------------------
pusofalse兄弟在15楼已第一个解答出此题,但其代码明显过于复杂且不通用,因
此仅加上1分。
本人也在25楼给出了一个解决方案(代码还是复杂点了)。
已有多种解决方案(10楼、25楼、26楼、28楼、29楼、35楼、37楼、38楼...),
个人还是倾向于在28楼给出的方案(最佳方案还要大家来评定),代码如下:
@echo off&setlocal enabledelayedexpansion
set str=0j 1i 2h 3g 4f 5e 6d 7c 8b 9a
set /p code=请输入字符,中间请用空格格开:
for %%a in (%str%) do (set a=%%a
    for %%i in (%code%) do (
        if "%%i" equ "!a:~,1!" set flag=a
        if "%%i" equ "!a:~1!" set flag=a
    )
    if defined flag (
       set str1=!str1!!a:~,1!&set str2=!a:~1!!str2!&set "flag="
       ) else (
       set str1=!str1!#&set str2=#!str2!
))
cls&echo %str1% ^| %str2%&pause>nul
本人认为此代码集合了思路清晰、通用、简洁、高效等特点。
特此推介terse兄的代码如下:
@echo off&setlocal enabledelayedexpansion
set/p p=请输入:
set str=27j834fi56a901bghcde
set st=!str!&set pt=!p!
:lp
set ..!p:~%n%,1!=ok&set/a n+=1
set .!str:~,1!=!str:~-1,1!
set str=!str:~1,-1!
if defined str goto lp
:lp1
if defined ..%st:~,1% (set var1=!var1!%st:~,1%&set var2=!.%st:~,1%!!var2!)else (
if defined ..!.%st:~,1%! (set var1=!var1!%st:~,1%&set var2=!.%st:~,1%!!var2!)else set var1=!var1!#&set var2=#!var2!)
set st=!st:~1,-1!&set pt=!pt:~1!
if defined st goto lp1
echo !var1! ^| !var2!
pause
-----------------------------------
在此谢谢大家对本贴的踊跃回复,但唯一感到不足的就是基本都是高级会员
(quya老土其实也是位元老级的会员),而少见新人的踪迹,希望新人都有勇于挑
战的精神,我不断出题的原意也在于此了。
-----------------------------------


[ Last edited by zw19750516 on 2008-7-13 at 09:44 AM ]



批处理之家新域名:www.bathome.net
2008-7-10 21:16
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 2 楼』:  

可不可能输入   2a5f  这样字母和数字交错的情况?



致精致简!
2008-7-10 21:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 3 楼』:  

有可能,这也不影响啊。



批处理之家新域名:www.bathome.net
2008-7-10 21:42
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 4 楼』:  

如果输入的是e5呢?

==!
是挺难的,很费脑子。

[ Last edited by wxcute on 2008-7-10 at 10:29 PM ]



┌───────┐
├→学习→实践→┤
└───────┘
2008-7-10 22:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 5 楼』:  

这题不像是给新手做的啊~



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-7-10 22:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 6 楼』:  

还真是费脑子,总算写出来了,代码比较臃肿,先看看新手们的吧。。。



致精致简!
2008-7-10 22:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  

第一反应就是字符串逆序,不知道思路是否对头。



2008-7-10 22:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by HAT at 2008-7-10 22:41:
第一反应就是字符串逆序,不知道思路是否对头。

这一思路是对的,但解决办法是多样的。



批处理之家新域名:www.bathome.net
2008-7-10 23:02
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 9 楼』:  

还多样,就一样就已经把我的头搞大了。。。



致精致简!
2008-7-10 23:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 10 楼』:  

果真难。。。 但快成功了,繁杂,太繁杂。。。



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-7-11 00:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 11 楼』:  

呵呵,我刚开始出这题时也没想到这么难!



批处理之家新域名:www.bathome.net
2008-7-11 00:47
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 12 楼』:  

终于成功了。。。将近4个小时的努力。。。- -|||
繁杂。。。



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-7-11 01:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by pusofalse at 2008-7-11 01:26:
终于成功了。。。将近4个小时的努力。。。- -|||
繁杂。。。

兄弟是不是想得太复杂了啊。
ps:你可以发你的代码了。

[ Last edited by zw19750516 on 2008-7-11 at 01:44 AM ]



批处理之家新域名:www.bathome.net
2008-7-11 01:42
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 14 楼』:  

可能。。。1个多小时根本没思路。。。



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-7-11 01:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-7-11 01:42 AM:

兄弟是不是想得太复杂了啊。
ps:你可以发你的代码了。

[ Last edited by zw19750516 on 2008-7-11 at 01:44 AM ]

可能。。。1个多小时根本没思路。。。
写完了再看看,也没什么新思路。。。
@echo off&setlocal enabledelayedexpansion
set str=0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j
set str1=%str: =%
set n=10
set letter=%str:~19%
set num=%str:~,19%
for %%a in (%letter%) do (
        set/a n-=1
        set !n!=%%a
        set %%a=!n!
)
set/p var=Input:
set var3=%var%
:pu
if defined var3 (
        set var4=!var3:~,1!
        if !var4! leq 9 set "shuzi=!shuzi!!var4! "
        if !var4! gtr 9 call :shuzi
        set var3=!var3:~1!
        goto pu
)
goto lp
:shuzi
set "shuzi=!shuzi!!%var4%! "
goto :eof


:lp
if defined str1 (
        set str2=!str1:~,1!
        for %%a in (%shuzi%) do if "-!str2!" equ "-%%a" goto next
        for %%a in (%shuzi%) do if "-!str2!" neq "-%%a" set str2=#
:next
        set pus=!pus!!str2!
        set str1=!str1:~1!
        goto lp
)
set will=%pus:~,10%
:will
if defined will (
        set wil=!will:~-1!
        call :w
        set will=!will:~0,-1!
        goto will
)
echo %pus:~,10%^|%false%
pause>nul&exit/b


:w
if defined %wil% (set false=!false!!%wil%!) else set false=!false!%wil%


   此帖被 +1 点积分    点击查看详情   
评分人:【 bat-zw 分数: +1  时间:2008-7-11 01:50




心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-7-11 01:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: