它是一个循环数吗?


20

循环数是“ n”个数字,乘以1、2、3,... n会得到相同的数字,但顺序不同。

例如,数字142,857是循环数,因为142,857 x 2 = 285,714、142,857 x 3 = 428,571、142,857 x 4 = 571,428,依此类推。给定整数输入,如果输出真值,则输出真值,如果输出真值,则输出假值,从而确定其是否为循环数。

另外,要清楚一点,输入中可以包含前导0:例如0344827586206896551724137931

这是因为,如果数字上不允许前导零,则142857是十进制中唯一的循环数字。

因为它是代码高尔夫球,所以最短答案以字节为单位!


1
嗨,欢迎来到PPCG。这不是一个坏问题,但是如果您看一下最近发布的一些问题,我认为您会发现它会更好。具体来说,如果您提供更多可用于测试的用例,则对社区非常有益。发布未来的挑战时,请考虑使用沙盒
FryAmTheEggman's

Answers:


3

05AB1E9 6字节

感谢Emigna节省了3个字节!

ā*€{ïË

说明:

ā        # Push range(1, len(input) + 1)
 *       # Multiply by the input
  €{     # Sort each element
    ï    # Convert to int to remove leading zeros
     Ë   # Check if all elements are equal

使用05AB1E编码。在线尝试!


1
原因是¦‚˜什么?
kalsowerus

1
@kalsowerus如果输入的前导零,则乘以1将使其消失,从而使其不适用于0588235294117647
阿德南

2
@tfbninja哦,好吧,在乘法之后加上前导零也要考虑吗?这些是我在乘法运算后得到的排序结果,带有一些丢失的前导零,这可能表明这里存在问题。
阿德南

1
考虑0212765957446808510638297872340425531914893617另一个答案的注释中提到的数字。查看排序后的数字,我会假定它返回false,但是当删除零时,它将变为true。
Emigna '17

2
@tfbninja Emigna测试用例的输出是正确还是错误?
阿德南

4

其实是18个位元组

;;ru@≈*♂$♂S♂≈╔@S≈=

在线尝试!(期望引用输入)

说明:

;;ru@≈*♂$♂S♂≈╔@S≈=
;;                  duplicate input twice
  ru                range(1, len(input)+1)
    @≈              convert input to an integer
      *             multiply input by each element in range
       ♂$♂S♂≈       convert each product to a string, sort the digits, and convert back to int
             ╔      uniquify: remove duplicate elements
              @S≈   sort input and convert to int
                 =  compare equality

1
@tfbninja我在有关前导零的位之前发布了此内容。我还有另一个15字节的解决方案,该解决方案将与我将在不久后编辑的前导零一起工作。
Mego

1
您使用什么字符编码来实现18个字节?我尝试了UTF-8,它的大小为32个字节。编辑:哦,我知道了,它是代码页437。–
别名

3

Python,86个字节

lambda n:all(sorted(n)==sorted(str(int(n)*i).zfill(len(n)))for i in range(2,len(n)+1))

在线尝试!

输入数字作为字符串。


1
@tfbninja应该可以在任何python(2和3)上使用
Uriel

1
为什么会失败,并显示0212765957446808510638297872340425531914893617?
J42161217 '17

@Jenny_mathy现在没有了。
Uriel


2

Haskell,36 33 32 45字节

c n=let l=length n in(10^l-1)`div`read n==l+1

用法示例:

*Main> c "142857"
True

我认为该算法不需要任何解释。

托尔

感谢您的建议:通用显示名称Laikoni。

感谢您的指正:安东尼·哈奇金斯。

编辑否,在“ 33”上失败。


1
它对052631578947368421有效吗?
J42161217 '17

是的,在这种情况下,它返回True。
别名

2
通过将ns替换为n来节省一些字节
通用显示名称

1
可以<1代替使用==0吗?这里还有一个TIO链接:在线尝试!
Laikoni '17

111111怎么样?
安东尼·哈奇金斯

2

dc,24 25字节

[1]sa0?dZd10r^1-r1+/rx=ap

如果数字不是循环的,则输出“ 0”,否则为“ 1”。需要将数字作为字符串输入。

用法示例:

$ echo "[052631578947368421]" | dc -e '[1]sa0?dZd10r^1-r1+/rx=ap'
1
$ echo "[052631578947368422]" | dc -e '[1]sa0?dZd10r^1-r1+/rx=ap'
0

托尔

说明:与我的Haskell提交算法相同。

编辑否,在“ 33”上失败。


1

Mathematica,81个字节

Length@Union@PadLeft[Sort/@IntegerDigits[ToExpression@#*Range@StringLength@#]]<2&

在线尝试!

输入字符串

输入值

“ 010309278350515463917525773195876288659793814432989690721649484536082474226804123711340206185567”

输出量

真正


FromDigits比短ToExpression
JungHwan民

1
因为在这个挑战,你需要工作,输入,比如034324 ...
J42161217
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.