Board logo

标题: [游戏娱乐] 批处理算24点 [打印本页]

作者: 523066680    时间: 2009-1-10 09:54     标题: 批处理算24点

http://www.cn-dos.net/forum/viewthread.php?tid=45488&fpage=1

经过各位找出缺点,我自己列出了多种特殊情况,基本搞定
已经允许小数,分数了。 例如 8/(3-8/3)=24 这个口算出现分数的。
                                         (3-8/3=1/3 ->8/(1/3)=8*3/1=24)
又或许.... 所以,
接下来能找到一个例子加减乘除算24 而此批处理又算不到的同学
我给+15分
  1. @echo off &setlocal enabledelayedexpansion
  2. title made by 523066680@www.cn-dos.net - 算24.bat
  3. ::::::::::::::::::::::::::::::::::::
  4. ::批处理算24.bat
  5. ::作者:523066680
  6. ::blog http://hi.baidu.com/523066680
  7. ::首发于:http://www.cn-dos.net/forum/viewthread.php?tid=45488&fpage=1
  8. ::::::::::::::::::::::::::::::::::::
  9. :input
  10. for /f "tokens=1 delims==" %%a in ('set') do (set "%%a=")
  11. set "pexit=&pause &cls &goto :input"
  12. set /a i=10,j=11,q=12,k=13
  13. set _+=-
  14. set _-=+
  15. set _*=/
  16. set _/=*
  17. echo, &echo, 算24.bat
  18. echo, &echo, 输入4个扑克牌的数字,[范围: 1 2 3 4 5 6 7 8 9 i j q k ]
  19. echo, &echo, 其中1-9代表1-9 , i代表10 , j代表11 , q代表12 , k代表13
  20. echo, &echo,请正确输入。 示例:  q q 1 2 (或者qq12)
  21. echo, &set /p "str=可以用空格隔开,也可以不用 [exit 退出]: "
  22. echo,
  23. if "%str%"=="" (cls &goto :input)
  24. if "%str%"=="exit" (exit)
  25. call :fo "%str: =%" ""
  26. if "%have%"=="" (echo, &echo,没有答案)
  27. echo,
  28. pause
  29. cls &goto :input
  30. :://////递进结合递归//////列举数字的排列组合//////
  31. :fo
  32. if %1=="" (
  33.     if not "!defx%~2!"=="def" (call :next %~2 &set defx%~2=def)
  34.     goto :eof
  35. )
  36. if not defined _%~1 (set _%~1=-1)
  37. set str=%~1
  38. :foa
  39.   set /a _%~1+=1,foa=_%~1,fob=foa+1
  40.   call :fo "!str:~0,%foa%!!str:~%fob%!" "%~2!str:~%foa%,1!"
  41.   set str=%~1
  42.   set /a foa=_%~1
  43. if not "!str:~%foa%,-1!"=="" (goto :foa)
  44. set "_%~1="
  45. goto :eof
  46. :://////组合运算符的所有排列形式//////对接收到的4个数字进行计算
  47. :next
  48. set num=%~1
  49. set /a na=%num:~0,1%,nb=%num:~1,1%,nc=%num:~2,1%,nd=%num:~3,1%
  50. set /a yn=nb*100/nc*nc,yn2=24*nb/nc*nc-24*nb
  51. set "do=::"
  52. if %yn% equ %nb%00 (set "do=")
  53. %do% set /a spea=(na*10-nb*10/nc)*nd,speb=(na*10+nb*10/nc)*nd
  54. %do% if %spea% equ 240 echo, [ %na% - %nb% / %nc% ] * %nd% = 24 &set have=have %pexit%
  55. %do% if %speb% equ 240 echo, [ %na% + %nb% / %nc% ] * %nd% = 24 &set have=have %pexit%
  56. set /a spec=(na-(nb*nc))*nd
  57. if %spec% equ 24 echo, [ %na% - %nb% * %nc% ] * %nd% = 24 &set have=have %pexit%
  58. if %yn2% equ 0 (set "do=") else (set "do=::")
  59. %do% set /a spef=24*nb/nc-24*nd,speg=-spef
  60. %do% if %spef% equ %na% echo, %na% / [ %nb% / %nc% - %nd% ] = 24  &set have=have %pexit%
  61. %do% if %speg% equ %na% echo, %na% / [ %nd% - %nb% / %nc% ] = 24  &set have=have %pexit%
  62. set "fu=+ - x /"
  63. for %%a in (%fu%) do (
  64. for %%b in (%fu%) do (
  65.   for %%c in (%fu%) do (
  66.   set "fa=%%a" &set "fb=%%b" &set "fc=%%c"
  67.   call :next-1 !fa:x=*! !fb:x=*! !fc:x=*!
  68.   )
  69. )
  70. )
  71. goto :eof
  72. :next-1
  73. set /a count=((na %1 nb) %2 nc) %3 nd
  74. set "do=::"
  75. if %count% equ 24 (set "do=")
  76. ::////通过逆运算检验答案,例如,批处理中 3/2 = 1 而 1*2 不等于 3。
  77. %do% set /a test=((count !_%3! nd) !_%2! nc) !_%1! nb
  78. %do% if %test% neq %na% (goto :next-2)
  79. if %count% equ 24 (echo, { [%na% %1 %nb%] %2 %nc% } %3 %nd% = 24 &set have=have %pexit%)
  80. :next-2
  81. set /a ca=na %1 nb,cb=nc %3 nd,pca=ca !_%1! nb,pcb=cb !_%3! nd
  82. if %cb% equ 0 (goto :eof)
  83. if %pca% neq %na% (goto :eof)
  84. if %pcb% neq %nc% (goto :eof)
  85. set /a count2=ca %2 cb,pcount2=count2 !_%2! cb
  86. if %pcount2% neq %ca% (goto :eof)
  87. if %count2% equ 24 (echo, [%na% %1 %nb%] %2 [%nc% %3 %nd%] = 24 &set have=have %pexit%)
复制代码

作者: 523066680    时间: 2009-1-10 09:55

特别例子 qq81 (12 12 8 1)
8 8 3 3
6 5 4 1
6 4 3 1
5 5 5 1
6 6 5 5
6 4 k 3
作者: 523066680    时间: 2009-1-10 13:24

各位拜拜喽,本人离开网络一个月,这期间谁见着我发帖随便扣分。

文章:

[讨论]Batch Rename's Bug
http://www.cn-dos.net/forum/viewthread.php?tid=45655&fpage=1

[讨论]TalkAboutString
http://www.cn-dos.net/forum/viewthread.php?tid=45654&fpage=1

[分享][讨论]段落重定向方式改进
http://www.cn-dos.net/forum/viewthread.php?tid=45409&fpage=1

[讨论]2次ping1 不等于 1次ping2
http://www.cn-dos.net/forum/viewthread.php?tid=45410&fpage=1

[分享]%var%代替语句执行
http://www.cn-dos.net/forum/viewthread.php?tid=45240&fpage=1

贪吃蛇思路解析 (23楼)
http://www.cn-dos.net/forum/viewthread.php?tid=43369&fpage=1

建立永久的畸形盘符
http://www.cn-dos.net/forum/viewthread.php?tid=41796&fpage=1


作品
[原创]批处理算24点
http://www.cn-dos.net/forum/viewthread.php?tid=45488&fpage=1

[原创]批处理脚本打包工具
http://www.cn-dos.net/forum/viewthread.php?tid=44620&fpage=1

[原创]批处理写大字效果--新年贺卡
http://www.cn-dos.net/forum/viewthread.php?tid=45411&fpage=1

[vbs]满1小时就关机
http://www.cn-dos.net/forum/viewthread.php?tid=45242&fpage=1

[分享]生成待编写的测试脚本
http://www.cn-dos.net/forum/viewthread.php?tid=45250&fpage=1

[原创]举出当前最小和最大的bat文件
http://www.cn-dos.net/forum/viewthread.php?tid=41517&fpage=1

动画特效:画圆、弹球、进度条、起落等
http://www.cn-dos.net/forum/viewthread.php?tid=42124&fpage=1

[原创]纯批处理版贪吃蛇
http://www.cn-dos.net/forum/viewthread.php?tid=43369&fpage=1

[原创]中间渐渐变大的圆
http://www.cn-dos.net/forum/viewthread.php?tid=44785&fpage=1

空间随机游动粒子+贪吃蛇初版
http://www.cn-dos.net/forum/viewthread.php?tid=43059&fpage=1

【视觉类】前进中的道路+飞机大炮
http://www.cn-dos.net/forum/viewthread.php?tid=41333&fpage=1

[原创]001,002,003式的批量重命名
http://www.cn-dos.net/forum/viewthread.php?tid=41643&fpage=1

【视觉类】从中间逐渐扩大再变小的方形框框+变色   
http://www.cn-dos.net/forum/viewthread.php?tid=40711&fpage=1

[数值计算]1-99内整数开根
http://www.cn-dos.net/forum/viewthread.php?tid=43046&fpage=1

时钟--斜体+毫秒(更新,减少cpu和闪烁)   
http://www.cn-dos.net/forum/viewthread.php?tid=41833&fpage=1

[原创]潜水数天,完成了自己满意的数码雨
http://www.cn-dos.net/forum/viewthread.php?tid=42113&fpage=1

【算是月贴】我尽量减少闪烁的批处理大时钟
http://www.cn-dos.net/forum/viewthread.php?tid=41757&fpage=1

[动画]一路小跑,第一集,跳!
http://www.cn-dos.net/forum/viewthread.php?tid=41981&fpage=1

做了一个自己满意的滚动字幕
http://www.cn-dos.net/forum/viewthread.php?tid=39780&fpage=1






水区:
[分享][转载]半截故事
http://www.cn-dos.net/forum/viewthread.php?tid=45521&fpage=1

光速矛盾
http://www.cn-dos.net/forum/viewthread.php?tid=44789&fpage=1

1=0.9999999……?  
http://www.cn-dos.net/forum/viewthread.php?tid=43058&fpage=1
作者: 523066680    时间: 2009-1-21 09:39

本帖最后由 523066680 于 2019-1-29 19:52 编辑

nothing
作者: 523066680    时间: 2009-1-25 17:02

我被菜了~  请看
http://tieba.baidu.com/f?kz=522864657
10楼
作者: zjw767676    时间: 2009-4-17 23:45

3377
提示无答案
(3+3/7)*7=24
作者: sexfio    时间: 2009-4-18 18:10

我也写过贪吃蛇,而且是变色贪吃蛇,吃什么色就变什么色,不过是用按键精灵写的
//请先将画板打开并最大化,保持在前台,如果分辨率不是1280*1024全脚本只有cx,cy需要自己修改!
dim a(60),b(60),vvc(1,13)
x1=350:y1=350:x2=369:y2=350
//x1,2 y1,2是起始蛇线,可以自己重新设置,要求x2,y2>x1,y1,且必须是横线或竖线
cx=39:cy=935:ccx=0:ccy=0
//cx,cy是画板下面黑色方块的坐标,必须自己重新输入!!!!!!!!!!我分辨率是1280*1024
//每个颜色cx+(0-13就是ccx)*gg:cy=cy+(0-1就是ccy)*gg gg是颜色间隔
VBSCall pp=GetPixelColor(cx,cy)
If pp<>"000000"
KeyDown 18,1
KeyPress 67,1
KeyUp 18,1
KeyPress 69,1
Delay 50
KeyDown 18,1
KeyPress 68,1
KeyUp 18,1
KeyPress 9,1
KeyPress 9,1
KeyPress 9,1
SayString 0
KeyPress 9,1
SayString 0
KeyPress 9,1
SayString 0
KeyPress 13,1
EndIf
gg=0:gg1=0:gg2=0
While 1
IfColor cx+gg1,cy,000000,0
gg1=gg1+1
Delay 10
Else
Goto 右非黑
EndIf
EndWhile
Rem 右非黑
While 1
IfColor cx-gg2,cy,000000,0
gg2=gg2+1
Delay 10
Else
Goto 左非黑
EndIf
EndWhile
Rem 左非黑
gg=gg1+gg2-2
//gg是颜色间隔,此步算出每个颜色方块的边长-1
gg=gg+4
//gg是颜色间隔,此步把方块中那4格间隙给补上,如果你的不是4格自己修改
mmx=cx:mmy=cy:vvcx=1:vvcy=0
VBSCall GetPixelColor(mmx,mmy)
For 2
For 13
mmx=mmx+gg
vvc(vvcy,vvcx)=GetPixelColor(mmx,mmy)
vvcx=vvcx+1
EndFor
vvcy=vvcy+1
vvcx=1
mmy=mmy+gg
mmx=cx
EndFor
If x1=x2
xx=0:yy=1:ii=ABS(y2-y1)+1
Else
xx=1:yy=0:ii=ABS(x2-x1)+1
EndIf
i=2
a(1)=x1
b(1)=y1
While i<=ii
a(i)=a(i-1)+xx
b(i)=b(i-1)+yy
i=i+1
EndWhile
MoveTo x1,y1
LeftDown 1
MoveTo x2,y2
LeftUp 1
KeyPress 32,1
i=1
x=a(ii):y=b(ii)
Randomize
ccx=int(Rnd*13+1):ccy=int(Rnd+0.5)
MoveTo cx+(ccx*gg),cy+(ccy*gg)
LeftClick 1
MoveTo int(Rnd*120+300),int(Rnd*120+300)
//这里120和300可以自己设置,是在多大范围内出现随即点
LeftClick 1
bs1=cx:bs2=cy+gg
//画板白色点坐标
GetLastKey v
vv=v
csx=cx:csy=cy
While 1
MoveTo bs1,bs2
LeftClick 1
MoveTo a(i),b(i)
LeftClick 1
MoveTo csx,csy
LeftClick 1
GetLastKey v
If v<>vv and v>=37 and v<=40
If v=38
xx=0:yy=-1:vv=v
ElseIf v=40
xx=0:yy=1:vv=v
ElseIf v=37
xx=-1:yy=0:vv=v
ElseIf v=39
xx=1:yy=0:vv=v
EndIf
EndIf
x=x+xx:y=y+yy
t=1
While t<=ii
If x=a(t) and y=b(t)
Goto 重复
Else
t=t+1
EndIf
EndWhile
Gosub 遇点
Rem 重复
MoveTo x,y
LeftClick 1
a(i)=x:b(i)=y
i=i+1
If i>ii
i=1
EndIf
EndWhile
EndScript
Sub 遇点
IfColor x,y,"FFFFFF",1
ss=GetPixelColor(x,y)
If ss=GetPixelColor(cx,cy)
vvcx=0:vvcy=0
Goto 判色完
EndIf
vvcy=0:vvcx=1
For 2
For 13
If ss=vvc(vvcy,vvcx)
Goto 判色完
EndIf
vvcx=vvcx+1
EndFor
vvcx=1
vvcy=vvcy+1
EndFor
BBB=cint("&H"&left(ss,2))
GGG=cint("&H"&mid(ss,3,2))
RRR=cint("&H"&right(ss,2))
KeyDown 18,1
KeyPress 67,1
KeyUp 18,1
KeyPress 69,1
Delay 50
KeyDown 18,1
KeyPress 68,1
KeyUp 18,1
KeyPress 9,1
KeyPress 9,1
KeyPress 9,1
SayString RRR
KeyPress 9,1
SayString GGG
KeyPress 9,1
SayString BBB
KeyPress 13,1
vvcy=0:vvcx=0
Else
Return
EndIf
Rem 判色完
csx=cx+(vvcx*gg):csy=cy+(vvcy*gg)
//当前画板颜色坐标
ccx=int(Rnd*13+1):ccy=int(Rnd+0.5)
While ccx=vvcx and ccy=vvcy
ccx=int(Rnd*13+1):ccy=int(Rnd+0.5)
Delay 20
EndWhile
MoveTo cx+(ccx*gg),cy+(ccy*gg)
LeftClick 1
MoveTo int(Rnd*120+300),int(Rnd*120+300)
LeftClick 1
ii=ii+1
a(i)=x:b(i)=y
x=x+xx:y=y+yy
i=i+1
MoveTo bs1,bs2
LeftClick 1
MoveTo a(i),b(i)
LeftClick 1
MoveTo csx,csy
LeftClick 1
EndIf
Return
作者: Batcher    时间: 2009-4-18 19:19     标题: 回复 7楼 的帖子

批处理也可以实现变色
作者: 523066680    时间: 2009-4-19 07:51

哇咔咔  我2008说要做贪吃蛇的时候 没人信
结果还是出来了,尽管做的粗糙,但毕竟打破了对做游戏心生畏惧的障碍。

    如今,敢于用批制作游戏的高手们蜂拥群起啊,相信batch ,明天会更牛!
作者: sampeck    时间: 2009-6-26 15:17

有些游戏做得确实很棒!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2