• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[神梦] 【每日一题】链式加法 - 2022.4.28 [复制链接]

1#
题目描述

我们的任务是编写一个加法函数add(),接收纯数字作为参数,
并且可以实现一个有趣的链式加法,也就是如果我们调用add(1)(2)(3)可以得到6。

示例:
输入: add(1),返回:1
输入: add(1)(2)(3),返回:6

题目难度:中等
题目来源:Training on A Chain adding function | Codewars
题目交流: 584781753
  1. Import "SmAssert.dll"

  2. Function Add(n)
  3.     // 您的代码写在这里
  4. End Function


  5. SmAssert Add(1) = 1
  6. SmAssert Add(1)(2) = 3
  7. SmAssert Add(1)(2)(3) = 6
复制代码

参考题解(一)


  1. // 我也没有想出按键精灵中完美的解决方案
  2. // 有个小瑕疵,需要在链式最后面加个空字符串参数
  3. Import "SmAssert.dll"

  4. VBSBegin
  5.     '【作者】:神梦无痕
  6.     '【QQ】:1042207232
  7.     '【Q群】:584781753
  8.     Function Add(n)
  9.         Execute _
  10.         "Class AddChain" & vbCrLf &_
  11.         "    Private sum" & vbCrLf &_
  12.         "    Public Default Function add(n)" & vbCrLf &_
  13.         "        If sum = """" Then sum = """& n &"""" & vbCrLf &_
  14.         "        If IsNumeric(n) And n <> """" Then" & vbCrLf &_
  15.         "            sum = sum + n" & vbCrLf &_
  16.         "            Set add = Me" & vbCrLf &_
  17.         "        Else" & vbCrLf &_
  18.         "            add = sum" & vbCrLf &_
  19.         "        End If" & vbCrLf &_
  20.         "    End Function" & vbCrLf &_
  21.         "End Class" & vbCrLf
  22.         Set Add = New AddChain
  23.     End Function
  24. VBSEnd


  25. SmAssert Add(1)("") = 1
  26. SmAssert Add(1)(2)("") = 3
  27. SmAssert Add(1)(2)(3)("") = 6
复制代码





参考题解(二)


  1. // 这个解法也需要在链式最后面加个空字符串参数
  2. // 不过相对题解(一)代码量少了很多
  3. Import "SmAssert.dll"

  4. VBSBegin
  5.     '【作者】:神梦无痕
  6.     '【QQ】:1042207232
  7.     '【Q群】:584781753
  8.     Dim sum : sum = 0
  9.     Function Add(n)
  10.         If Len(n) = 0 Then
  11.             Add = sum
  12.             sum = 0
  13.         Else
  14.             sum = sum + n
  15.             Set Add = GetRef("Add")
  16.         End If
  17.     End Function
  18. VBSEnd


  19. SmAssert Add(1)("") = 1
  20. SmAssert Add(1)(2)("") = 3
  21. SmAssert Add(1)(2)(3)("") = 6
复制代码




插件下载

 
【插件】神梦断言插件 SmAssert.dll,帮助开发者发现业务逻辑错误

最后编辑神梦科技 最后编辑于 2022-05-01 11:17:48
2#

想知道

3#

454

454545

4#

用VBS来迂回实现,这脑洞也是6的飞起啊,66666

5#

111111111

6#

总觉得会大喊大叫的话

7#

学习了

8#

能回复?

9#

去掉右括号,以左括号为分隔符分隔字符串,然后加起来TracePrint ChainAdd("Add(1)(2)(3)")

Function ChainAdd(Str_Input)
ChainAdd = 0
Str_Input = Replace(Str_Input, ")", "")
Arr = Split(Str_Input, "(")

For i = 1 To UBound(Arr)

ChainAdd = ChainAdd + CLng(Arr(i))

Next
End Function

点评

神梦科技  另辟蹊径,很不错的想法👍  发表于 2022/4/29 17:38:23

最后编辑ouyeah999 最后编辑于 2022-04-29 13:09:16
10#

cgbhkjghkj

11#

学习学习

12#

用VBS来迂回实现,这脑洞也是6的飞起啊,66666

13#

hhhukbiubbu

14#

.....

15#

正在学习中

发新话题 回复该主题