更简洁的方法来旋转J中数字的数字

时间:2015-02-03 06:30:36

标签: j

我写了一个相对简单的动词来旋转数字的数字(以Project Euler#35所需的方式)。所以,如果我从197年开始,我将得到197 971 719,即第一个数字是最后一个,直到我们回到我们开始的地方。

这是我的动词:".@(|.~"1 0 i.@#)@":"0。 (实际上,我更进一步,并添加~.以删除欺骗,但这不是必要的。)在J中有更简洁的方法吗?

2 个答案:

答案 0 :(得分:3)

它并不短,但我发现它更简洁:

v =: 1&|.^:(<@#)&.":
v 1234
1234 2341 3412 4123
v 197
197 971 719

它使用^:(幂)的1班1&|.代替变量班次和&.(下)将整数转换为字符串并返回。

答案 1 :(得分:1)

稍微不同的方法是将格式化的数字转换为具有n行n + 1位的矩阵,其中n是数字位数,然后删除最后一列。

   v=. }:"1@($~(,>:)@#)&.": 
   v 1234
1234 2341 3412 4123
   v 197
197 971 719

在这种形式下,它使用2个钩子,这总是有点乐趣。 (,>:)添加一个并附加到参数中 ($~(,>:)@#)获取格式化的数字并将其整形为n,n + 1矩阵。 另请注意,它不使用|.(旋转)