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

  • 本文关键字:数字 简洁 方法 旋转 j
  • 更新时间 :
  • 英文 :


我写了一个相对简单的动词来旋转数字的数字(以欧拉项目#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 矩阵。另请注意,它不使用|.(旋转)

最新更新