N基底の回文である数


10

負でない整数が指定された場合n >= 0x_i >= 3完全にn異なるb基数の回文である整数のシーケンスを永久に出力します2 <= b <= x_i-2

これは基本的にOEIS A126071の逆で、そのシーケンスのどのインデックスが値を持つかを出力しますnb = x_i-1, x_i, x_i+1これらのベースの結果は常に同じであるため(値は常にパリンドロームであるか、常にそうでないか)、ベースを無視するように変更したため、少し異なります。また、オフセットが異なります。

x_i>= 3それぞれの結果の最初の項nA037183になるように、数値に制限されています。

出力形式は柔軟ですが、数値は適切な方法で区切る必要があります。

例:

n   seq
0   3 4 6 11 19 47 53 79 103 137 139 149 163 167 ...
1   5 7 8 9 12 13 14 22 23 25 29 35 37 39 41 43 49 ...
2   10 15 16 17 18 20 27 30 31 32 33 34 38 44 ...
3   21 24 26 28 42 45 46 50 51 54 55 56 57 64 66 68 70 ...
4   36 40 48 52 63 65 85 88 90 92 98 121 128 132 136 138 ...
5   60 72 78 84 96 104 105 108 112 114 135 140 156 162 164 ...
10  252 400 420 432 510 546 600 648 784 800 810 816 819 828 858 882 910 912 1040 1056 ...

したがって、n=0では、このチャレンジの出力を取得します(で始まる3n=0。これは、底が回文である数値を取得するためです。

n=15は回文型の回文であり、それが回文式で2ある唯一2 <= b <= (5-2)の回文です。7は回文式が回文式であり、回文式が回る2唯一2 <= b <= (7-2)の回文です。な​​ど


言語が無限出力をサポートしていない場合、別の整数zを入力として取りz、シーケンスの最初の要素、または未満のすべての要素を出力できますz。あなたが好きな方。その場合は、回答で使用したものを記載してください。

関連した


100%明確にするために、出力される数値はn、基底ではなく正確な基底の回文である必要がありますnか?
Mike Bufardeci 2017

1
はい。それは正しいです。したがって、のすべての値のすべてのシーケンスの和n集合は、整数のセットです>=3
mbomb007 2017

回答:


2

ゼリー、18 バイト

Ṅ‘µ‘µbRŒḂ€S_2⁼³µ?ß

オンラインでお試しください!-オンラインインタープリターは60秒でタイムアウトし、出力をフラッシュし(キャッシュされたコピーがない場合)、オフラインで順番に出力します。

どうやって?

番号を上から評価nし、順番に並んでいる場合は出力します。出力の最初の数はn、の範囲がb十分に大きくないため、より大きいので、でプロセスをシードする必要がないことに注意してください3。また、基数2からx i -2までのパリンドロームの数は、基数1からxまでのパリンドロームの数よりも2つ少ないことに注意してください。

Ṅ‘µ‘µbRŒḂ€S_2⁼³µ?ß - Main link: n
 AµBµC         µ?  - ternary if: if C then A else B
      R            - range: [1,2,3...,n]
     b             - n converted to those bases
       ŒḂ€         - is palindromic? for €ach
          S        - sum: counts the 1s
           _2      - subtract 2: throw away the truthy unary and base n-1 effect
             ⁼³    - equals input: Does this equal the ORIGINAL n?
Ṅ                  - if so: print n
 ‘                 -        increment n
   ‘               - else: just increment n
                 ß - calls this link as a monad, with the incremented n.

4

Mathematica、80 71バイト

9バイトを節約してくれたJungHwan Minに感謝します!

Do[#!=Length[i~IntegerReverse~Range[2,i-2]~Cases~i]||Echo@i,{i,3,∞}]&

3バイト文字U + 221Eです。)非負整数を入力として受け取る純粋な関数。からまでのすべての底のi~IntegerReverse~Range[2,i-2]数の逆数のリストを作成します。次に、これらの逆転のいくつが再び等しいかを数えます。そのカウントが入力と等しくない場合は黙って停止し、入力と等しい場合はエコーします。その手順は、単純な無限ループに埋め込まれています。i2i-2Length[...~Cases~i]i#!=...||Echo@ii


短絡評価の賢い使い方!Echo@i最初の引数がある場合、用語は評価されませんTrue。これをMathematicaでのゴルフのヒントに追加できますか?
JungHwan Min 2017

ところで、Do[...,{i,3,∞}]より短い(i=2;While[1>0,... ++i ...])、とCasesの代わりに働くだろうPosition。-9バイト:Do[#!=Length[i~IntegerReverse~Range[2,i-2]~Cases~i]||Echo@i,{i,3,∞}]&
JungHwan Min

はい、ヒントを追加してください!
グレッグマーティン

Casesの代わりに使用できPositionます。しかし、私はそのDo構造をテストしましたが、それは私にはうまくいきませんが、なぜそうなのか分かりません。なんらかの理由で、i値がプラグインされません—のようなエラーが発生し"Range specification in Range[2,-2+i] does not have appropriate bounds."ます。(そして、値を割り当てられていないことをPrint[i];検証しiます。)何かアイデアはありますか?
グレッグマーティン

どうやら、そこにU + 200BとU + 200Cは、コードにあった間,及び{(SEのシステムで行うには、おそらく何か)。文字は変数と見なされるため、コードが破損します。私はこれにそれがないことを望みます:Do[#!=Length[i~IntegerReverse~Range[2,i-2]~Cases~i]||Echo@i,{i,3,∞}]& 編集:まだそれがあります。ここにペーストビンのリンクがあります
JungHwan Min

1

Pyth、21 19 18バイト

.V3IqQlf_IjbTr2tbb

これは理論的にはうまくいくはずです。無限ループを任意の有限ループに置き換えた場合(たとえばJQFbr3 50*`bqJlf_IjbTr2tb、3から50までは、ここで試してみてください)、正しく機能しますが、Pythインタープリターは、文字通り無限の出力をいつどのように出力するかわかりません。

説明:

.V3IqQlf_IjbTr2tbb
.V3                     increase b infinitely, starting from 3
             r2Tb       range of integers including 2 to b - 2
      lf                length of elements retained if:
          jbT             b in that base
        _I                is invariant under reversal
    qQ                  check if the length is equivalent to the input
   I             b      output b if so

1

Perl 6、90バイト

->\n{->{$_=++($ //=2);$_ if n==grep {($/=[.polymod($^b xx*)])eq[$/.reverse]},2..$_-2}...*}

それを試してみてください

-> \n {

  # sequence generator
  ->{         # using a code block with no parameter

    $_ =      # set the default scalar to the value being tested
      ++(     # preincrement
        $     # anonymous state variable
        //= 2 # initialized to 2 
      );

    # the anonymous state var maintains its state
    # only for this current sequence
    # every time the outer block gets called it is created anew

    $_    # return the current value
      if  # if the following is true

        n == grep # find all that match the following code

          {
            # convert the current value to the base being tested
            # store as an Array in $/
            ($/ = [ .polymod($^b xx*) ] )

            eq    # is string equal to: (shorter than eqv)

            [ $/.reverse ]
          },

          2 .. $_ - 2 # from the list of bases to test
  }

  ...  # keep using that code block to produce values

  *    # indefinitely
}

1

バッシュ + Unixユーティリティ、134の 132バイト

for((x=3;;x++)){
c=$1
for((b=x-1;--b>1;)){
s=`bc<<<"for(y=$x;y;y/=$b)y%$b"`
t=`tac<<<"$s"`
[ "${s#$t}" ]||((c--))
}
((c))||echo $x
}

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

入力は引数として渡されます。出力はstdoutにあります。

これを正常に実行すると、無限の順序で一度に1つの数値が表示されます。

TIOでこれを試すと、60秒でタイムアウトしたときに生成した出力と同じだけの出力が表示されます。


0

Python 2、132バイト

B=lambda n,b:[]if(n<1)else B(n/b,b)+[n%b]
n=input()
x=3
while 1:
    if sum(B(x,b)==B(x,b)[::-1]for b in range(2,x-1))==n:print x
    x+=1

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

TIOプログラムにはフッターが追加されているため、出力が表示される前にプログラムがタイムアウトするまで1分待つ必要はありません。

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