如何在 J 中重构它?

发布于 2024-08-07 01:21:51 字数 116 浏览 9 评论 0原文

这是 Project Euler #1 解决方案的不同方法:

+/~.(3*i.>.1000%3),5*i.>.1000%5

如何重构它?

Here is a different approach for the Project Euler #1 solution:

+/~.(3*i.>.1000%3),5*i.>.1000%5

How to refactor it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

屋顶上的小猫咪 2024-08-14 01:21:51
[:+/@~.@,3 5([*i.@>.@%~)]

用法示例:

f =: [:+/@~.@,3 5([*i.@>.@%~)]
f 1000

+/~.,3 5([*i.@>.@%~)1000

%~                        = 4 : 'y % x'
i.@>.@%~                  = 4 : 'i. >. y % x'
[*i.@>.@%~                = 4 : 'x * i. >. y % x'
3 5([*i.@>.@%~)]          = 3 : '3 5 * i. >. y % 3 5'
[:+/@~.@,3 5([*i.@>.@%~)] = 3 : '+/ ~. , 3 5 * i. >. y % 3 5'
[:+/@~.@,3 5([*i.@>.@%~)]

usage example:

f =: [:+/@~.@,3 5([*i.@>.@%~)]
f 1000

or

+/~.,3 5([*i.@>.@%~)1000

%~                        = 4 : 'y % x'
i.@>.@%~                  = 4 : 'i. >. y % x'
[*i.@>.@%~                = 4 : 'x * i. >. y % x'
3 5([*i.@>.@%~)]          = 3 : '3 5 * i. >. y % 3 5'
[:+/@~.@,3 5([*i.@>.@%~)] = 3 : '+/ ~. , 3 5 * i. >. y % 3 5'
指尖上得阳光 2024-08-14 01:21:51
+/(#~ ( (0= 3| ]) +. (0 = 5 |]) )) 1+i.999

0 = ( 3 | ]) 使用(两次)动词 train (fork) 和 nuv 的技巧(在http://www.jsoftware.com/help/learning/09.htm

另一种编写方式:

+/(#~ ( ((0&=) @ (3&|)) +. ((0&=) @ (5&|)))) 1+i.999
+/(#~ ( (0= 3| ]) +. (0 = 5 |]) )) 1+i.999

0 = ( 3 | ]) uses (twice) the trick of verb train (fork) with n u v (discussed at the end of http://www.jsoftware.com/help/learning/09.htm)

A different way of writing it:

+/(#~ ( ((0&=) @ (3&|)) +. ((0&=) @ (5&|)))) 1+i.999
野鹿林 2024-08-14 01:21:51

这是另一种方法,使用简单的通用动词

multiplesbelow =: 4 : 'I. 0 = x | i.y'
+/ ~. ,3 5 multiplesbelow"0 [ 1000

Here is another approach, using a simple, generic verb

multiplesbelow =: 4 : 'I. 0 = x | i.y'
+/ ~. ,3 5 multiplesbelow"0 [ 1000
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文