鱼C论坛

 找回密码
 立即注册
查看: 1623|回复: 6

[技术交流] 微博上看到的一题,有兴趣的鱼油们来看看

[复制链接]
发表于 2018-3-4 21:38:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
微博上看到的,打算用python解出来,结果写了一个半小时。。。
Cache_-6acceb12114ff1c5..jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-4 21:39:00 | 显示全部楼层
  1. def check3(a,b,c):

  2.     if a == b == c:

  3.         return 1

  4.     else:

  5.         return 0

  6. def check4(a,b):

  7.     if a == b:

  8.         return 1

  9.     else:

  10.         return 0

  11. def check6(a,b,c):

  12.     if a == b == c:

  13.         return 1

  14.     else:

  15.         return 0
  16.    
  17. def check8(a,b):

  18.     if abs(a - b) > 1:

  19.         return 1

  20.     else:

  21.         return 0

  22. def check9(a,b,c,d):

  23.     x = (a == b)

  24.     y = (c == d)

  25.     if x != y:

  26.         return 0

  27.     if x == y:

  28.         return 1

  29. e1 = [0,1,2,3]

  30. e2 = [1,2,3]

  31. e4 = [1,2,3]

  32. e5 = [0,1,2,3]

  33. e6 = [1,2,3]

  34. e7 = [0,1,2,3]

  35. e8 = [0,1,2,3]

  36. e9 = [0,1,2,3]

  37. e10 = [0,1,2,3]

  38. a3 = 0

  39. for a1 in e1:

  40.     for a2 in e2:

  41.         listf2 = [2,3,0,1]

  42.         temp2 = listf2[a2]

  43.         for a4 in e4:

  44.             for a5 in e5:

  45.                 for a6 in e6:

  46.                     if 0 == check3(a2,a4,a6):

  47.                         continue

  48.                     for a7 in e7:

  49.                         listf7 = [2,1,0,3]

  50.                         temp7 = listf7[a7]

  51.                         for a8 in e8:

  52.                             for a9 in e9:

  53.                                 listf5 = [a8,a4,a9,a7]

  54.                                 if a5 != listf5[a5]:

  55.                                     continue

  56.                                 for a10 in e10:

  57.                                     c0 = 0

  58.                                     c1 = 0

  59.                                     c2 = 0

  60.                                     c3 = 0

  61.                                     listf4 = [check4(a1,a5),check4(a2,a7),check4(a1,a9),check4(a6,a10)]

  62.                                     if 0 == listf4[a4]:

  63.                                         continue

  64.                                     listf6 = [check6(a2,a4,a8),check6(a1,a6,a8),check6(a3,a10,a8),check6(a5,a9,a8)]

  65.                                     if 0 == listf6[a6]:

  66.                                         continue

  67.                                     for x in (a1,a2,a3,a4,a5,a6,a7,a8,a9,a10):

  68.                                         if 0 == x:

  69.                                             c0 += 1

  70.                                         if 1 == x:

  71.                                             c1 += 1

  72.                                         if 2 == x:

  73.                                             c2 += 1

  74.                                         if 3 == x:

  75.                                             c3 += 1

  76.                                     maxmum = max(c0,c1,c2,c3)

  77.                                     minimum = min(c0,c1,c2,c3)

  78.                                     if c0 == maxmum:

  79.                                         most = 0

  80.                                     if c1 == maxmum:

  81.                                         most = 1

  82.                                     if c2 == maxmum:

  83.                                         most = 2

  84.                                     if c3 == maxmum:

  85.                                         most = 3

  86.                                     if c0 == minimum:

  87.                                         least = 0

  88.                                     if c1 == minimum:

  89.                                         least = 1

  90.                                     if c2 == minimum:

  91.                                         least = 2

  92.                                     if c3 == minimum:

  93.                                         least = 3
  94.                                             
  95.                                     if temp7 != least:

  96.                                         continue

  97.                                     listf8 = [check8(a7,a1),check8(a5,a1),check8(a2,a1),check8(a10,a1)]

  98.                                     if 0 == listf8[a8]:

  99.                                         continue

  100.                                     listf9 = [a6,a10,a2,a9]

  101.                                     temp9 = listf9[a9]

  102.                                     if 1 == check9(a1,a6,temp9,a5):

  103.                                         continue

  104.                                     listf10 = [3,2,4,1]

  105.                                     temp10 = maxmum - minimum

  106.                                     if listf10[a10] == temp10:
  107.                                     
  108.                                         print("第一题答案是:",chr(ord(str(a1))+17))

  109.                                         print("第二题答案是:",chr(ord(str(a2))+17))

  110.                                         print("第三题答案是:",chr(ord(str(a3))+17))

  111.                                         print("第四题答案是:",chr(ord(str(a4))+17))

  112.                                         print("第五题答案是:",chr(ord(str(a5))+17))
  113.                                     
  114.                                         print("第六题答案是:",chr(ord(str(a6))+17))

  115.                                         print("第七题答案是:",chr(ord(str(a7))+17))

  116.                                         print("第八题答案是:",chr(ord(str(a8))+17))

  117.                                         print("第九题答案是:",chr(ord(str(a9))+17))

  118.                                         print("第十题答案是:",chr(ord(str(a10))+17))

  119.                                         print("\n")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-4 21:39:35 | 显示全部楼层
  1. Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
  2. Type "copyright", "credits" or "license()" for more information.
  3. >>>
  4. RESTART: C:\Users\M\AppData\Local\Programs\Python\Python36\programs\my exercises\detective.py
  5. 第一题答案是: B
  6. 第二题答案是: C
  7. 第三题答案是: A
  8. 第四题答案是: C
  9. 第五题答案是: A
  10. 第六题答案是: C
  11. 第七题答案是: D
  12. 第八题答案是: A
  13. 第九题答案是: B
  14. 第十题答案是: A
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-4 21:41:45 | 显示全部楼层
只是稍微考虑了一下效率的问题,原本要进行10次for循环,但是第三题答案已经解出来只能是A了,那么9次for循环,考虑到效率,不在第9次循环,也就是最内层循环进行排除,能尽早排除就尽早排除。
不过感觉还是太长了点,190多行= =各位大神有简短点的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 22:58:29 | 显示全部楼层
本帖最后由 LargeCat 于 2018-3-4 23:04 编辑
  1. import time
  2. t=time.time()
  3. Result=['A', 'B', 'C', 'D']
  4. def check(a, b):
  5.     if a==b:
  6.         return 1
  7.     else:
  8.         return 0

  9. def check3(a, b, c):
  10.     if a==b==c:
  11.         return 1
  12.     else:
  13.         return 0
  14.         
  15. for i1 in Result:
  16.     for i2 in Result:
  17.         for i3 in Result:
  18.             for i4 in Result:
  19.                 for i5 in Result:
  20.                     for i6 in Result:
  21.                         for i7 in Result:
  22.                             for i8 in Result:
  23.                                 for i9 in Result:
  24.                                     for i10 in Result:
  25.                                         if check(i1, i5)+check(i2, i7)+check(i1, i9)+check(i6, i10)==1:
  26.                                             if [i4, i7, i8, i9].count(i5)==1:
  27.                                                 if check3(i2, i3, i4)+check3(i2, i3, i6)+check3(i3, i4, i6)==1:
  28.                                                     if check3(i8,i2, i4)+check3(i8,i1, i6 )+check3(i8,i3,i10)+check3(i8,i5,i9)==1:
  29.                                                         if abs(ord(i1)-ord(i2))+abs(ord(i1)-ord(i5))+abs(ord(i1)-ord(i7))+abs(ord(i1)-ord(i10))>4:
  30.                                                             if not (i1==i6)==([i2, i6, i9, i10].count(i5)==1):
  31.                                                                 if [abs(ord(i1)-ord(i2)), abs(ord(i1)-ord(i5)), abs(ord(i1)-ord(i7)), abs(ord(i1)-ord(i10))].count(1)==3:
  32.                                                                     if [i2+i5=='AC', i2+i5=='BD', i2+i5=='CA', i2+i5=='DB'].count(True)==1:
  33.                                                                         print(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10)
  34. print('over')
  35. print(time.time()-t)   
复制代码



答案有好多个啊,我随便抽了一个,符合条件啊,
  1. A D D D B C B D A B
  2. B A A A C B C A B D
  3. B A A A C B C B B D
  4. B A A A C C C A B D
  5. B A A B C A D A C A
  6. B A A D C A D A C A
  7. B A B B C B C B B D
  8. B C B B A B A B B D
  9. B C C B A C D C A C
  10. B C C C A A A C B D
  11. B C C C A B A B B D
  12. B C C C A B A C B D
  13. B C C D A C D C A C
  14. C B B A D B A B D B
  15. C B B B D C D B C A
  16. C B B B D C D C C A
  17. C B B B D D D B C A
  18. C B B C D B A B D B
  19. C B C C D C D C C A
  20. C D C C B C B C C A
  21. C D D A B D A D B D
  22. C D D C B D A D B D
  23. C D D D B B B D C A
  24. C D D D B C B C C A
  25. C D D D B C B D C A
  26. D A A A C B C A D C
  27. over
  28. 1.2150695323944092
复制代码


遗漏了2个题目,7和10,
我在最后加一个判断再更新上来.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 23:30:57 From FishC Mobile | 显示全部楼层
太晚了懒得弄了,睡觉,,,,,,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-5 10:27:09 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2018-3-5 10:32 编辑

代码的可读性要强,不然过一段时间自己都看不懂了,修改起来也麻烦。
  1. def i2(ans):
  2.         a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = ans
  3.         if a2=="A" and a5=="C": return True
  4.         if a2=="B" and a5=="D": return True
  5.         if a2=="C" and a5=="A": return True
  6.         if a2=="D" and a5=="B": return True
  7.         return False

  8. def i3(ans):
  9.         a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = ans
  10.         if len(set([a3,a6,a2,a4])) != 2: return False
  11.         if a3=="A" and a6==a2==a4: return True
  12.         if a3=="B" and a3==a2==a4: return True
  13.         if a3=="C" and a6==a3==a4: return True
  14.         if a3=="D" and a6==a2==a3: return True
  15.         return False

  16. def i4(ans):
  17.         a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = ans
  18.         if a4=="A" and a1==a5: return True
  19.         if a4=="B" and a2==a7: return True
  20.         if a4=="C" and a1==a9: return True
  21.         if a4=="D" and a6==a10: return True
  22.         return False

  23. def i5(ans):
  24.         a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = ans
  25.         if a5==a8=="A": return True
  26.         if a5==a4=="B": return True
  27.         if a5==a9=="C": return True
  28.         if a5==a7=="D": return True
  29.         return False

  30. def i6(ans):
  31.         a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = ans
  32.         if a6=="A" and a8==a2==a4: return True
  33.         if a6=="B" and a8==a1==a6: return True
  34.         if a6=="C" and a8==a3==a10: return True
  35.         if a6=="D" and a8==a5==a9: return True
  36.         return False

  37. def i7(ans):
  38.         a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = ans
  39.         ans = list(ans)
  40.         if a7=="A" and min(ans,key=ans.count)=="C": return True
  41.         if a7=="B" and min(ans,key=ans.count)=="B": return True
  42.         if a7=="C" and min(ans,key=ans.count)=="A": return True
  43.         if a7=="D" and min(ans,key=ans.count)=="D": return True
  44.         return False

  45. def i8(ans):
  46.         a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = ans
  47.         if a8=="A" and abs(ord(a1)-ord(a7))>1: return True
  48.         if a8=="B" and abs(ord(a1)-ord(a5))>1: return True
  49.         if a8=="C" and abs(ord(a1)-ord(a2))>1: return True
  50.         if a8=="D" and abs(ord(a1)-ord(a10))>1: return True
  51.         return False

  52. def i9(ans):
  53.         a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = ans
  54.         if a9=="A" and ((a1==a6) != (a6==a5)): return True
  55.         if a9=="B" and ((a1==a6) != (a10==a5)): return True
  56.         if a9=="C" and ((a1==a6) != (a2==a5)): return True
  57.         if a9=="D" and ((a1==a6) != (a9==a5)): return True
  58.         return False

  59. def i10(ans):
  60.         a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = ans
  61.         ans = list(ans)
  62.         if a10=="A" and ans.count(max(ans,key=ans.count))-ans.count(min(ans,key=ans.count))==3: return True
  63.         if a10=="B" and ans.count(max(ans,key=ans.count))-ans.count(min(ans,key=ans.count))==2: return True
  64.         if a10=="C" and ans.count(max(ans,key=ans.count))-ans.count(min(ans,key=ans.count))==4: return True
  65.         if a10=="D" and ans.count(max(ans,key=ans.count))-ans.count(min(ans,key=ans.count))==1: return True
  66.         return False

  67. from itertools import product
  68. for each in product("ABCD",repeat=10):
  69.         if not i2(each): continue
  70.         if not i3(each): continue
  71.         if not i4(each): continue
  72.         if not i5(each): continue
  73.         if not i6(each): continue
  74.         if not i7(each): continue
  75.         if not i8(each): continue
  76.         if not i9(each): continue
  77.         if not i10(each): continue
  78.         print(each)
复制代码

('B', 'C', 'A', 'C', 'A', 'C', 'D', 'A', 'B', 'A')
[Finished in 0.8s]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 22:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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