巡回番号ですか?


20

循環数とは、1、2、3、... nを掛けると同じ数字になるが順序が異なる「n」桁の数字です。

たとえば、142,857 x 2 = 285,714、142,857 x 3 = 428,571、142,857 x 4 = 571,428などのように、142,857という数値は循環的な数値です。整数の入力が与えられた場合、真理値を出力し、そうでない場合は偽値を出力することにより、それが循環数であるかどうかを判断します。

また、明確にするために、入力には先行0を含めることができます。例:0344827586206896551724137931

これは、先行ゼロが数字で許可されていない場合、142857が10進数の唯一の循環数であるためです。

コードゴルフなので、バイト単位の最短回答が勝ちです!


1
こんにちは、PPCGへようこそ。これは悪い質問ではありませんが、最近投稿された質問のいくつかをご覧になれば、もっと良くなるかもしれないと思います。具体的には、使用するテストケースをさらに提供した場合、コミュニティにとって非常に有益です。今後の課題を投稿するときは、サンドボックスの使用を検討してください。
-FryAmTheEggman

回答:


3

05AB1E9 6バイト

3バイトを節約してくれたEmignaに感謝します!

ā*€{ïË

説明:

ā        # 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
理由は¦‚˜何ですか?
カルソウェラス

1
@kalsowerus入力の先頭に0が付いている場合、1を掛けると入力が消えてしまい、動作しません0588235294117647
アドナン

2
@tfbninjaわかりました、乗算後に先行ゼロを追加することも考慮に入れる必要がありますか?これらは、乗算後に得られる個々のソート結果であり、先行ゼロが欠落している可能性があります。これは、おそらくここの問題を示しています。
アドナン

1
0212765957446808510638297872340425531914893617別の回答のコメントに記載されている番号を検討してください。ソートされた数値を見ると、falseを返すと仮定しますが、ゼロを削除するとtrueになります。
エミグナ

2
@tfbninjaエミニャのテストケースの出力は真実ですか、それとも偽物ですか?
アドナン

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先行ゼロについて少し前にこれを投稿しました。もう1つ15バイトのソリューションがあります。このソリューションは、すぐに編集する先行ゼロで動作します。
メゴ

1
18バイトを達成するためにどの文字エンコードを使用しますか?UTF-8を試してみたところ、32バイトでした。編集:ああ、なるほど、コードページ437です。–
仮名



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

このアルゴリズムに説明は必要ないと思います。

TOL

提案をありがとう:一般的な表示名、ライコニ。

修正してくれてありがとう:アントニー・ハッチキン

「いいえ」の編集、「33」で失敗します。


1
052631578947368421で動作しますか?
J42161217

はい、その場合はTrueを返します。
仮名

2
nsをnに置き換えることにより、いくつかのバイトを節約します
一般的な表示名

1
<1代わりに使用できます==0か?TIOリンクもあります:オンラインで試してみてください!
ライコニ

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

TOL

説明:Haskellの提出と同じアルゴリズム。

いいえ、EDIT、「33」で失敗します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.