算术... to ... tick ...…


15

我喜欢在长时间的电话会议中玩的游戏带给您这个问题。

给定24小时制(从00:00到23:59)中的任意两次,仅使用基本算术运算之间的所有时间可以生成多少个有效的数学方程式?

输入:两个四数字串(无结肠)表示在24小时循环有效时间。

例子:

输入= 0000,1300

03:26 produces: "0+3*2=6" and "03*2=6" etc.
11:10 produces quite a few, including: "1*1=1+0" and "1=1=1^0" and  "1=11^0" etc.
12:24 produces: "1/2=2/4" and "1=(2*2)/4" etc.

有效的操作是:

  • 加成
  • 减法
  • 乘法
  • 除法(浮点数)
  • 求幂
  • 阶乘

其他允许的符号

  • 括号
  • 等号

最短的代码获胜。

笔记

  • 我们的目标是找到的两倍,那几次都不数量之间有效的表达式包含一个有效的表达。
  • 输入的两次时间包含在时​​间范围内。
  • 您可以采用任何可能的方式对数字进行分组,因此“ 1223”可以是“ 12 23”或“ 1 2 23”或“ 1 223”等。
  • 您可以根据需要使用任意多个括号。
  • 您可以使用多个=标志。例如,时间11:11具有有效的表达式1=1=1=1
  • 如果第一次是在第二次之后按时间顺序发生的,则时间范围应像进入第二天一样环绕。
  • 数字必须保持其原始顺序-您不能重新排序数字。
  • 在对数字进行聚类时,零可能绝对是最前面的数字,在这种情况下,它们将被忽略(聚类为“ 03 03”的“ 0303”只是值为3的两位)。
  • 您不得将减号用作一元否定。因此,“ 12:01”不会产生“ 1-2 =-(01)”,但是会产生“ 1-2 = 0-1”。
  • 您不能在数字上加上小数点。因此,“ 12:05”不会产生“ 1/2 = 0.5”。
  • 没有阶乘的链接-一个数字最多只能跟一个“!”,否则,很多时候将具有无限的解。例如:“ 5!” 有效,但“ 5!” 无效。


4
有效操作包括 ”似乎阻止您添加测试用例。如果将其更改为“ 有效操作为 ”并添加了一些测试用例,那将是一个更好的问题。精确地确定端点也将很有用:对于输入0000 1300,方程应源自计数00001300包括在计数中?
彼得·泰勒

1
给定数字“ 1423”,请执行“ 1 + 4 = 2 + 3”,“(1 + 4)=(2 + 3)”,“(1 + 4)= 2 + 3”和“ 1 + 4 =(2 +3)”算作一个或四个方程式?还有......什么的“0000”式?我认为大约有100种可能性,甚至更多...这可能吗?
bobbel

2
一元运算符的使用是否受到限制?在规则中没有这样的限制时,阶乘可以重复应用,因此不可能找到完美的解决方案。
迈克尔·斯特恩

1
迈克尔,这是一个很好的观察。因此,为了解决这个难题,我认为我将其限制为每个“数字”一个阶乘。为此,5!有效,但5!无效。
nobillygreen

Answers:


1

Python3,363个字符

由于直到今天还没有给出答案,所以我将所得到的交给我。可悲的是,try / except块太胖了,我没有找到一种在其中保存字符的方法。那里的嵌套循环确实很棘手,我想并不是所有的工作都可以通过列表理解来完成,但是也许有人可以告诉我如何做。

但是,我将挑战限制在自己只能使用基本数学'+-* /'且没有括号的范围内。

a,b = input().split()
r=0
for time in [c for c in range(int(a),int(b)) if c/10%10<6]:
 t,*ts='%04d'%time
 e=[t]
 for d in ts:
  e=[(n+o+d,n+d)[o==' '] for o in ' -+*/=' for n in e]
 for h in [g for g in [e.split('=') for e in e if '='in e] if len(g)>1]:
  for k in h:
   try:
    if eval(h[0]) != eval(k):
     break
   except:
    break
  else:
   r+=1
print(r)

我在此CodeGolf上的完整代码(希望有所解释)可以在我的pastebin上找到。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.