我写了一个相对简单的动词来旋转数字的数字(以欧拉项目#35要求的方式)。因此,如果我从 197 开始,我将得到 197 971 719,即,第一个数字排在最后,直到我们回到起点。
这是我的动词:".@(|.~"1 0 i.@#)@":"0
.(实际上,我的更进一步,并添加了~.
来删除重复,但这不是必需的。在 J 中是否有更简洁的方法可以做到这一点?
它不短,但我发现它在某种程度上更简洁:
v =: 1&|.^:(<@#)&.":
v 1234
1234 2341 3412 4123
v 197
197 971 719
它使用 1 移位1&|.
的^:
(幂)而不是可变移位和&.
(下)从整数转换为字符串并返回。
稍微不同的方法是将格式化的数字变成一个矩阵,其中包含 n 行 n+1 位数字,其中 n 是位数,然后删除最后一列。
v=. }:"1@($~(,>:)@#)&.":
v 1234
1234 2341 3412 4123
v 197
197 971 719
在这种形式中,它使用 2 个钩子,这总是很有趣。 (,>:)
添加一个并附加到参数 ($~(,>:)@#)
采用格式化的数字并将其整形为 n,n+1 矩阵。另请注意,它不使用|.
(旋转)