avatar
y*7
1
如果要看病,是找医生DISCOUNT还是有那种简单的保险可以买?谢谢!
avatar
w*w
2
问题如下:
我是公民,我妈是B2,入美国海关可以一起走吗?还是要分开走。我走公民窗口,我妈
走外国人入境窗口?我其实想陪妈妈一起出关,她英文可能有问题啊。
想请有这样经历的朋友给个建议。谢谢!
avatar
m*r
3
刚才查了下,
如果按married filing jointly的话,EIC要求两个都要有SSN,所以不行;
如果按 Head of household,最后又会因为老婆算non-resident alien,所以还是拿不
到。
那是不是明年两人都是resident alien时,就可以按 head of household一个人报,则
可以拿到
EIC了?
avatar
v*s
4
周末趁机我休了两天跟以前大学的几个朋友聚聚。
废话少说,见了朋友,大学时代我们好的穿一条裤子,睡一个被窝,如今人家都有男人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6个月,还是暧昧黏糊的时候,木有什么长远打算。
这个男人呢,越南籍美国人,正在医学院做住院医生,可谓精英的头脑和教育,本来我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,就开始批判了。
首先,因为有两个婚礼筹备ing的女人,我们稍微讨论了下婚礼的规模。另一个婚礼女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在北京,连5桌都办不下来。
结果医生男说了:靠,居然还有人花2万刀,办婚礼,有木有!太TMD的不像话,太TMD铺张浪费了,谁有那么多可以乱用的钱啊!劳资听都没听说过,匪夷所思!有木有!
注:为了保持原文语气,博主特地用了咆哮体。
我啥也没说,毕竟天天面对PMS的客户,这点涵养博主还是可以装出来的。
结果装出内伤了。
婚礼女因为比较八婆,又在读生物博,就说起来Wholefoods的老板不支持全民健康保险,导致很多癌症患者晚期了才就医,造成额外的复杂,浪费,后期治疗花费和幻灭的生存希望,说得我凄然泪下,快哭了,谴责万恶的医疗系统。(顺便说说:因为wholefoods在纽约算便宜又新鲜的,所以我也一直在那里买点水果鸡蛋啥的。)
结果医生男极品又开口了,激动得说:劳资从来不去Wholefoods买东西,那个地方真贵,真坑人,而且organic和非有机有神马区别,去wholefoods的人都又虚伪又自私,浪费钱还不如捐给慈善。有木有阿!!!!!!
我吐血了。果然话不投机半句多。你这块当医生的人了,还整天把自己挂的高高的批判别人。等你以后工作了开诊所了有收入了,准变成民主党比某C换香品还快!!!
内伤了。。。要不是看他是我朋友的未来老公,我早就给丫一巴掌的,让他得瑟。
avatar
e*s
5
为什么要找男朋友?是嫌香蕉不够大,还是黄瓜涨价了?
私以为,真正的两性平等应该就是——当一个女人真正开始像男人一样,毫无顾忌地表
达性与欲望时,就会发现,拥有一件能让自己快乐的情趣用品有多重要,这与是否有爱
人无关。
01
女人使用情趣用品,是为了取悦自己。
浜野佐知作为一名女性情色片导演,在日本曾被视作异类,因为她向庞大的AV文化产业
提出质疑。
“这些片子,一切以男性的欲望为主,电影镜头只聚焦女人的下半身。女人的人格被剥
夺,身体被物化,成为男性观赏把玩的对象。女人面部扭曲会让男人感到征服的快乐,
可这样不仅会让男人对女人的性需求产生误解,更会让女人对自身的性和高潮产生误解
。”
“我必须要告诉女人们:那些片子里的女性,压根没有一个是快乐的,享受的,收获高
潮的。”
浜野佐知是这么说也是这么做的,她在日本的电影行业内被“边缘化”30年,期间拍了
300部情色电影。
她的第一部粉红映画,描写的便是一个17岁的女孩子自己选择男人、选择性行为方式,
并且在这个过程中自立、长大成人的故事。
▲左:浜野佐知最富盛名的剧情片《百合祭》,描写老年女性的欲望/右:浜野佐知第
一部粉红映画《乱》
浜野佐知告诉我们,当女人开始真正尊重自己,正视自己的欲望后,便会发现:你的高
潮,是一种从未在男性电影中出现过的,非常奇妙的感受。
有科学佐证——美国用磁核共振查看男女高潮的大脑活动,男人的高潮一闪而灭 ,女
人是整个脑袋放烟火。
就好像这张对比图:
女人的高潮深不可测,如此隐秘而神奇,单单靠拼一名势单力薄的男人,可能真的不行
。这,就是我们需要情趣用品的原因。
曾经采访过一款当下非常受欢迎的女性情趣用品“小怪兽”的研发人员,他们的大数据
还有一项更有趣的统计。
那就是——女人的高潮,原来也是可以被分享的?
据统计,有位来自广州的92年姑娘,创造了最受欢迎的波形,此波形被使用8948次,为
5026名女性带来高潮。
瞧!女人果然还是最了解女人的生物。
所以,你还会问出:“明明家里有男人,女人为什么还要用情趣用品?”这个略显幼稚
的问题么?
02
其实呢,适当地使用情趣用品,不仅仅是为了自己,也是为了所爱之人。
《工作女郎》是一部非常有趣又寓意深刻的韩国情爱电影。
故事的女主人公宝姬是一名在职场上叱咤风云的新时代独立女性,但是因为与丈夫长时
间缺乏沟通和多年的无性婚姻,这个看似和谐平静的家庭,其实早就名存实亡了。
丈夫的出轨、职场的挫败,事业与爱情相继而来的巨大打击,让宝姬不得不开始正视自
己生活中早就存在的种种问题。
再然后,她与好友兰熙相识并入股了兰熙所开设的成人用品商店,一瞬间她从白领女精
英变身成为成人用品店老板,生活也因此开始改写。
从来没有接触过情趣用品的宝姬,对各种器物大开眼界,她想着把公司经营好,那前提
就是自己亲身试用,清晰了解。
再然后,她才发现之前与丈夫长年的无性婚姻,并非始于“你不想给,我也懒得要”的
意兴阑珊,而是她并不相信丈夫能带给她高潮,而丈夫也感受到这些,因此深受打击,
暗自出轨。
“如果早点发现,这些可以给夫妻共用的情趣玩物,该多好啊。”她感叹。
好在人生如戏,只要用心坚持,总会有所转机。
她开始反思自己过往几年面对无性婚姻的“鸵鸟”状态,女人坚强独立自然是好的,可
有时候想维持住一个家的美满,当然也需要适当的温柔和学会为夫妻生活增添新鲜感。
与老公复合后,她不仅在房事中逐渐主动,夫妻渐渐更加亲密,还非常搞笑地和老公在
性生活中进行各种体位的尝试,开展近乎性学学术方面的交流,且记录在案,更会用来
指导成人店的新产品开发……
婚姻绝不是一场一锤子买卖,请随时保持住撩汉的活力。
就好像有人说:结婚不意味着关闭释放魅力的开关,收起自己的小雷达,逐步散发母性
光辉,缺少了少女魅力。良家妇女们倡导自尊自爱,但是自尊自爱绝对不等同于自我形
象的放弃,自我事业追求的放弃,退缩于家庭中依赖,依附,这哪里是自尊自爱?这叫
自暴自弃啊。
像宝姬这样,直面问题,学会合理地使用情趣用品,又何尝不是一种婚内自我增值的资
本呢?
03
说到底,高质量的性,不仅仅是我们与丈夫取得和谐情感的必经之路,更是一条通往自
我探寻的道路。
在两性学中有这么一种有趣的说法——中年危机在性方面,“高潮”的这部分有可能是
这样的:有一次邂逅,或是一次经验,如果有过一次C的感觉,那么C的味道就留在女性
的大脑里。
假如丈夫不是能够让她达到C的,即便达到AB,她这一辈子都会追求C,这也是中年危机
很重要的原因,当然换做男性亦是。
▲《当莎莉遇见哈利》一片中,莎莉曾在餐厅现场为对面的哈利演绎:每个女人都会装
高潮
性生活为什么偏偏到了中年才显得特别重要呢?
除了生了孩子、完成了自己的社会地位以外,中年是一个探索自信的过程:我是谁?如
何成为真正的我?我想要什么?
所以C对很多人来说,就变成了终极目标。
经典的文学作品《安娜·卡列琳娜》曾深刻地反映出这一点。
一位贵族夫人,有地位有长相有钱,在她中年的时候一定要逃出去,跟一个看上去很不
靠谱的男人跑了。这位上流社会的中年女性,为什么这么执着地追求另外一种可能不属
于她的生活?
褪去过度包装的华丽外衣,不那么完美,也许才是最真实的她。
要我说,真正幸福的生活,就得既能么么哒,也要啪啪啪!
avatar
w*w
6
跟儿子一起学Python,发现它表达力很强,很适合算24点这样的程序。网上搜了一下,
没发现一个像样的逻辑清晰,简洁,充分利用Python语言特点的24点程序。我习惯了过
程式,想学点函数式编程的实际运用,希望这里碰到高手。
要求:
写一个函数solve(lst,target,all)
lst是自然数列表,可以超过4。
target是24,也可以是其他数。
运算是加减乘除,如能加指数对数等则更好。
如果all是True,打出所有解答,否则打一个就够了。
程序行数最好不要超过50行,不然直接从C#/java翻过来没意思。
测试:
solve([2,3,4,5],24,True)
solve([2,5,7,11,13],19,True)
solve([1,2,3,4,5,6,7,8,9,10,11,12],37,False)
avatar
a*0
7
年底就毕业了,要找工作了才发现不知道怎么定位。
太entry level的不想去做,其他的好像都要求工作经验呀。。
我本人硕士accounting,CPA和CIA都正在考,都还没考完,有绿卡,完全没有工作经验
,英文还行吧。
像我这种情况申请什么样的工作比较合适呢?什么样的title?大家有经验的话第一份工
作做什么的比较多呢?
avatar
y*7
8
re

【在 y*****7 的大作中提到】
: 如果要看病,是找医生DISCOUNT还是有那种简单的保险可以买?谢谢!
avatar
b*1
9
Have to separate, but most entries have someone that know Chinese to help.
You also can ask Chinese students to help your mom. Good luck!
avatar
N*E
10
有一个是resident就可以file jointly。一定要SSN么?税号不行么?
avatar
A*s
11
I like the wording: 结果装出内伤了......我吐血了。
No wonder why you are the queen of Drama, lol.
住院医生has not money. They have loans to pay back. This resident actually
is a great guy who understands the expense of wedding and implies that he
doesn't care about the wedding but your girlfriend. You know in the U.S,
who pays for wedding, don't you?
Still I admire your generosity. Should I be invited? lol.
avatar
l*G
12
expression = list[1] op[1] list[2] .....list[i] op[i] list[i+1] ...list[n-
1]op[n-1] list[n]
where list[1] ... list[n] are any permutation of list
op[1] ... op[n-1] are any of + - * /
evaluate all possibilities of expression by putting expression in a string
and return
(eval(expression_string)==24)
e.g. expression_string='2*4*3*1'
eval(expression_string)==24
avatar
a*a
13
完全没工作经验
不做entry level难道从senior开始做?
avatar
f*x
14
你的快, 结束了在出口地方等她.
avatar
m*r
15
我是resident的F1,但老婆还算 nonresident的F2,没有SSN也没有税号。
查了下,好像我这种情况不能用married filing jointly。1040A的intructions p18
写道
“ Generally,a husband and wife cannot file a joint return if either spouse
is a nonresident alien at any time during the year. ” 但没把后面那个However看
懂。
但是主要在申请Earned income credit时,page 42中 Step1中的 2,3,4 三个问题,限
定了不
论是married filing jointly还是作为head of household,都不能拿到EIC。

【在 N**E 的大作中提到】
: 有一个是resident就可以file jointly。一定要SSN么?税号不行么?
avatar
s*0
16
跳?还是不跳?

人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几
个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6
个月,还是暧昧黏糊的时候,木有什么长远打算。
我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,
就开始批判了。
女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就
稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在
北京,连5桌都办不下来。
TMD铺张浪费了,谁有那么多可以乱用的钱啊!劳资听都没听说过,匪夷所思!有木有!
险,导致很多癌症患者晚期了才就医,造成额外的复杂,浪费,后期治疗花费和幻灭的
生存希望,说得我凄然泪下,快哭了,谴责万恶的医疗系统。(顺便说说:因为
wholefoods在纽约算便宜又新鲜的,所以我也一直在那里买点水果鸡蛋啥的。)
贵,真坑人,而且organic和非有机有神马区别,去wholefoods的人都又虚伪又自私,
浪费钱还不如捐给慈善。有木有阿!!!!!!

【在 v******s 的大作中提到】
: 周末趁机我休了两天跟以前大学的几个朋友聚聚。
: 废话少说,见了朋友,大学时代我们好的穿一条裤子,睡一个被窝,如今人家都有男人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6个月,还是暧昧黏糊的时候,木有什么长远打算。
: 这个男人呢,越南籍美国人,正在医学院做住院医生,可谓精英的头脑和教育,本来我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,就开始批判了。
: 首先,因为有两个婚礼筹备ing的女人,我们稍微讨论了下婚礼的规模。另一个婚礼女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在北京,连5桌都办不下来。
: 结果医生男说了:靠,居然还有人花2万刀,办婚礼,有木有!太TMD的不像话,太TMD铺张浪费了,谁有那么多可以乱用的钱啊!劳资听都没听说过,匪夷所思!有木有!
: 注:为了保持原文语气,博主特地用了咆哮体。
: 我啥也没说,毕竟天天面对PMS的客户,这点涵养博主还是可以装出来的。
: 结果装出内伤了。
: 婚礼女因为比较八婆,又在读生物博,就说起来Wholefoods的老板不支持全民健康保险,导致很多癌症患者晚期了才就医,造成额外的复杂,浪费,后期治疗花费和幻灭的生存希望,说得我凄然泪下,快哭了,谴责万恶的医疗系统。(顺便说说:因为wholefoods在纽约算便宜又新鲜的,所以我也一直在那里买点水果鸡蛋啥的。)
: 结果医生男极品又开口了,激动得说:劳资从来不去Wholefoods买东西,那个地方真贵,真坑人,而且organic和非有机有神马区别,去wholefoods的人都又虚伪又自私,浪费钱还不如捐给慈善。有木有阿!!!!!!

avatar
l*G
17
#!/usr/bin/python
def permu(xs):
if xs:
r , h = [],[]
for x in xs:
if x not in h:
ts = xs[:]; ts.remove(x)
for p in permu(ts):
r.append([x]+p)
h.append(x)
return r
else:
return [[]]
def product(*args, **kwds):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
def solve(mylist,target,all):
#Howto : solve([1,2,3,4],24,True)
listlength=len(mylist);
ops=product('+-*/',repeat=listlength-1);
m=map(str,ops);
listpermu=permu(mylist);
lengthpermu=len(listpermu);
for j in range(0,lengthpermu):
for i in range(0,len(m)):
op1d=m[i][2::5];
nop=len(op1d);
expr="";
for k in range(0,nop):
expr=expr+(str(listpermu[j][k]))+'.';
expr=expr+(op1d[k]);
expr=expr+str(listpermu[j][listlength-1])+'.';
good=(eval(expr)+0.0==target);
if all:
if good:
print expr;
else :
if good:
print expr;
return
#test 1
#solve([1,2,3,4],24,True);
#test 2
solve([1,2,3,4],24,False);
#test 3
solve([2,4,6,8],24,False);
avatar
t*g
18
cpa firm staff accountant
avatar
l*3
19
已经在里面,还问。。。
哈哈哈。。。
非猫写的很有意思。。。

6
有!

【在 s******0 的大作中提到】
: 跳?还是不跳?
:
: 人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几
: 个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6
: 个月,还是暧昧黏糊的时候,木有什么长远打算。
: 我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,
: 就开始批判了。
: 女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就
: 稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在
: 北京,连5桌都办不下来。

avatar
w*w
20
这里有没有投票功能?
下面这几个方面1-5分:
1。正确性
2。可读性
3。易维护,debug
4。可扩充性 (加算子**,log ...)
5。运行效率(时间/空间)
如认为哪里可以改进,欢迎改进版。
avatar
a*0
21

Senior肯定不会qualify,只是觉得去做book keeping,coding,billing 什么的话拿CPA
没什么意义吧。。。第一份工作要慎重吧,如果入错行,以后要受影响的。如果去做
entry level accountant with $10/h,就算是有3年的工作经验,别人也不会给$25/h
的吧。$25/h,年薪才$54k..
我不想有了CPA,GC,degree,赚得还没在中国餐馆送外卖多。。。所以明知道自己会做
entry level,但是title和工资绝对也得match..

【在 a***a 的大作中提到】
: 完全没工作经验
: 不做entry level难道从senior开始做?

avatar
A*s
22
Just jump in........for fun.
I have to say this one was written very well. Worthy for 10 wb.

哈哈哈。。。
非猫写的很有意思。。。

【在 l********3 的大作中提到】
: 已经在里面,还问。。。
: 哈哈哈。。。
: 非猫写的很有意思。。。
:
: 6
: 有!

avatar
w*w
23
这里用python的不多?
avatar
m*y
24
entry level 也分很多种,AR/AP这种accounting clerk是,CPA firm和很多industry
最初级的Staff也是,你可以不做前一种,但也要做第二种……现在很多有经验的人都
在做entry level,你没有经验也还没有CPA不做entry level做什么?
avatar
E*n
25
但是婚礼对于女孩来说是从小的梦想
你不给女孩把这个梦圆了,伤不起啊有木有!!

actually

【在 A*******s 的大作中提到】
: I like the wording: 结果装出内伤了......我吐血了。
: No wonder why you are the queen of Drama, lol.
: 住院医生has not money. They have loans to pay back. This resident actually
: is a great guy who understands the expense of wedding and implies that he
: doesn't care about the wedding but your girlfriend. You know in the U.S,
: who pays for wedding, don't you?
: Still I admire your generosity. Should I be invited? lol.

avatar
h*s
26
学函数编程,干嘛不用haskell,纯函数式编程语言,比这种multi-paradigm表达强的
多。
其实像lisp这种的,也不纯。但我个人喜欢lisp的地方,是很强的一般化和抽象化的能
力,就是函数式编程的核心。所以换到haskell了。。。

【在 w****w 的大作中提到】
: 这里用python的不多?
avatar
a*d
27
the issue is not how you should 定位, the issue is what kind of offer you
can get. if you can only get a $10/hr job, what can you do? wait for another
year? you need to polish your resume, practice your interview skill, get a
good internship and try your best to get what you want. Passing cpa+gc+
degree=/ decent job.
avatar
v*s
28
21世纪以来,美国婚礼费用大多数是男女方一起承担的。
为啥很多成年了的人才来美国的国人觉得自己对美国文化特别了解呢?

actually
he
U.S,

【在 A*******s 的大作中提到】
: I like the wording: 结果装出内伤了......我吐血了。
: No wonder why you are the queen of Drama, lol.
: 住院医生has not money. They have loans to pay back. This resident actually
: is a great guy who understands the expense of wedding and implies that he
: doesn't care about the wedding but your girlfriend. You know in the U.S,
: who pays for wedding, don't you?
: Still I admire your generosity. Should I be invited? lol.

avatar
a*x
29
最近在学haskell,这个monad transformer真是brain torting啊

【在 h***s 的大作中提到】
: 学函数编程,干嘛不用haskell,纯函数式编程语言,比这种multi-paradigm表达强的
: 多。
: 其实像lisp这种的,也不纯。但我个人喜欢lisp的地方,是很强的一般化和抽象化的能
: 力,就是函数式编程的核心。所以换到haskell了。。。

avatar
T*e
30
staff 的那种主要是做一些什么? 很多staff还是需要2-3y experience.

industry

【在 m********y 的大作中提到】
: entry level 也分很多种,AR/AP这种accounting clerk是,CPA firm和很多industry
: 最初级的Staff也是,你可以不做前一种,但也要做第二种……现在很多有经验的人都
: 在做entry level,你没有经验也还没有CPA不做entry level做什么?

avatar
v*s
31
我给你垫点棉花?

6
有!

【在 s******0 的大作中提到】
: 跳?还是不跳?
:
: 人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几
: 个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6
: 个月,还是暧昧黏糊的时候,木有什么长远打算。
: 我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,
: 就开始批判了。
: 女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就
: 稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在
: 北京,连5桌都办不下来。

avatar
h*s
32
呵呵,Monad就是折磨脑子的,原因就是把数学里抽象的那一面给整进来了。我的经验
是,先别去化时间钻抽象的那一面,把monad当作定义好了interface的container看待
,map/filter的应用和其他container“一样”看待。

【在 a********x 的大作中提到】
: 最近在学haskell,这个monad transformer真是brain torting啊
avatar
m*1
33
三年前我本科毕业的时候,没身份没工作经验。我当时什么都没想,只要有公司要就去
,管它给多少钱。面试了六次才拿到一个offer.第一份工作只干了四个月,有两个半月
在公司上网,一个半月出去做audit.我想那个公司招太多人了,所以就辞职走人了,找
了另外一家小local cpa firm。也没有期望会拿多少钱,只是很卖力的为老板干活。一
年之后老板给涨了25%。去年老板又给长了7%,今年经济太差只有张5%。我个人觉得不
要太早定位,第一份工作是很重要,最重要得是要抓住每一次机会。你肯定能行的。
avatar
A*s
34
You forgot your name:来GIRL版BTX?
Congratulations, you have been TXed. LOL.

【在 E*****n 的大作中提到】
: 但是婚礼对于女孩来说是从小的梦想
: 你不给女孩把这个梦圆了,伤不起啊有木有!!
:
: actually

avatar
w*w
35
搞了两个礼拜,对python有点感觉了。
import math
_expr=lambda x,y,z:"(%s%s%s)"%(x,y,z)
_plus=lambda x,y: (x[0]+y[0],_expr(x[1],"+",y[1]))
_minus=lambda x,y: (x[0]-y[0],_expr(x[1],"-",y[1]))
_rminus=lambda x,y: _minus(y,x)
_mul=lambda x,y: (x[0]*y[0],_expr(x[1],"*",y[1]))
_div=lambda x,y: (y[0]==0 and (0,"err")) or (x[0]/y[0],_expr(x[1],"/",y[1]))
_rdiv=lambda x,y: _div(y,x)
_mod=lambda x,y: (y[0]==0 and (0,"err")) or (x[0]%y[0],"mod(%s,%s)"%(x[1],y[
1]))
_rmod=lambda x,y: _mod(y,x)
def _power(x,y):
try: return (x[0]**y[0],_expr(x[1],"**",y[1]))
except: return (0,"err")

_pow=lambda x,y: _power(x,y)
_rpow=lambda x,y: _power(y,x)
def _logarithm(x,y):
try: return (math.log(x[0],y[0]),"log(%s,%s)"%(x[1],y[1]))
except: return (0,"err")

_log=lambda x,y: _logarithm(x,y)
_rlog=lambda x,y: _logarithm(y,x)
def _pick2combination(base,num):
if num<2:return
for x in _pick2combination(base+1,num-1): yield x
for x in range(1,num): yield (base,base+x)

class Math24(object):

def __init__(self,level=1):
self.ops=[_plus,_minus,_rminus,_mul,_div,_rdiv]
if level>=2: self.ops+=[_log,_rlog]
if level>=3: self.ops+=[_pow,_rpow]
if level>=4: self.ops+=[_mod,_rmod]

def _eval(self,lst):
if len(lst)==1: yield lst[0]
for idx in _pick2combination(0,len(lst)):
nl=lst[:]
u,v=nl.pop(idx[1]),nl.pop(idx[0])
for op in self.ops:
nv=op(u,v)
if nv[1]!="err":
for x in self._eval(nl+[nv]): yield x

def solve(self,lst,target):
for y in self._eval([(float(x),str(x)) for x in lst]):
if abs(y[0]-target)<1.0e-9: yield y[1]

if __name__ == '__main__':
for x in Math24(2).solve([2,3,27,10],24): print x
avatar
b*k
36
先找着再说吧。
avatar
v*s
37
难道我被反TX了?
55555555

【在 A*******s 的大作中提到】
: You forgot your name:来GIRL版BTX?
: Congratulations, you have been TXed. LOL.

avatar
w*w
38
haskell太不同了,找个人来没法train。

【在 h***s 的大作中提到】
: 学函数编程,干嘛不用haskell,纯函数式编程语言,比这种multi-paradigm表达强的
: 多。
: 其实像lisp这种的,也不纯。但我个人喜欢lisp的地方,是很强的一般化和抽象化的能
: 力,就是函数式编程的核心。所以换到haskell了。。。

avatar
E*n
39
你碰见了天蝎座医生,虐你虐你

【在 v******s 的大作中提到】
: 难道我被反TX了?
: 55555555

avatar
A*n
40
赞,最近在学haskell,来学习下

【在 h***s 的大作中提到】
: 呵呵,Monad就是折磨脑子的,原因就是把数学里抽象的那一面给整进来了。我的经验
: 是,先别去化时间钻抽象的那一面,把monad当作定义好了interface的container看待
: ,map/filter的应用和其他container“一样”看待。

avatar
A*s
41
很多成年了的国人(Men) come to U.S because they can not afford a wedding in
China, LOL.

【在 v******s 的大作中提到】
: 21世纪以来,美国婚礼费用大多数是男女方一起承担的。
: 为啥很多成年了的人才来美国的国人觉得自己对美国文化特别了解呢?
:
: actually
: he
: U.S,

avatar
h*s
42
下面是haskell的写法 - 我只想了个简单的算法,作了简单的过滤,还可能有很多重
复的答案表达,这个可以在算法上进一步优化细调,就没搞了。简单的测试可了。如果
用GHC编译运行如下:
> ghc -O3 solve.hs
....
> solve
-------------------------
import Data.List
import System.IO
opBoxes = [((+), "+"), ((-), "-"), ((*), "*"), ((divi), "/")]
divi x y = round $ toRational(x) / toRational(y)
divisible x y = case y of 0 -> False
y -> mod (abs x) (abs y) == 0
runOp opBox ((x1,s1):(x2,s2):xs) = ((fst opBox x1 x2), ss):xs
where ss = showSolution (snd opBox) s1 s2
showSolution opStr s1 s2
| opStr=="+" || opStr=="*" = showWrapUp opStr (min s1 s2) (max s1 s2)
| otherwise = showWrapUp opStr s1 s2
showWrapUp opStr sx sy = "(" ++ sx ++ opStr ++ sy ++ ")"
initializeProblem [] = []
initializeProblem (x:xs) = (x, show x):initializeProblem xs
unDuplicatedPerm :: Eq a => [a] -> [[a]]
unDuplicatedPerm = Data.List.nub . Data.List.permutations
oneStepMap [email protected]((x1,s1):(x2,s2):ys)
= map (\x -> runOp x xs) $ oneStepOps x1 x2
oneStepOps x1 x2 = if (divisible x1 x2) then opBoxes
else
(init opBoxes)
completeMap [email protected](x:ys)
| length x == 1 = xs
| otherwise = completeMap (xs >>= unDuplicatedPerm >>= oneStepMap)
solve xs target all =
if (null zs) then print " No Solution Found!"
else if all then mapM_ print zs
else mapM_ print $ head zs
where ys = [initializeProblem xs]
zs = showResult $ nub $
filter (\y -> fst (head y) == target) (completeMap ys)
showResult xs
= map (\x -> let s=(head x) in snd s ++ "=" ++ show (fst s)) xs
main = do
solve [2,3,27,10] 24 True
-- solve [1,2,7,13] 24 True

【在 w****w 的大作中提到】
: haskell太不同了,找个人来没法train。
avatar
A*s
43
I did not say that, lol!

【在 v******s 的大作中提到】
: 难道我被反TX了?
: 55555555

avatar
h*s
44
这个HTML对齐代码太费劲了,删两遍都还是对不好,算了,你们自己想象着怎么对齐好
了,我不费劲了。

【在 A*********n 的大作中提到】
: 赞,最近在学haskell,来学习下
avatar
A*s
45
I can not stop laughing. Eberron, I am drinking, you need pay for my
keyboard!

【在 E*****n 的大作中提到】
: 你碰见了天蝎座医生,虐你虐你
avatar
A*n
46
ghc 还是认出来了

【在 h***s 的大作中提到】
: 这个HTML对齐代码太费劲了,删两遍都还是对不好,算了,你们自己想象着怎么对齐好
: 了,我不费劲了。

avatar
E*n
47
叔叔,看笑话的时候不可以喝水哟!

【在 A*******s 的大作中提到】
: I can not stop laughing. Eberron, I am drinking, you need pay for my
: keyboard!

avatar
j*a
48
可以贴pastebin去

【在 h***s 的大作中提到】
: 这个HTML对齐代码太费劲了,删两遍都还是对不好,算了,你们自己想象着怎么对齐好
: 了,我不费劲了。

avatar
d*z
49
cmft非猫,话不投机半句多啊~~~

人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几
个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6
个月,还是暧昧黏糊的时候,木有什么长远打算。
我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,
就开始批判了。
女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就
稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在
北京,连5桌都办不下来。
TMD铺张浪费了,谁有那么多可以乱用的钱啊!劳资听都没听说过,匪夷所思!有木有!
险,导致很多癌症患者晚期了才就医,造成额外的复杂,浪费,后期治疗花费和幻灭的
生存希望,说得我凄然泪下,快哭了,谴责万恶的医疗系统。(顺便说说:因为
wholefoods在纽约算便宜又新鲜的,所以我也一直在那里买点水果鸡蛋啥的。)
贵,真坑人,而且organic和非有机有神马区别,去wholefoods的人都又虚伪又自私,
浪费钱还不如捐给慈善。有木有阿!!!!!!

【在 v******s 的大作中提到】
: 周末趁机我休了两天跟以前大学的几个朋友聚聚。
: 废话少说,见了朋友,大学时代我们好的穿一条裤子,睡一个被窝,如今人家都有男人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6个月,还是暧昧黏糊的时候,木有什么长远打算。
: 这个男人呢,越南籍美国人,正在医学院做住院医生,可谓精英的头脑和教育,本来我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,就开始批判了。
: 首先,因为有两个婚礼筹备ing的女人,我们稍微讨论了下婚礼的规模。另一个婚礼女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在北京,连5桌都办不下来。
: 结果医生男说了:靠,居然还有人花2万刀,办婚礼,有木有!太TMD的不像话,太TMD铺张浪费了,谁有那么多可以乱用的钱啊!劳资听都没听说过,匪夷所思!有木有!
: 注:为了保持原文语气,博主特地用了咆哮体。
: 我啥也没说,毕竟天天面对PMS的客户,这点涵养博主还是可以装出来的。
: 结果装出内伤了。
: 婚礼女因为比较八婆,又在读生物博,就说起来Wholefoods的老板不支持全民健康保险,导致很多癌症患者晚期了才就医,造成额外的复杂,浪费,后期治疗花费和幻灭的生存希望,说得我凄然泪下,快哭了,谴责万恶的医疗系统。(顺便说说:因为wholefoods在纽约算便宜又新鲜的,所以我也一直在那里买点水果鸡蛋啥的。)
: 结果医生男极品又开口了,激动得说:劳资从来不去Wholefoods买东西,那个地方真贵,真坑人,而且organic和非有机有神马区别,去wholefoods的人都又虚伪又自私,浪费钱还不如捐给慈善。有木有阿!!!!!!

avatar
h*s
50
haskell spec只要求你合理的空格就行了,而求haskell的函数特点是短而一般化,不
需要太多行,所以一般小的对不齐不会影响代码的正确性。

【在 A*********n 的大作中提到】
: ghc 还是认出来了
avatar
d*z
51
版主不跳谁跳?

6
有!

【在 s******0 的大作中提到】
: 跳?还是不跳?
:
: 人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几
: 个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6
: 个月,还是暧昧黏糊的时候,木有什么长远打算。
: 我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,
: 就开始批判了。
: 女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就
: 稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在
: 北京,连5桌都办不下来。

avatar
w*w
52
haskell里list的evaluation都是lazy的吗?
avatar
d*z
53
nod,所以她想从简就从简,想花钱就花钱,这才够man~

【在 E*****n 的大作中提到】
: 但是婚礼对于女孩来说是从小的梦想
: 你不给女孩把这个梦圆了,伤不起啊有木有!!
:
: actually

avatar
h*s
54
忘了说了,这段代码可以解任意个整数的情况,比如:[1,2,3,4,5,6,7 。。]
,不限于24点,就是LZ的原始问题。当然这只是逻辑算法和原理上来说,至于bug,就
不负责了。。哈!只要算法允许,haskell表达总是可以做到更简洁,这个负责是没问
题的。
当然我喜欢haskell,只是个人观点而已。。

【在 h***s 的大作中提到】
: 下面是haskell的写法 - 我只想了个简单的算法,作了简单的过滤,还可能有很多重
: 复的答案表达,这个可以在算法上进一步优化细调,就没搞了。简单的测试可了。如果
: 用GHC编译运行如下:
: > ghc -O3 solve.hs
: ....
: > solve
: -------------------------
: import Data.List
: import System.IO
: opBoxes = [((+), "+"), ((-), "-"), ((*), "*"), ((divi), "/")]

avatar
i*a
55
这情商...
真不把你当外人...

人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几
个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6
个月,还是暧昧黏糊的时候,木有什么长远打算。
我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,
就开始批判了。
女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就
稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在
北京,连5桌都办不下来。
TMD铺张浪费了,谁有那么多可以乱用的钱啊!劳资听都没听说过,匪夷所思!有木有!
险,导致很多癌症患者晚期了才就医,造成额外的复杂,浪费,后期治疗花费和幻灭的
生存希望,说得我凄然泪下,快哭了,谴责万恶的医疗系统。(顺便说说:因为
wholefoods在纽约算便宜又新鲜的,所以我也一直在那里买点水果鸡蛋啥的。)
贵,真坑人,而且organic和非有机有神马区别,去wholefoods的人都又虚伪又自私,
浪费钱还不如捐给慈善。有木有阿!!!!!!

【在 v******s 的大作中提到】
: 周末趁机我休了两天跟以前大学的几个朋友聚聚。
: 废话少说,见了朋友,大学时代我们好的穿一条裤子,睡一个被窝,如今人家都有男人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6个月,还是暧昧黏糊的时候,木有什么长远打算。
: 这个男人呢,越南籍美国人,正在医学院做住院医生,可谓精英的头脑和教育,本来我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,就开始批判了。
: 首先,因为有两个婚礼筹备ing的女人,我们稍微讨论了下婚礼的规模。另一个婚礼女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在北京,连5桌都办不下来。
: 结果医生男说了:靠,居然还有人花2万刀,办婚礼,有木有!太TMD的不像话,太TMD铺张浪费了,谁有那么多可以乱用的钱啊!劳资听都没听说过,匪夷所思!有木有!
: 注:为了保持原文语气,博主特地用了咆哮体。
: 我啥也没说,毕竟天天面对PMS的客户,这点涵养博主还是可以装出来的。
: 结果装出内伤了。
: 婚礼女因为比较八婆,又在读生物博,就说起来Wholefoods的老板不支持全民健康保险,导致很多癌症患者晚期了才就医,造成额外的复杂,浪费,后期治疗花费和幻灭的生存希望,说得我凄然泪下,快哭了,谴责万恶的医疗系统。(顺便说说:因为wholefoods在纽约算便宜又新鲜的,所以我也一直在那里买点水果鸡蛋啥的。)
: 结果医生男极品又开口了,激动得说:劳资从来不去Wholefoods买东西,那个地方真贵,真坑人,而且organic和非有机有神马区别,去wholefoods的人都又虚伪又自私,浪费钱还不如捐给慈善。有木有阿!!!!!!

avatar
h*s
56
对,语言的纯函数性和这个有内在的关联。
比如,你给一个有很大解案空间的问题,你总是能在线地得到当前的答案子集,如果你
想刷新IO缓冲,就能“实时”看到最新结果。。。我唰唰!

【在 w****w 的大作中提到】
: haskell里list的evaluation都是lazy的吗?
avatar
w*l
57
LOL

6

【在 i*********a 的大作中提到】
: 这情商...
: 真不把你当外人...
:
: 人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几
: 个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6
: 个月,还是暧昧黏糊的时候,木有什么长远打算。
: 我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,
: 就开始批判了。
: 女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就
: 稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在

avatar
w*w
58
这个python不如,还得另写generator.

【在 h***s 的大作中提到】
: 对,语言的纯函数性和这个有内在的关联。
: 比如,你给一个有很大解案空间的问题,你总是能在线地得到当前的答案子集,如果你
: 想刷新IO缓冲,就能“实时”看到最新结果。。。我唰唰!

avatar
m*t
59
看到这个忽然想起来最近国内结婚人贴的照片好像很大一部份仪式都是汉式的。。。
avatar
a*e
60
写了个 Common Lisp 的解法,就十几行(Lisp 算子有联结到对应说明,很好理解):
http://paste.lisp.org/+2V0T
(defun twenty-four (numbers &optional (target 24) all)
"Show arithmetic expression(s), composed of the given NUMBERS and the
four basic arithmetic operators, that evaluates to the TARGET number."
(labels ((fa (x)
(if (cdr x)
(loop for (i . u) on x thereis (fb i u p) collect i into p)
(and (= target (caar x)) (print (cdar x)) (not all))))
(fb (i u p)
(loop for (j . v) on u thereis (fc i j (append v q p))
collect j into q))
(fc (i j x)
(or (and (/= 0 (car j)) (fd '/ i j x))
(and (/= 0 (car i)) (fd '/ j i x))
(fd '+ i j x) (fd '* i j x) (fd '- i j x) (fd '- j i x)))
(fd (o i j x)
(fa `((,(funcall o (car i) (car j)) ,o ,(cdr i) ,(cdr j)) ,@x))
))
(fa (map 'list (lambda (x) (cons x x)) numbers))))
;;; Examples:
;;
;; CL-USER> (twenty-four '(2 3 7 10))
;; (+ (- (* 2 10) 3) 7)
;; CL-USER> (twenty-four '(2 3 7 10) 24 'show-all-solutions)
;; (+ (- (* 2 10) 3) 7)
;; (- 7 (- 3 (* 2 10)))
;; (- (+ (* 2 10) 7) 3)
;; (- (* 2 10) (- 3 7))
;; (+ (- 7 3) (* 2 10))
;; (- (* 10 2) (- 3 7))
;; (+ (* 10 2) (- 7 3))
;; (/ (+ (* 7 10) 2) 3)
avatar
s*0
61
越来越忙了?

人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几
个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6
个月,还是暧昧黏糊的时候,木有什么长远打算。
我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,
就开始批判了。
女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就
稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在
北京,连5桌都办不下来。
TMD铺张浪费了,谁有那么多可以乱用的钱啊!劳资听都没听说过,匪夷所思!有木有!
险,导致很多癌症患者晚期了才就医,造成额外的复杂,浪费,后期治疗花费和幻灭的
生存希望,说得我凄然泪下,快哭了,谴责万恶的医疗系统。(顺便说说:因为
wholefoods在纽约算便宜又新鲜的,所以我也一直在那里买点水果鸡蛋啥的。)
贵,真坑人,而且organic和非有机有神马区别,去wholefoods的人都又虚伪又自私,
浪费钱还不如捐给慈善。有木有阿!!!!!!

【在 v******s 的大作中提到】
: 周末趁机我休了两天跟以前大学的几个朋友聚聚。
: 废话少说,见了朋友,大学时代我们好的穿一条裤子,睡一个被窝,如今人家都有男人了,我也就不好意思跟她睡了。再加上婚期将近,我们就去购物,顺便吃个饭,叫几个别的朋友。这时一个华丽丽的男人出场了,是我一个好友的男友,两个人约会不到6个月,还是暧昧黏糊的时候,木有什么长远打算。
: 这个男人呢,越南籍美国人,正在医学院做住院医生,可谓精英的头脑和教育,本来我以为,阿,你既然做这么高尚的职业,肯定是我等崇拜的对象。结果丫这一坐下来,就开始批判了。
: 首先,因为有两个婚礼筹备ing的女人,我们稍微讨论了下婚礼的规模。另一个婚礼女说她希望能够控制婚礼的预算在1万刀内。我因为工作了两年,加上劳工也工作,就稍微浪费点,预算了2万刀。你看我们多朴实,父母的钱都没要,这点钱换了人民币在北京,连5桌都办不下来。
: 结果医生男说了:靠,居然还有人花2万刀,办婚礼,有木有!太TMD的不像话,太TMD铺张浪费了,谁有那么多可以乱用的钱啊!劳资听都没听说过,匪夷所思!有木有!
: 注:为了保持原文语气,博主特地用了咆哮体。
: 我啥也没说,毕竟天天面对PMS的客户,这点涵养博主还是可以装出来的。
: 结果装出内伤了。
: 婚礼女因为比较八婆,又在读生物博,就说起来Wholefoods的老板不支持全民健康保险,导致很多癌症患者晚期了才就医,造成额外的复杂,浪费,后期治疗花费和幻灭的生存希望,说得我凄然泪下,快哭了,谴责万恶的医疗系统。(顺便说说:因为wholefoods在纽约算便宜又新鲜的,所以我也一直在那里买点水果鸡蛋啥的。)
: 结果医生男极品又开口了,激动得说:劳资从来不去Wholefoods买东西,那个地方真贵,真坑人,而且organic和非有机有神马区别,去wholefoods的人都又虚伪又自私,浪费钱还不如捐给慈善。有木有阿!!!!!!

avatar
h*s
62
有意思.
看有没有C/C++, Java, Perl的版本能写成十几行的... 哦, 对了, 还有javascript,
visual basic, C#/F#的干活, 哈!

p)

【在 a*******e 的大作中提到】
: 写了个 Common Lisp 的解法,就十几行(Lisp 算子有联结到对应说明,很好理解):
: http://paste.lisp.org/+2V0T
: (defun twenty-four (numbers &optional (target 24) all)
: "Show arithmetic expression(s), composed of the given NUMBERS and the
: four basic arithmetic operators, that evaluates to the TARGET number."
: (labels ((fa (x)
: (if (cdr x)
: (loop for (i . u) on x thereis (fb i u p) collect i into p)
: (and (= target (caar x)) (print (cdar x)) (not all))))
: (fb (i u p)

avatar
b*s
63
c++更快,先枚举所有组合,然后建立hash table,以后只要你一输入,我就查表

【在 w****w 的大作中提到】
: 跟儿子一起学Python,发现它表达力很强,很适合算24点这样的程序。网上搜了一下,
: 没发现一个像样的逻辑清晰,简洁,充分利用Python语言特点的24点程序。我习惯了过
: 程式,想学点函数式编程的实际运用,希望这里碰到高手。
: 要求:
: 写一个函数solve(lst,target,all)
: lst是自然数列表,可以超过4。
: target是24,也可以是其他数。
: 运算是加减乘除,如能加指数对数等则更好。
: 如果all是True,打出所有解答,否则打一个就够了。
: 程序行数最好不要超过50行,不然直接从C#/java翻过来没意思。

avatar
w*w
64
跟儿子一起学Python,发现它表达力很强,很适合算24点这样的程序。网上搜了一下,
没发现一个像样的逻辑清晰,简洁,充分利用Python语言特点的24点程序。我习惯了过
程式,想学点函数式编程的实际运用,希望这里碰到高手。
要求:
写一个函数solve(lst,target,all)
lst是自然数列表,可以超过4。
target是24,也可以是其他数。
运算是加减乘除,如能加指数对数等则更好。
如果all是True,打出所有解答,否则打一个就够了。
程序行数最好不要超过50行,不然直接从C#/java翻过来没意思。
测试:
solve([2,3,4,5],24,True)
solve([2,5,7,11,13],19,True)
solve([1,2,3,4,5,6,7,8,9,10,11,12],37,False)
avatar
l*G
65
expression = list[1] op[1] list[2] .....list[i] op[i] list[i+1] ...list[n-
1]op[n-1] list[n]
where list[1] ... list[n] are any permutation of list
op[1] ... op[n-1] are any of + - * /
evaluate all possibilities of expression by putting expression in a string
and return
(eval(expression_string)==24)
e.g. expression_string='2*4*3*1'
eval(expression_string)==24
avatar
l*G
66
#!/usr/bin/python
def permu(xs):
if xs:
r , h = [],[]
for x in xs:
if x not in h:
ts = xs[:]; ts.remove(x)
for p in permu(ts):
r.append([x]+p)
h.append(x)
return r
else:
return [[]]
def product(*args, **kwds):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
def solve(mylist,target,all):
#Howto : solve([1,2,3,4],24,True)
listlength=len(mylist);
ops=product('+-*/',repeat=listlength-1);
m=map(str,ops);
listpermu=permu(mylist);
lengthpermu=len(listpermu);
for j in range(0,lengthpermu):
for i in range(0,len(m)):
op1d=m[i][2::5];
nop=len(op1d);
expr="";
for k in range(0,nop):
expr=expr+(str(listpermu[j][k]))+'.';
expr=expr+(op1d[k]);
expr=expr+str(listpermu[j][listlength-1])+'.';
good=(eval(expr)+0.0==target);
if all:
if good:
print expr;
else :
if good:
print expr;
return
#test 1
#solve([1,2,3,4],24,True);
#test 2
solve([1,2,3,4],24,False);
#test 3
solve([2,4,6,8],24,False);
avatar
w*w
67
这里有没有投票功能?
下面这几个方面1-5分:
1。正确性
2。可读性
3。易维护,debug
4。可扩充性 (加算子**,log ...)
5。运行效率(时间/空间)
如认为哪里可以改进,欢迎改进版。
avatar
w*w
68
这里用python的不多?
avatar
h*s
69
学函数编程,干嘛不用haskell,纯函数式编程语言,比这种multi-paradigm表达强的
多。
其实像lisp这种的,也不纯。但我个人喜欢lisp的地方,是很强的一般化和抽象化的能
力,就是函数式编程的核心。所以换到haskell了。。。

【在 w****w 的大作中提到】
: 这里用python的不多?
avatar
a*x
70
最近在学haskell,这个monad transformer真是brain torting啊

【在 h***s 的大作中提到】
: 学函数编程,干嘛不用haskell,纯函数式编程语言,比这种multi-paradigm表达强的
: 多。
: 其实像lisp这种的,也不纯。但我个人喜欢lisp的地方,是很强的一般化和抽象化的能
: 力,就是函数式编程的核心。所以换到haskell了。。。

avatar
h*s
71
呵呵,Monad就是折磨脑子的,原因就是把数学里抽象的那一面给整进来了。我的经验
是,先别去化时间钻抽象的那一面,把monad当作定义好了interface的container看待
,map/filter的应用和其他container“一样”看待。

【在 a********x 的大作中提到】
: 最近在学haskell,这个monad transformer真是brain torting啊
avatar
w*w
72
搞了两个礼拜,对python有点感觉了。
import math
_expr=lambda x,y,z:"(%s%s%s)"%(x,y,z)
_plus=lambda x,y: (x[0]+y[0],_expr(x[1],"+",y[1]))
_minus=lambda x,y: (x[0]-y[0],_expr(x[1],"-",y[1]))
_rminus=lambda x,y: _minus(y,x)
_mul=lambda x,y: (x[0]*y[0],_expr(x[1],"*",y[1]))
_div=lambda x,y: (y[0]==0 and (0,"err")) or (x[0]/y[0],_expr(x[1],"/",y[1]))
_rdiv=lambda x,y: _div(y,x)
_mod=lambda x,y: (y[0]==0 and (0,"err")) or (x[0]%y[0],"mod(%s,%s)"%(x[1],y[
1]))
_rmod=lambda x,y: _mod(y,x)
def _power(x,y):
try: return (x[0]**y[0],_expr(x[1],"**",y[1]))
except: return (0,"err")

_pow=lambda x,y: _power(x,y)
_rpow=lambda x,y: _power(y,x)
def _logarithm(x,y):
try: return (math.log(x[0],y[0]),"log(%s,%s)"%(x[1],y[1]))
except: return (0,"err")

_log=lambda x,y: _logarithm(x,y)
_rlog=lambda x,y: _logarithm(y,x)
def _pick2combination(base,num):
if num<2:return
for x in _pick2combination(base+1,num-1): yield x
for x in range(1,num): yield (base,base+x)

class Math24(object):

def __init__(self,level=1):
self.ops=[_plus,_minus,_rminus,_mul,_div,_rdiv]
if level>=2: self.ops+=[_log,_rlog]
if level>=3: self.ops+=[_pow,_rpow]
if level>=4: self.ops+=[_mod,_rmod]

def _eval(self,lst):
if len(lst)==1: yield lst[0]
for idx in _pick2combination(0,len(lst)):
nl=lst[:]
u,v=nl.pop(idx[1]),nl.pop(idx[0])
for op in self.ops:
nv=op(u,v)
if nv[1]!="err":
for x in self._eval(nl+[nv]): yield x

def solve(self,lst,target):
for y in self._eval([(float(x),str(x)) for x in lst]):
if abs(y[0]-target)<1.0e-9: yield y[1]

if __name__ == '__main__':
for x in Math24(2).solve([2,3,27,10],24): print x
avatar
w*w
73
haskell太不同了,找个人来没法train。

【在 h***s 的大作中提到】
: 学函数编程,干嘛不用haskell,纯函数式编程语言,比这种multi-paradigm表达强的
: 多。
: 其实像lisp这种的,也不纯。但我个人喜欢lisp的地方,是很强的一般化和抽象化的能
: 力,就是函数式编程的核心。所以换到haskell了。。。

avatar
A*n
74
赞,最近在学haskell,来学习下

【在 h***s 的大作中提到】
: 下面是haskell的写法 - 我只想了个简单的算法,作了简单的过滤,还可能有很多重
: 复的答案表达,这个可以在算法上进一步优化细调,就没搞了。简单的测试可了。如果
: 用GHC编译运行如下:
: > ghc -O3 solve.hs
: ....
: > solve
: -------------------------
: import Data.List
: import System.IO
: opBoxes = [((+), "+"), ((-), "-"), ((*), "*"), ((divi), "/")]

avatar
h*s
75
下面是haskell的写法 - 我只想了个简单的算法,作了简单的过滤,还可能有很多重
复的答案表达,这个可以在算法上进一步优化细调,就没搞了。简单的测试可了。如果
用GHC编译运行如下:
> ghc -O3 solve.hs
....
> solve
-------------------------
import Data.List
import System.IO
opBoxes = [((+), "+"), ((-), "-"), ((*), "*"), ((divi), "/")]
divi x y = round $ toRational(x) / toRational(y)
divisible x y = case y of 0 -> False
y -> mod (abs x) (abs y) == 0
runOp opBox ((x1,s1):(x2,s2):xs) = ((fst opBox x1 x2), ss):xs
where ss = showSolution (snd opBox) s1 s2
showSolution opStr s1 s2
| opStr=="+" || opStr=="*" = showWrapUp opStr (min s1 s2) (max s1 s2)
| otherwise = showWrapUp opStr s1 s2
showWrapUp opStr sx sy = "(" ++ sx ++ opStr ++ sy ++ ")"
initializeProblem [] = []
initializeProblem (x:xs) = (x, show x):initializeProblem xs
unDuplicatedPerm :: Eq a => [a] -> [[a]]
unDuplicatedPerm = Data.List.nub . Data.List.permutations
oneStepMap [email protected]((x1,s1):(x2,s2):ys)
= map (\x -> runOp x xs) $ oneStepOps x1 x2
oneStepOps x1 x2 = if (divisible x1 x2) then opBoxes
else
(init opBoxes)
completeMap [email protected](x:ys)
| length x == 1 = xs
| otherwise = completeMap (xs >>= unDuplicatedPerm >>= oneStepMap)
solve xs target all =
if (null zs) then print " No Solution Found!"
else if all then mapM_ print zs
else mapM_ print $ head zs
where ys = [initializeProblem xs]
zs = showResult $ nub $
filter (\y -> fst (head y) == target) (completeMap ys)
showResult xs
= map (\x -> let s=(head x) in snd s ++ "=" ++ show (fst s)) xs
main = do
solve [2,3,27,10] 24 True
-- solve [1,2,7,13] 24 True

【在 w****w 的大作中提到】
: haskell太不同了,找个人来没法train。
avatar
h*s
76
这个HTML对齐代码太费劲了,删两遍都还是对不好,算了,你们自己想象着怎么对齐好
了,我不费劲了。

【在 A*********n 的大作中提到】
: 赞,最近在学haskell,来学习下
avatar
A*n
77
ghc 还是认出来了

【在 h***s 的大作中提到】
: 这个HTML对齐代码太费劲了,删两遍都还是对不好,算了,你们自己想象着怎么对齐好
: 了,我不费劲了。

avatar
j*a
78
可以贴pastebin去

【在 h***s 的大作中提到】
: 这个HTML对齐代码太费劲了,删两遍都还是对不好,算了,你们自己想象着怎么对齐好
: 了,我不费劲了。

avatar
h*s
79
haskell spec只要求你合理的空格就行了,而求haskell的函数特点是短而一般化,不
需要太多行,所以一般小的对不齐不会影响代码的正确性。

【在 A*********n 的大作中提到】
: ghc 还是认出来了
avatar
w*w
80
haskell里list的evaluation都是lazy的吗?
avatar
h*s
81
忘了说了,这段代码可以解任意个整数的情况,比如:[1,2,3,4,5,6,7 。。]
,不限于24点,就是LZ的原始问题。当然这只是逻辑算法和原理上来说,至于bug,就
不负责了。。哈!只要算法允许,haskell表达总是可以做到更简洁,这个负责是没问
题的。
当然我喜欢haskell,只是个人观点而已。。

【在 h***s 的大作中提到】
: 下面是haskell的写法 - 我只想了个简单的算法,作了简单的过滤,还可能有很多重
: 复的答案表达,这个可以在算法上进一步优化细调,就没搞了。简单的测试可了。如果
: 用GHC编译运行如下:
: > ghc -O3 solve.hs
: ....
: > solve
: -------------------------
: import Data.List
: import System.IO
: opBoxes = [((+), "+"), ((-), "-"), ((*), "*"), ((divi), "/")]

avatar
h*s
82
对,语言的纯函数性和这个有内在的关联。
比如,你给一个有很大解案空间的问题,你总是能在线地得到当前的答案子集,如果你
想刷新IO缓冲,就能“实时”看到最新结果。。。我唰唰!

【在 w****w 的大作中提到】
: haskell里list的evaluation都是lazy的吗?
avatar
w*w
83
这个python不如,还得另写generator.

【在 h***s 的大作中提到】
: 对,语言的纯函数性和这个有内在的关联。
: 比如,你给一个有很大解案空间的问题,你总是能在线地得到当前的答案子集,如果你
: 想刷新IO缓冲,就能“实时”看到最新结果。。。我唰唰!

avatar
a*e
84
写了个 Common Lisp 的解法,就十几行(Lisp 算子有联结到对应说明,很好理解):
http://paste.lisp.org/+2V0T
(defun twenty-four (numbers &optional (target 24) all)
"Show arithmetic expression(s), composed of the given NUMBERS and the
four basic arithmetic operators, that evaluates to the TARGET number."
(labels ((fa (x)
(if (cdr x)
(loop for (i . u) on x thereis (fb i u p) collect i into p)
(and (= target (caar x)) (print (cdar x)) (not all))))
(fb (i u p)
(loop for (j . v) on u thereis (fc i j (append v q p))
collect j into q))
(fc (i j x)
(or (and (/= 0 (car j)) (fd '/ i j x))
(and (/= 0 (car i)) (fd '/ j i x))
(fd '+ i j x) (fd '* i j x) (fd '- i j x) (fd '- j i x)))
(fd (o i j x)
(fa `((,(funcall o (car i) (car j)) ,o ,(cdr i) ,(cdr j)) ,@x))
))
(fa (map 'list (lambda (x) (cons x x)) numbers))))
;;; Examples:
;;
;; CL-USER> (twenty-four '(2 3 7 10))
;; (+ (- (* 2 10) 3) 7)
;; CL-USER> (twenty-four '(2 3 7 10) 24 'show-all-solutions)
;; (+ (- (* 2 10) 3) 7)
;; (- 7 (- 3 (* 2 10)))
;; (- (+ (* 2 10) 7) 3)
;; (- (* 2 10) (- 3 7))
;; (+ (- 7 3) (* 2 10))
;; (- (* 10 2) (- 3 7))
;; (+ (* 10 2) (- 7 3))
;; (/ (+ (* 7 10) 2) 3)
avatar
h*s
85
有意思.
看有没有C/C++, Java, Perl的版本能写成十几行的... 哦, 对了, 还有javascript,
visual basic, C#/F#的干活, 哈!

p)

【在 a*******e 的大作中提到】
: 写了个 Common Lisp 的解法,就十几行(Lisp 算子有联结到对应说明,很好理解):
: http://paste.lisp.org/+2V0T
: (defun twenty-four (numbers &optional (target 24) all)
: "Show arithmetic expression(s), composed of the given NUMBERS and the
: four basic arithmetic operators, that evaluates to the TARGET number."
: (labels ((fa (x)
: (if (cdr x)
: (loop for (i . u) on x thereis (fb i u p) collect i into p)
: (and (= target (caar x)) (print (cdar x)) (not all))))
: (fb (i u p)

avatar
b*s
86
c++更快,先枚举所有组合,然后建立hash table,以后只要你一输入,我就查表

【在 w****w 的大作中提到】
: 跟儿子一起学Python,发现它表达力很强,很适合算24点这样的程序。网上搜了一下,
: 没发现一个像样的逻辑清晰,简洁,充分利用Python语言特点的24点程序。我习惯了过
: 程式,想学点函数式编程的实际运用,希望这里碰到高手。
: 要求:
: 写一个函数solve(lst,target,all)
: lst是自然数列表,可以超过4。
: target是24,也可以是其他数。
: 运算是加减乘除,如能加指数对数等则更好。
: 如果all是True,打出所有解答,否则打一个就够了。
: 程序行数最好不要超过50行,不然直接从C#/java翻过来没意思。

avatar
w*w
87
八皇后50几种语言:
http://rosettacode.org/wiki/N-queens_problem

【在 h***s 的大作中提到】
: 有意思.
: 看有没有C/C++, Java, Perl的版本能写成十几行的... 哦, 对了, 还有javascript,
: visual basic, C#/F#的干活, 哈!
:
: p)

avatar
w*p
88
python code can be under 20 lines too:
import sys, operator, itertools, math;
def reverseOp(op):
def reverseFun(*args): return op(*reversed(args))
return reverseFun
binaryOps = { '+': operator.add, '/': operator.div, '*': operator.mul, '^
': operator.pow, '-': operator.sub, 'L': math.log, '!-': reverseOp(
operator.sub), '!/': reverseOp(operator.div), '!^': reverseOp(operator.pow),
'!L': reverseOp(math.log), }
def appl(ops, nums):
r, repr = nums[0], '{0}'.format(nums[0])
try:
for i, op in enumerate(ops):
r = binaryOps[op](r, float(nums[i+1]))
if i != 0: repr = '(%s)' % repr
if op[0] == '!': repr = '{2} {1} {0}'.format(repr, op[-1], nums[
i+1])
else: repr = '{0} {1} {2}'.format(repr, op[-1], nums[
i+1])
except: return [None, None]
return [r, repr]
def solve(nums, target, full=False):
res = (repr for [x, repr] in (appl(ops, perm) for perm in itertools.
permutations(nums) for ops in itertools.product(binaryOps.keys(), repeat=len
(nums)-1)) if x is not None and math.fabs(x-target) < 1e-6)
return [next(res)] if not full else set(res)
for sol in solve([2,5,7,11,13],19): print sol
avatar
c*n
89
这程序恰好我以前写过,哈哈。interface稍微不一样,懒得改了,直接贴过来。
import sys
from itertools import permutations
#from operator import __add__
EPS = 0.0000001
isEqual = lambda x, y: [False, True][abs(x-y)def main():
line = sys.stdin.readline()
numbers = map(float, line.split())
if(len(numbers) == 0): numbers = [2.0, 2.0, 3.0, 5.0]
xs = map(X, numbers, map(str, map(int, numbers)))
expressions = []
findExpression(expressions, 24.0, xs)
print '\n'.join(set(expressions))

class myoperator:
sign = ''
op = None
def __init__(self, sign_, op_):
self.sign = sign_
self.op = op_
opUniverse = [myoperator('+', (lambda x, y: x+y)),
myoperator('-', (lambda x, y: x-y)),
myoperator('*', (lambda x, y: x*y)),
myoperator('/', (lambda x, y: x/y))
]
class X(float):
ex = ''
def __new__(self, value_, ex=''):
return float.__new__(self, value_)
def __init__(self, value_, ex_=''):
self.ex = ex_
def __div__(self, another_):
return sys.float_info.max if abs(another_)<1e-6 else float(self)/
float(another_)

def findExpression(expressions, target, xs, newX = None):
if len(xs) == 0:
if isEqual(target, newX):
expressions.append(newX.ex)
return

_xs = list(xs)
if newX != None: _xs.append(newX)
print "Try to combine [%s] | [%s]" % (', '.join(map(str, _xs)), ', '.
join(map(lambda x: x.ex, _xs)))
map(lambda duo: tryTwo(expressions, target, duo, _xs), permutations(_xs,
2))
def tryTwo(expressions, target, duo, xs):
print "Try [%s] from [%s]" % (', '.join(map(str, duo)), ', '.join(map(
str, xs)))
subXs = list(xs)
map(lambda x: subXs.remove(x), duo)
map(lambda f: findExpression(expressions, target, subXs, X(f.op(duo[0],
duo[1]), '(%s %s %s)'%(duo[0].ex, f.sign, duo[1].ex))), opUniverse)
if __name__ == '__main__':
main()
avatar
s*0
90
贴一个scala的。正在学习,书还没完全看完。初学乍练,多多指教
package myTest
import scala.collection.mutable.Map
import scala.collection.mutable.Stack
class Test3(lst: Array[Int], target: Int, all: Boolean) {
def solve() = {
for (inst permutations) {
val rst = exec(inst, op, l);
if (rst == target) {
println(inst + ", " + op)
}
}
}
def genInstr(n: Int): IndexedSeq[String] = {
if (n == 1)
return Array("g");
for (i yield {
left + right + "+";
}
}
def ops(n: Int): Array[String] = {
if (n == 0) return Array("");
for (op }
def exec(inst: String, ops: String, data: Array[Int]): Int = {
var cp = 0; var opsc = 0; var l = 0; var r = 0; var stk = Stack[Int]();
var opmap = Map[Char, (Int, Int) => Int]('+' -> (_ + _), '-' -> (_ - _),
'*' -> (_ * _), '/' -> ((x, y) => { if (y == 0 || x < y) 1000007 else (x /
y) }));
for (op op match {
case 'g' => { stk.push(data(cp)); cp += 1; }
case '+' => { stk.push(opmap(ops(opsc))(stk.pop(), stk.pop())); opsc
+= 1; }
}
if (stk.top == 1000007) { return (-1); }
}
stk.pop();
}
}
object Test3 {
def main(args: Array[String]) {
val tst = new Test3(Array(1, 2, 3, 4), 24, true)
tst.solve()
}
}
avatar
d*g
91
两个礼拜搞成这个水平,很不错啊

))
y[

【在 w****w 的大作中提到】
: 搞了两个礼拜,对python有点感觉了。
: import math
: _expr=lambda x,y,z:"(%s%s%s)"%(x,y,z)
: _plus=lambda x,y: (x[0]+y[0],_expr(x[1],"+",y[1]))
: _minus=lambda x,y: (x[0]-y[0],_expr(x[1],"-",y[1]))
: _rminus=lambda x,y: _minus(y,x)
: _mul=lambda x,y: (x[0]*y[0],_expr(x[1],"*",y[1]))
: _div=lambda x,y: (y[0]==0 and (0,"err")) or (x[0]/y[0],_expr(x[1],"/",y[1]))
: _rdiv=lambda x,y: _div(y,x)
: _mod=lambda x,y: (y[0]==0 and (0,"err")) or (x[0]%y[0],"mod(%s,%s)"%(x[1],y[

avatar
w*w
92
终于见到超一流选手了。
两行解sudoku:
def r(a):i=a.find('0');~i or exit(a);[m in[(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/
3^j%9/3)or a[j]for j in range(81)]or r(a[:i]+m+a[i+1:])for m in'%d'%5**18]
from sys import*;r(argv[1])
avatar
b*k
93
Using the recursive approach:
#!/usr/bin/env python
def solve24(numbers, goal):
"""Give a set of non duplicate positive numbers, can we use +, -, *, /
to get the goal?
Return one solution or None."""
if len(numbers) == 0:
return None
if len(numbers) == 1:
if numbers[0] == goal:
return '%d' % numbers[0]
else:
return None
ops = [
('+', lambda a, b: a - b),
('-', lambda a, b: b - a),
('*', lambda a, b: a / b if b and a % b == 0 else None),
('/', lambda a, b: b * a if a and b % a == 0 else None),
]
for index, n in enumerate(numbers):
for op_symbol, predict in ops:
# n op solve24(remaining) == goal => solve24(remaining, goal rev
_op n)
next_goal = predict(goal, n)
if next_goal:
next_numbers = list(numbers)
next_numbers.pop(index)
solution = solve24(next_numbers, next_goal)
if solution:
# Eureka!
return '%d %s (%s)' % (n, op_symbol, solution)
return None
if __name__ == "__main__":
import unittest
class TestSolve24(unittest.TestCase):
def test_sample(self):
samples = [
([6, 6, 6, 6], 24, True),
([2, 3, 4, 5], 24, True),
([3, 5, 4, 2], 24, True),
([2, 2, 2, 2], 24, False),
([1, 2, 3, 4], 24, True),
([2, 5, 7, 11, 13], 19, True),
([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 37, True),
]
for numbers, goal, expected in samples:
output = solve24(numbers, goal)
if expected:
print '%d = %s' %(goal, output)
self.assertTrue(output)
else:
print '%d != %s' %(goal, output)
self.assertFalse(output)
unittest.main()
avatar
E*m
94
我也來湊個熱鬧, Prolog, 11 行。
del([H|T],H,T).
del([H|T1],X,[H|T]):- del(T1,X,T).
evaluate(X,'-',Y,Z):- Z is X-Y.
evaluate(X,'+',Y,Z):- Z is X+Y.
evaluate(X,'*',Y,Z):- Z is X*Y.
evaluate(X,'/',Y,Z):- Y =\= 0, Z is X/Y.
solve1([X],X, []).
solve1([HH|L],X, [Operator,H1|Sol1]):- del(L,H1,L1), evaluate(HH,Operator,H1
,H), solve1([H|L1],X,Sol1).
solve0(L,X,Ans):- del(L,H,T), solve1([H|T],X,Sol),concat_atom([H|Sol],Ans).
solve(List,Target,true):- findall(Sol,solve0(List,Target,Sol), Sols), print(
Sols),!.
solve(List,Target,false):- solve0(List,Target,Sol), print(Sol),!.
測試
?- solve([2,3,7,10],24,false).
2*10-3+7
true.
?- solve([2,3,7,10],24,true).
[2*10-3+7,2*10+7-3,7*10+2/3,10*2-3+7,10*2+7-3,10*7+2/3]
true.
avatar
w*w
95
上两楼都有漏解吧?试一下11,13,17,29。
avatar
E*m
96

我大概沒搞懂規則, 規則在哪裡?

【在 w****w 的大作中提到】
: 上两楼都有漏解吧?试一下11,13,17,29。
avatar
w*w
97
简单递归会把((a,b),(c,d))形式的解漏掉。

【在 E*****m 的大作中提到】
:
: 我大概沒搞懂規則, 規則在哪裡?

avatar
E*m
98
原來不知道可以用括號,改了一下
ev(('-',XT,YT),Z):-!,ev(XT,X),ev(YT,Y), Z is X-Y.
ev(('+',XT,YT),Z):-!,ev(XT,X),ev(YT,Y), Z is X+Y.
ev(('*',XT,YT),Z):-!,ev(XT,X),ev(YT,Y), Z is X*Y.
ev(('/',XT,YT),Z):-!,ev(XT,X),ev(YT,Y), Y =\= 0, Z is X/Y.
ev(X, X).
term([X,Y], (Op1, X,Y), Ops):-member(Op1, Ops).
term([H|T], (Op1, H,YT), Ops):- member(Op1, Ops), term(T,YT,Ops).
term([X,Y|T], (Op1, (Op2, X,Y), YT), Ops):- member(Op1, Ops), member(Op2,
Ops),term(T,YT,Ops).
solve1(List, Target, Term):- permutation(List, L1), term(L1, Term, ['-','+',
'*','/']), ev(Term,Target).
solve(List,Target,true):- findall(Sol,(solve1(List,Target,Sol0),infix(Sol0,
Sol)), Sols), print(Sols),!.
solve(List,Target,false):- solve1(List,Target,Sol),infix(Sol,Sol1), print(
Sol1),!.
infix((Op,X,Y),R):-!, infix(X,X1),infix(Y,Y1),concat_atom(['(',X1,Op,Y1,')']
,R).
infix(X,X).
測試
?- solve([11,13,17,29],24, true).
[ ((11-13)*(17-29)), ((13-11)*(29-17)), ((17-29)*(11-13)), ((29-17)*(13-11))]
true.

【在 w****w 的大作中提到】
: 简单递归会把((a,b),(c,d))形式的解漏掉。
avatar
E*m
99
Prolog 可以說就是設計來做這種排列組合找解的題目, 其他語言
很難寫得更短了。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。