すべてのゼノドローム


15

前書き

ベースにxenodrome Nベースでその数字の全ての整数であり、nが異なっています。ここ xenodromesの一部OEIS配列です。

例えば、ベース16に、FACE42およびFEDCBA9876543210いくつかのxenodromes(されている6420666及び18364758544493064720基部10に)、しかし11DEFACEDされません。

チャレンジ

入力ベースnを指定すると、ベース10のそのベースのすべてのゼノドロームが出力されます。

出力は、最小から最大の順にする必要があります。シーケンス内の用語がどこで終了し、新しい用語がどこから始まるかが明確である必要があります(例:[0, 1, 2]どこ012がそうでないかが明確です)。

nは0より大きい整数です。

明確化

このチャレンジは、整数とそのベースを文字列として処理することを避けるために、特にベース10でIOを実行します。課題は、ベースを抽象的に処理することです。そのため、この追加ルールを追加しています。

整数は、基数10以外の基数に文字列として保存できません。

言語の実装に時間、メモリ、精度、またはその他の技術的な制限がない場合、プログラムは理論的にかなり高いnを処理できる必要があります。

これはであるため、バイト単位の最短プログラムが勝ちます。

入力と出力の例

1  # Input
0  # Output
2
0, 1, 2
3
0, 1, 2, 3, 5, 6, 7, 11, 15, 19, 21
4
0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 18, 19, 24, 27, 28, 30, 33, 35, 36, 39, 44, 45, 49, 50, 52, 54, 56, 57, 75, 78, 99, 108, 114, 120, 135, 141, 147, 156, 177, 180, 198, 201, 210, 216, 225, 228

1
nに制限はありますか?
-FlipTack

@ Flp.Tkcいいえ。かなり高いnを処理できるはずです。言語の組み込みベース変換が処理できるベースの高さによって、チャレンジを制限したくありません。
アーティアー

@Artyerそれは、チャレンジテキストの一部だったはずです。すでにいくつかの答えがそれを行っているようです
ルイスメンドー

Pythの基本変換は36を超える値を処理できることを知っていますが、これはすべてのゼノドロームを必要とするため、リストが大きすぎると、基になるpythonが壊れて、aの値に収まらないと言いssize_tます。このように壊れても問題ありませんか?
FryAmTheEggman

2
組み込みの精度制限のために、より大きなベースを処理できないすべての回答を誰かがダウン票したようです。これは、アルゴリズムの問​​題というよりも実装のようにも見えます。明確にできますか?
デニス

回答:


10

Pyth、8バイト

f{IjTQU^

[0、n ^ n-1]の数値をフィルターし、ベースnに重複する要素がないようにします。Pythのベース変換はどのベースでも機能しますが、これは非常に急速に増加する数値のリストを調べるため、最終的には値をメモリに保存できなくなります。

オンラインでお試しください!

説明:

f{IjTQU^QQ    - Auto-fill variables
      U^QQ    - [0, n^n-1]
f             - keep only those that ...
 {I           - do not change when deduplicated
   jTQ        - are converted into base n

うわー、デニスが作ったゼリーのソリューションよりも短いソリューションです!: 'P
ハイパーニュートリノ

3
ゼリーを倒す人はいません。¶:
ローマングレフ

5

Python 2、87バイト

n=input()
for x in range(n**n):
 s={n};a=x
 while{a%n}|s>s:s|={a%n};a/=n
 print-~-a*`x`

非ゼノドロームの余分な空白行を印刷します。

golf % python2.7 xenodromes.py <<<3
0
1
2
3

5
6
7



11



15



19

21

5

ゼリー9 8 バイト

ð*ḶbQ€Qḅ

1バイトのゴルフをしてくれた@JonathanAllanに感謝します!

オンラインでお試しください!または、すべてのテストケースを確認します

使い方

ð*ḶbQ€Qḅ  Main link. Argument: n

ð         Make the chain dyadic, setting both left and right argument to n.
          This prevents us from having to reference n explicitly in the chain.
 *        Compute nⁿ.
  Ḷ       Unlength; yield A := [0, ..., nⁿ - 1].
   b      Convert each k in A to base n.
    Q€    Unique each; remove duplicate digits.
      Q   Unique; remove duplicate digit lists.
       ḅ  Convert each digit list from base n to integer.

4

ゼリー、12 バイト

*`ḶbµQ⁼$Ðfḅ³

TryItOnline!

nJellyの基本変換は、十分なメモリがあれば、すべてのユーザーで機能しますが、制限はありません。

どうやって?

*`ḶbµQ⁼$Ðfḅ³ - Main link: n
    µ        - monadic chain separation
*            - exponentiation with
 `           - repeated argument, i.e. n^n
  Ḷ          - lowered range, i.e. [0,1,2,...,n^n-1]
   b         - covert to base n (vectorises)
        Ðf   - filter keep:
       $     -     last two links as a monad
     Q       -         unique elements
      ⁼      -         equals input (no vectorisation)
           ³ - first program argument (n)
          ḅ  - convert from base (vectorises)

3

JavaScript(ES7)、86バイト

n=>{a=[];for(i=n**n;i--;j||a.unshift(i))for(j=i,b=0;(b^=f=1<<j%n)&f;j=j/n|0);return a}

失敗します1(出力する必要があります[0]が、RangeErrorsです)
アーティアー

私が持っていたものとまったく同じですが、37精度が問題にならなければ理論的には失敗し、それが無効になると思います...
ETHproductions

私は私のバッチバージョンを移植しました@Artyer、今これがために働くだろうnから113浮動小数点精度がそれを殺す前に。
ニール

私は、ソリューションが非常に短い時間で始まり、その後突然桁違いにジャンプする方法が好きです。
ニッサ

2

Perl 6、47バイト

{(0..$_**$_).grep: !*.polymod($_ xx*).repeated}

Seqを返します。(SeqIteratorの基本的な反復可能なラッパーです)

入力すると16、Seq(87887)の53905番目の要素を計算するのに20秒かかります。

拡張:

{       # bare block lambda with implicit parameter 「$_」

  ( 0 .. ($_ ** $_) )    # Range of values to be tested

  .grep:                 # return only those values

    !\                   # Where the following isn't true
    *\                   # the value
    .polymod( $_ xx * )  # when put into the base being tested
    .repeated            # has repeated values
  }
}

2

バッチ、204 200バイト

@set/an=%1,m=1
@for /l %%i in (1,1,%1)do @set/am*=n
@for /l %%i in (0,1,%m%)do @set/ab=0,j=i=%%i&call:l
@exit/b
:l
@set/a"f&=b^=f=1<<j%%n,j/=n"
@if %f%==0 exit/b
@if %j% gtr 0 goto l
@echo %i%

Batchには32ビット演算しか含まれていないため、n> 9では機能しません。便利なことに、Batchはf &= b ^= f = 1 << j % nとしてf = 1 << j % n, b = b ^ f, f = f & bではなくとして評価されf = f & (b = b ^ (f = 1 << j % n))ます。


2

Mathematica、59 48バイト

Select[Range[#^#]-1,xMax[x~DigitCount~#]==1]&

U + F4A1「プライベート使用」文字が含まれています

説明

Range[#^#]-1

生成し{1, 2, ..., n^n}ます。減算1.(収量{0, 1, ..., n^n - 1}

xMax[x~DigitCount~#]==1

ブール関数:True各桁がbaseで最大1回出現する場合n

Select[ ... ]

リストから、{0, 1, ..., n^n - 1}与えるものを選択しますTrue上記のブール関数が適用されるときに。

59バイトバージョン

Select[Range[#^#]-1,xDuplicateFreeQ[x~IntegerDigits~#]]&

2

Mathematica、48 55バイト

Union[(x   x~FromDigits~#)/@Permutations[Range@#-1,#]]&

xs 間のトリプルスペースは、コードを機能させるために3バイト文字\ uF4A1に置き換える必要があります。)

単一引数の名前のない関数。整数の異質性をテストするのではなく、許可された数字のサブセットの可能なすべての順列を自動的に生成し(自動的に繰り返しを回避します)、対応する整数を10を基数に変換します。Union重複を削除し、リストをソートして起動します。


1
失敗し2ます。関数はを与え{0, 1}ます。のPermutations[Range@#-1, #]代わりにあなたが必要だと思いますSubsets[Range@#-1]
ジョンファンミン

ガ、なんて骨の折れる間違い。それを観察し、完璧な修正を提案してくれてありがとう!
グレッグマーティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.