ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 函数与公式] 【71期】Piny系列-十二生肖大亂鬥

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-2-17 18:01 | 显示全部楼层 |阅读模式
題目
ABC三列僅為十二生肖,不會有其他字,不會有空格
J2填入公式,可下拉

當ABC生肖有任意二個係相鄰時,J2顯示"X的下一個生肖是Y"(若有多組答案,請任選一組)
皆未相鄰,J2顯示無相鄰
請看D列至I列之模擬答案

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

得分
ABC三列共1728種情況皆可得出正確解(若有多組正確組,任選一組皆可,已設計驗算,K1為正確即恭禧過關)
公式字元(含等號)在220字元(含)內,得技術分1分
公式字元(含等號)在180字元(含)內,得技術分2分
公式新穎(比如未使用到IF函數及乘號),再加技術分1分(需由版主協助判斷)

還有一題挑戰題,列增為5列,改為天干地支60循環,將於近日於原帖出加分題(加分條件待與版主討論中)

水帖或未提出答案者將予以扣分

補充說明:J2只能引用A2, B2, C2,之後下拉

目前小弟暫定最短字元解為130字元 中心思維與任何參賽朋友都不一樣 歡迎繼續挑戰 該公式
1.沒用到IF, CHOOSE
2.沒用到 + - * /
3.沒用到SUBSTITUTE, REPLACE
2011/3/1 piny


截止時間:2011/3/19
解答篇在52樓
2011/3/20 piny

[ 本帖最后由 piny 于 2011-3-20 13:07 编辑 ]

本帖子中包含更多资源

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

x

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-2-18 19:12 | 显示全部楼层

回复 1楼 piny 的帖子

先拿一分:
J2=LOOKUP(MIN(FIND(A2:C2&TRANSPOSE(A2:C2),"鼠牛虎兔龍蛇馬羊猴雞狗豬鼠"&A2:C2&TRANSPOSE(A2:C2))),ROW($1:$13),IF(ROW($1:$13)-13,MID("鼠牛虎兔龍蛇馬羊猴雞狗豬",ROW($1:$12),1)&"的下一個生肖是"&MID("牛虎兔龍蛇馬羊猴雞狗豬鼠",ROW($1:$12),1),"無相鄰"))
数组公式,长度<200
精简一下:
J2=INDEX(TEXT(ROW($1:$13),"[>12]無相鄰;"&REPLACE(MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",ROW($1:$13),2),2,,"的下一個生肖是")),MIN(FIND(A2:C2&TRANSPOSE(A2:C2),"鼠牛虎兔龍蛇馬羊猴雞狗豬鼠"&A2:C2&TRANSPOSE(A2:C2)),13))
公式长度:        169

再精简:
J2=SUBSTITUTE(REPLACE(MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠辈",MIN(FIND(A2:C2&TRANSPOSE(A2:C2),"鼠牛虎兔龍蛇馬羊猴雞狗豬鼠"&A2:C2&TRANSPOSE(A2:C2)),13),2),2,,"的下一個生肖是"),"鼠的下一個生肖是辈","無相鄰")
公式长度:151(等号“=”不算)
后面两个公式中都没有用到IF()函数和"+-*/"运算.

再精简:
J2=SUBSTITUTE(REPLACE(MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠之辈",MIN(FIND(A2:C2&TRANSPOSE(A2:C2),"鼠牛虎兔龍蛇馬羊猴雞狗豬鼠辈"&A2:C2&TRANSPOSE(A2:C2))),2),2,,"的下一個生肖是"),"辈的下一個生肖是","無相鄰")
公式长度:149(等号“=”不算)

再精简:
J2=MID(TEXT(MID("鼠豬狗雞猴羊馬蛇龍兔虎牛鼠之0",MIN(FIND(A2:C2&TRANSPOSE(A2:C2),"鼠豬狗雞猴羊馬蛇龍兔虎牛鼠辈"&A2:C2&TRANSPOSE(A2:C2))),2),"[=] 無相鄰;@的下一個生肖是@"),2,9)
公式长度:133(等号“=”不算)

再精简:
J2=MID(TEXT(MID("鼠豬狗雞猴羊馬蛇龍兔虎牛鼠之0",MIN(FIND(A2:C2&TRANSPOSE(A2:C2),"鼠豬狗雞猴羊馬蛇龍兔虎牛鼠辈"&A2:C2&TRANSPOSE(A2:C2))),2)," 無相鄰;@的下一個生肖是@"),2,9)
公式长度:130(等号“=”不算)

[ 本帖最后由 fangjianp 于 2011-3-2 13:33 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-2-19 01:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
只能把答案算出来,不过公式太长了,两种方法都311个字符。唯一做到了一点,没用IF函数(Choose函数不知道算不算)
两个公式差不多:
=CHOOSE(1+MAX(NOT(ISERR(SEARCH(MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",SEARCH(A2:C2,"鼠牛虎兔龍蛇馬羊猴雞狗豬")+1,1),PHONETIC(A2:C2))))*{1,2,3}),"無相鄰",A2&”的下一個生肖是”&MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",SEARCH(A2,"鼠牛虎兔龍蛇馬羊猴雞狗豬")+1,1),B2&”的下一個生肖是”&MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",SEARCH(B2,"鼠牛虎兔龍蛇馬羊猴雞狗豬")+1,1),C2&”的下一個生肖是”&MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",SEARCH(C2,"鼠牛虎兔龍蛇馬羊猴雞狗豬")+1,1))

=SUBSTITUTE(CHOOSE(1+MAX(NOT(ISERR(SEARCH(MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",SEARCH(A2:C2,"鼠牛虎兔龍蛇馬羊猴雞狗豬")+1,1),PHONETIC(A2:C2))))*{1,2,3}),"無相鄰",A2&0&MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",SEARCH(A2,"鼠牛虎兔龍蛇馬羊猴雞狗豬")+1,1),B2&0&MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",SEARCH(B2,"鼠牛虎兔龍蛇馬羊猴雞狗豬")+1,1),C2&0&MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",SEARCH(C2,"鼠牛虎兔龍蛇馬羊猴雞狗豬")+1,1)),0,"的下一個生肖是")

开幝以后向高手学习。
PS:调试几次公式报错,原来是繁体字在做怪。下次希望楼主出贴的时候可以把繁体字给简化下。

终于可以了,190个字符,
=SUBSTITUTE(CHOOSE(MAX((MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",SEARCH(A2:C2,"鼠牛虎兔龍蛇馬羊猴雞狗豬")+1,1)=TRANSPOSE(A2:C2))*{1,2,3;4,5,6;7,8,9})+1,"無相鄰",,B2&0&A2,C2&0&A2,A2&0&B2,,C2&0&B2,A2&0&C2,B2&0&C2),"0","的下一個生肖是")

[ 本帖最后由 oyzhjr 于 2011-2-19 10:22 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-2-19 10:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
J2=SUBSTITUTE(REPLACE(MID("1鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",MAX((COUNTIF(A2:C2,MID("牛虎兔龍蛇馬羊猴雞狗豬鼠",FIND(A2:C2,"鼠牛虎兔龍蛇馬羊猴雞狗豬"),1))>0)*FIND(A2:C2,"鼠牛虎兔龍蛇馬羊猴雞狗豬"))+1,2),2,,"的下一個生肖是"),"1的下一個生肖是鼠","無相鄰")

130字符,期待piny老师的解法

[ 本帖最后由 半半瓶醋 于 2011-3-11 21:29 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-2-20 01:16 | 显示全部楼层
先占位(公式长218字):
=IF(COUNT(FIND(A2:C2&TRANSPOSE(A2:C2),"鼠牛虎兔龙蛇马羊猴鸡狗猪鼠")),REPLACE(MID("鼠牛虎兔龙蛇马羊猴鸡狗猪鼠",FIND(LOOKUP(,-FIND(MID("鼠牛虎兔龙蛇马羊猴鸡狗猪鼠",FIND(A2:C2,"1鼠牛虎兔龙蛇马羊猴鸡狗猪"),1),PHONETIC(A2:C2)),A2:C2),"鼠牛虎兔龙蛇马羊猴鸡狗猪鼠"),2),2,,"的下一个生肖是"),"无相邻")

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-2-20 15:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
先做一个176字符的,以后有思路再简化:
  1. =INDEX(REPLACE(MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",ROW($1:$17),2),2,,TEXT(ROW($1:$17),"[>12]無相鄰;的下一個生肖是")),FIND(11,9*10^13+SUBSTITUTE(SUM(10^FIND(A2:C2,"豬狗雞猴羊馬蛇龍兔虎牛鼠"))*(1+10^-12),2,1)&911)-1)
复制代码
136字符:
  1. =LOOKUP("做",IF({1,0},"無相鄰",LOOKUP("做",A2:C2&"的下一個生肖是"&MID(A2&B2&C2,FIND(MID("牛虎兔龍蛇馬羊猴雞狗豬鼠",FIND(A2:C2,"鼠牛虎兔龍蛇馬羊猴雞狗豬"),1),A2&B2&C2),1))))
复制代码

[ 本帖最后由 wcymiss 于 2011-3-4 18:13 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-2-20 17:34 | 显示全部楼层
。。。。。。。。。。。

[ 本帖最后由 草民1982111 于 2011-2-22 10:25 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-2-20 17:35 | 显示全部楼层
=SUBSTITUTE(REPLACE(MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠 無相",FIND("00",TEXT(SUM(10^((MMULT(1-({"鼠";"牛";"虎";"兔";"龍";"蛇";"馬";"羊";"猴";"雞";"狗";"豬";"鼠"}=A2:C2),{1;1;1})=3)*(14-ROW($1:$13))))/1%,REPT(0,16))),2),2,,"的下一個生肖是"),"的下一個生肖是相","相鄰")
想了一个下午,总算用了217字符搞定了,好辛苦
================================================
缩减一下,179个字符,刚好达到180以内的要求
=SUBSTITUTE(REPLACE(MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠 無相",FIND(0&0,SUM(0.1^((MMULT(1-(MID("鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",ROW($1:$14),1)=A2:C2),{1;1;1})=3)*ROW($1:$14)))&0&0)-2,2),2,,"的下一個生肖是"),"的下一個生肖是相","相鄰")

[ 本帖最后由 鬼狐 于 2011-2-20 18:23 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-2-20 19:50 | 显示全部楼层
参与一下,我的答案似曾相识。

J2
=SUBSTITUTE(REPLACE(MID("1鼠牛虎兔龍蛇馬羊猴雞狗豬鼠",-LOOKUP(,-FIND(MID(A2&B2&C2&A2&C2&B2&A2&2,10-ROW($1:$9),2),"3鼠牛虎兔龍蛇馬羊猴雞狗豬鼠")),2),2,,"的下一個生肖是"),"1的下一個生肖是鼠","無相鄰")

下拉

距离版主的要求还是相去甚远。
没有好的思路,简化一下。
=SUBSTITUTE(MID(" 無相鄰 鼠0牛0虎0兔0龍0蛇0馬0羊0猴0雞0狗0豬0鼠",2*LOOKUP(99,FIND(MID(A2&B2&C2&A2&C2&B2&A2&2,10-ROW($1:$9),2),"33鼠牛虎兔龍蛇馬羊猴雞狗豬鼠")),3),0,"的下一個生肖是")

只用了5层函数嵌套,也算尽力了。

[ 本帖最后由 wangg913 于 2011-3-19 21:13 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-2-20 20:16 | 显示全部楼层
  1. =IF(COUNT(FIND(MID(A2&B2&C2&A2&C2&B2&A2,ROW($1:$6),2),"鼠牛虎兔龙蛇马羊猴鸡狗猪鼠")),REPLACE(MID(A2&B2&C2&A2&C2&B2&A2,MATCH(,0/FIND(MID(A2&B2&C2&A2&C2&B2&A2,ROW($1:$6),2),"鼠牛虎兔龙蛇马羊猴鸡狗猪鼠")),2),2,,"的下一个生肖是"),"无相邻")
复制代码
长度199(包括等号)
  1. =CHOOSE((COUNT(FIND(MID(A2&B2&C2&A2&C2&B2&A2,ROW($1:$6),2),"鼠牛虎兔龙蛇马羊猴鸡狗猪鼠"))>0)+1,"无相邻",REPLACE(MID(A2&B2&C2&A2&C2&B2&A2,MATCH(,0/FIND(MID(A2&B2&C2&A2&C2&B2&A2,ROW($1:$6),2),"鼠牛虎兔龙蛇马羊猴鸡狗猪鼠")),2),2,,"的下一个生肖是"))
复制代码
不用IF与乘号包括等号长度209

[ 本帖最后由 Zaezhong 于 2011-3-3 13:11 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-3-29 07:50 , Processed in 0.052008 second(s), 22 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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