ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11315|回复: 53

[Excel 函数与公式] [第74期]Piny系列-字串組合研究二小題

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-5-3 13:12 | 显示全部楼层 |阅读模式
參考http://club.excelhome.net/thread-682764-1-1.html

兩個小題目,可分別作答,分別得分,惟為了改考卷方便,一人限占一樓層

題目一
AB二列僅為金木火水土風雷塵,不會有其他字,不會有空格
D2填入公式,可下拉

當AB五行符合相生相剋時,D2顯示"X生Y"或"X剋Y"
皆未符合相生相剋,D2顯示無屬性
請看C列之模擬答案(不得引用)
相生:「木生火,火生土,土生金,金生水,水生木」。
相剋:「木剋土,火剋金,土剋水,金剋木,水剋火」。
五行生風,雷剋五行,塵之組合皆為無屬性

題目二
AB二列僅為暗棋棋子,不會有其他字,不會有空格
D2填入公式,可下拉

當AB符合勝負時,D2顯示"X勝Y"
同色棋子,D2顯示同國聯盟
請看C列之模擬答案(不得引用)
同等級時,D2顯示無勝負
將勝仕相俥傌炮 帥勝士象車馬包
士勝相俥傌炮兵 仕勝象車馬包卒
象勝俥傌炮兵  相勝車馬包卒
車勝傌炮兵   俥勝馬包卒
馬勝炮兵    傌勝包卒
包勝兵     炮勝卒
卒勝帥     兵勝將

要求
無VBA
無定義名稱
無輔助列
2003需正常執行

得分
該題之E1驗證正確
公式字元(含等號)在200字元(含)內,得技術分1分
餘視精彩情況與版主群討論酌增技術分或財富,以2分為限

截止時間:2011/6/4

題目一預設解163;題目二預設解134。
已有不少老師之解甚優於敝解 2011/5/9 piny

兩題預設解皆未使用到MID函數,若您的最優字元解未含MID函數,除原先技術分評比外,將額外加20分財富! ^^
2011/5/12 piny

[ 本帖最后由 piny 于 2011-6-5 07:04 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-5-4 09:04 | 显示全部楼层
占领高层
解答第一题:
151字符
=MID("雷剋木剋土生金生風  雷剋火剋金生水生風  雷剋土剋水生木生風  雷剋金剋木生火生風  雷剋水剋火生土生風  無屬性",MIN(FIND(MID(A2&B2&A2,{1,2},2),{"雷木土金風 雷火金水風 雷土水木風 雷金木火風 雷水火土風A"}&A2&B2&A2))/0.548,3)
再精简149
=MID("雷剋木剋土生金生風  雷剋火剋金生水生風  雷剋土剋水生木生風  雷剋金剋木生火生風  雷剋水剋火生土生風  無屬性",MIN(FIND(MID(A2&B2&A2,{1,2},2),"雷木土金風 雷火金水風 雷土水木風 雷金木火風 雷水火土風A"&A2&B2&A2))/0.548,3)

先解答第二题:
160字符
=IF(SUM(-1^FIND(A2:B2,"將帥士仕象相車俥馬傌包炮卒兵")),"同國聯盟",REPLACE(CHOOSE(MOD(ROUNDUP(SUM(INT(FIND(A2:B2,"A將帥士仕象相車俥馬傌包炮卒兵")/2)*{1,-1})/5,),-3)+3,B2&A2,A2&B2,"無負"),2,,"勝"))
精简一下,153字符
=IF(SUM(-1^FIND(A2:B2,"將帥士仕象相車俥馬傌包炮卒兵")),"同國聯盟",CHOOSE(MOD(ROUNDUP(SUM(INT(FIND(A2:B2,"A將帥士仕象相車俥馬傌包炮卒兵")/2)*{1,-1})/5,),-3)+3,B2&"勝"&A2,A2&"勝"&B2,"無勝負"))
再精简147
=IF(COUNT(FIND(A2:B2,"將士象車馬包卒"))=1,CHOOSE(MOD(ROUNDUP(SUM(INT(FIND(A2:B2,"A將帥士仕象相車俥馬傌包炮卒兵")/2)*{1,-1})/5,),-3)+3,B2&"勝"&A2,A2&"勝"&B2,"無勝負"),"同國聯盟")

[ 本帖最后由 chenhh803 于 2011-5-18 16:45 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-5-5 10:23 | 显示全部楼层
先占位,发上个半成品,再慢慢修改。

第二题:
=TEXT(TEXT(IF(MOD(SUM(FIND(A2:B2,"將帥 士仕 象相 車俥 馬傌 包炮 卒兵")*{1,-1}),3),SUM(FIND(A2:B2,"將帥 士仕 象相 車俥 馬傌 包炮 卒兵")*{1,-1}),0),"[=1]无;[=-1]无;0"),""&B2&"勝"&A2&";"&A2&"勝"&B2&";同國聯盟;無勝負")

还没解决 卒兵与將帥  的问题。

得出了正确答案,但长度超出了范围,可能03中的嵌套层数也超了。
=TEXT(TEXT(TEXT(TEXT(IF(MOD(SUM(FIND(A2:B2,"將帥 士仕 象相 車俥 馬傌 包炮 卒兵")*{1,-1}),3),SUM(FIND(A2:B2,"將帥 士仕 象相 車俥 馬傌 包炮 卒兵")*{1,-1}),0),"[=17]-2;[=19]-2;0"),"[=-17]2;[=-19]2;0"),"[=1]无;[=-1]无;0"),""&B2&"勝"&A2&";"&A2&"勝"&B2&";同國聯盟;無勝負")

继续研究。

正好满足要求的,字元200,已通过测试:
=TEXT(TEXT(TEXT(IF(MOD(SUM(FIND(A2:B2,"將帥 士仕 象相 車俥 馬傌 包炮 卒兵")*{1,-1}),3),SUM(FIND(A2:B2,"將帥 士仕 象相 車俥 馬傌 包炮 卒兵")*{1,-1}),),"[>16]-2;[<-16]2;0"),"[=1] ;[=-1] ;0"),""&B2&"勝"&A2&";"&A2&"勝"&B2&";同國聯盟;無勝負")

先发一个超字符的供参考,257个,有时间再想法修改。
=CHOOSE(IF(OR(A2:B2={"塵";"雷";"風"}),TEXT(TEXT(TEXT(SUM((A2:B2={"塵";"雷";"風"})*((ROW($1:$3)-1)*10+COLUMN($A:$B))),"[<9]!0;[=12]2;0"),"[=11]3;[=22]4;0"),"[=21]1;[>10]!0;0"),MOD(SUM(FIND(A2:B2,"木火土金水")*{1,-1}),5))+1,"無屬性",B2&"生"&A2,B2&"剋"&A2,A2&"剋"&B2,A2&"生"&B2)

终于做出了187字符的公式:
=CHOOSE(IF(OR(A2:B2={"塵";"雷";"風"}),TEXT(SUM((A2:B2={"塵";"雷";"風"})*{5,5;3,2;6,4}),"[=6]1;[>4]!0;0"),MOD(SUM(FIND(A2:B2,"木火土金水")*{1,-1}),5))+1,"無屬性",B2&"生"&A2,B2&"剋"&A2,A2&"剋"&B2,A2&"生"&B2)



再来个180字符的,第二题:
=TEXT(TEXT(TEXT(MOD(TEXT(SUM(FIND(A2:B2,"帥仕相俥傌炮兵aaaaaa將士象車馬包卒")*{1,-1}),"[>6]0;[<-6]!-0;!7.5,,"),13)-6,"[=1.5] ;[=]2;0"),"[=-6]!0;[=1]-2;0"),""&A2&"勝"&B2&";"&B2&"勝"&A2&";無勝負;同國聯盟")

[ 本帖最后由 lhx120824 于 2011-5-29 23:57 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-5-5 21:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 1楼 piny 的帖子

第一题
200字符
=MID(A2&"生"&B2&"生"&A2&"剋"&B2&"剋"&A2&" 無屬性",RIGHT(MIN(--TEXT(2*ROW($1:$10)+{-1,0,23,22,44}&{1,2,3,4,6},"[>"&MIN(FIND(A2&B2,"木火木風火土火風土金土風金水金風水木水風木,,木金木雷火水火雷土木土雷金火金雷水土水雷木 "&A2&B2&A2))&0&"];999")))*2-1,3)

176字符(基础用法)
=MID("木生火生土生金生水生木生風111火生風111土生風111金生風111水生風111木剋土剋水剋火剋金剋木111雷剋木剋雷剋火剋雷剋土剋雷剋金剋雷剋水111無屬性",MIN(FIND(MID(A2&B2&A2,{1,2},2),"木火土金水木風1火風1土風1金風1水風1木土水火金木1雷木雷火雷土雷金雷水 "&A2&B2&A2))*2-1,3)
----------------------------
第二题
155字符
=CHOOSE(LOOKUP(SUM(FIND(A2:B2,"帥仕相俥傌炮兵123456將士象車馬包卒")*{1,-1}),{-19,2;-18,1;-13,4;-12,2;-7,1;-6,3;7,2;8,1;13,4;14,2;19,1}),A2&"勝"&B2,B2&"勝"&A2,"同國聯盟","無勝負")

[ 本帖最后由 wangyuhu 于 2011-5-16 15:16 编辑 ]

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-5-6 06:47 | 显示全部楼层
第一次参加,先交了吧。

  1. =MID(TEXT(MID("風木金火水土木水金土火木雷_風水雷_風金雷_風土雷_風火雷",LOOKUP(99,FIND(MID(11&A2&B2&A2,ROW($1:$4),2),"風木金火水土木水金土火木雷_風水雷_風金雷_風土雷_風火雷11")),2),"@剋@無屬性@生@"),2+8*COUNT(FIND(A2&B2,"風水木水金水風火土火木火風金土金風土風木風")),3)
复制代码

  1. =TRIM(LEFT(TEXT(TEXT(ABS(SUM(FIND(A2:B2,"卒包馬車象士將abcdef兵炮傌俥相仕帥")*{1,-1})),"[<7]同國聯盟;[=13]無勝負 ;#"),"[=7]兵勝將 ;[=19]卒勝帥 ;")&IF(SUM(RIGHT(FIND(A2:B2,"卒包馬車象士將abc兵炮傌俥相仕帥"))*{1,-1})>0,A2&"勝"&B2,B2&"勝"&A2),4))
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-5-6 20:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
第一题 加等号164
  1. =MID("雷剋木生火生土生金生水生木剋土剋水剋火剋金剋木生風A土生風A雷剋土A雷剋水A水生風A火生風A雷剋火A雷剋金A金生風A無屬性",MIN(FIND(IF({1;0},A2&B2,B2&A2),"雷木火土金水木土水火金木風風土土雷雷水水風風火火雷雷金金風A"&A2&B2&A2)+(A2=B2)*19,30)*2-1,3)
复制代码
第二题加等号151
  1. =TRIM(MID(A2&"勝"&B2&" "&B2&"勝"&A2&" 同國聯盟無勝負",LOOKUP(-2^SUM(FIND(A2:B2,"帥將AA仕士AA相象AA俥車AA傌馬AA炮包AA兵卒")*{1,-1}),-2^{25;21;1;-3;-23;-26},{1;5;13;1;5;9}),4))
复制代码
  1. =CHOOSE(LOOKUP(-2^SUM(FIND(A2:B2,"帥將AA仕士AA相象AA俥車AA傌馬AA炮包AA兵卒")*{1,-1}),-2^{25;21;1;-3;-23;-26},{1;2;4;1;2;3}),A2&"勝"&B2,B2&"勝"&A2,"同國聯盟","無勝負")
复制代码

[ 本帖最后由 chunlin1wang 于 2011-5-29 08:31 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-5-6 22:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

两个都做出来了,以后再精简。

题一:194字节
D2
=CHOOSE(SUM(NOT(ISERROR(SEARCH(IF({1;0},IF({1,0},A2&B2,B2&A2),IF({1,0},A2&"?"&B2,B2&"?"&A2)),"木火土金水木火00雷0木風00雷0火風00雷0土風00雷0金風00雷0水風")))*{1,2;3,4})+1,"無屬性",A2&"生"&B2,B2&"生"&A2,A2&"剋"&B2,B2&"剋"&A2)
题二:178字节
D2
=CHOOSE((SUM(N(FIND(A2:B2,"帥仕相俥傌炮兵將士象車馬包卒")<8))=1)*TEXT(SUM(EVEN(FIND(A2:B2,"帥將仕士相象俥車傌馬炮包兵卒帥將",IF(OR(A2:B2={"兵";"卒"}),3,1)))*{1,-1}),"!1;!2;!3")+1,"同國聯盟",B2&"勝"&A2,A2&"勝"&B2,"無勝負")
都是单单元格数组公式,不知附不符合题意。

第一题,用text函数精简了2个字符:
=CHOOSE(SUM(NOT(ISERROR(SEARCH(IF({1;0},IF({1,0},A2&B2,B2&A2),IF({1,0},A2&"?"&B2,B2&"?"&A2)),TEXT("00雷0","木火土金水木火@木風@火風@土風@金風@水風"))))*{1,2;3,4})+1,"無屬性",A2&"生"&B2,B2&"生"&A2,A2&"剋"&B2,B2&"剋"&A2)

第一题再精简:161字符(比楼主的少了哦,呵呵~~)
=CHOOSE(SUM(NOT(ISERROR(SEARCH(A2:B2&{"";"?"}&IF({1,0},B2,A2),TEXT("00雷0","木火土金水木火@木風@火風@土風@金風@水風"))))*{1,2;3,4})+1,"無屬性",A2&"生"&B2,B2&"生"&A2,A2&"剋"&B2,B2&"剋"&A2)

[ 本帖最后由 trustwxq 于 2011-5-10 09:21 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-5-7 01:32 | 显示全部楼层
  1. 题一:
  2.   公式长度:190
  3. D2=MID("木生火生土生金生水生木生風AA生火生風AA生土生風AA生金生風AA生水生風AAA雷剋木剋AA雷剋火剋AA雷剋土剋AA雷剋金剋AA雷剋水剋火剋金剋木剋土剋水   無屬性",MIN(FIND(A2:B2&TRANSPOSE(A2:B2),"木火土金水木風A火風A土風A金風A水風A雷木A雷火A雷土A雷金A雷水火金木土水"&0&A2&A2&B2&B2&A2))*2-1,3)数组
复制代码
  1. 题二:
  2.   公式长度:181
  3. D2=IF(ABS(SUM(FIND(A2:B2,"兵炮傌俥相仕帥AAAAAA卒包馬車象士將")*{1,-1}))<7,"同國聯盟",MID(A2&"勝"&B2&"勝"&A2&"無勝負",TEXT(TEXT(SUM(MOD(FIND(A2:B2,"兵炮傌俥相仕帥卒包馬車象士將")-1,7)*{1,-1}),"[=-6]1;[=6]-1"),"1;3;6"),3))数组
复制代码

[ 本帖最后由 草民1982111 于 2011-5-7 09:27 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-5-7 15:20 | 显示全部楼层

回复 1楼 piny 的帖子

第一小题:
很长的
D65=IF(OR(B65=A65,B65="塵",A65="塵",ABS(CODE(A65)-CODE(B65))=11893),"無屬性",IF(ISERR(LOOKUP(FIND(A65&B65,"木火土金水木土水火金木 雷金 雷木 雷水 雷火 雷土 木風 土風 水風 火風 金風"),{0,6,12,28},A65&{"生","剋","剋","生"}&B65)),LOOKUP(FIND(B65&A65,"木火土金水木土水火金木 雷金 雷木 雷水 雷火 雷土 木風 土風 水風 火風 金風"),{0,6,12,28},B65&{"生","剋","剋","生"}&A65),LOOKUP(FIND(A65&B65,"木火土金水木土水火金木 雷金 雷木 雷水 雷火 雷土 木風 土風 水風 火風 金風"),{0,6,12,28},A65&{"生","剋","剋","生"}&B65)))
上拉

TA的精华主题

TA的得分主题

发表于 2011-5-8 17:34 | 显示全部楼层

第一题:
D2=CHOOSE(CEILING(SUM((IF({1,0},A2&B2,B2&A2)=MID("木火火土水木土金金水木風火風土風金風水風木土金木火金水火土水雷木雷火雷土雷金雷水",ROW($1:20)*2-1,2))*(ROW($1:20)+{0,20}))/10,1)+1,"無屬性",A2&"生"&B2,A2&"剋"&B2,B2&"生"&A2,B2&"剋"&A2)


第二题:
c2=IF(MAX((IF({1,0},A2&B2,B2&A2)=MID("卒兵包炮馬傌車俥象相士仕將帥",ROW($1:$7)*2-1,2))*ROW($1:$7)),"無勝負",IF(MOD(MAX((A2=MID("卒兵包炮馬傌車俥象相士仕將帥",ROW($1:$14),1))*ROW($1:$14))-MAX((B2=MID("卒兵包炮馬傌車俥象相士仕將帥",ROW($1:$14),1))*ROW($1:$14)),2),IF(OR(A2&B2=MID("兵包將兵兵車傌車炮車包俥馬俥卒俥俥將傌將炮將仕將相將兵馬炮馬包傌卒傌卒炮兵士俥士傌士炮士相士包仕車仕馬仕象仕卒仕包帥車帥馬帥士帥象帥包相車相馬相卒相兵象俥象傌象炮象帥卒",ROW($1:$42)*2-1,2)),B2&"勝"&A2,A2&"勝"&B2),"同國聯盟"))

[ 本帖最后由 tslx8129 于 2011-6-3 22:30 编辑 ]

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 19:35 , Processed in 0.054247 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表