我写了一个相对简单的动词来旋转数字的数字(以Project Euler#35所需的方式)。所以,如果我从197年开始,我将得到197 971 719,即第一个数字是最后一个,直到我们回到我们开始的地方。
这是我的动词:".@(|.~"1 0 i.@#)@":"0
。 (实际上,我更进一步,并添加~.
以删除欺骗,但这不是必要的。)在J中有更简洁的方法吗?
答案 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矩阵。
另请注意,它不使用|.
(旋转)