N个碱基中的回文数


10

给定一个非负整数n >= 0,请永远输出x_i >= 3以完全n不同b的底数为回文数的整数序列,底数可以是2 <= b <= x_i-2

这基本上是OEIS A126071的反函数,在此输出中该序列中的哪些索引具有值n。有点不同,因为我更改了它,所以您忽略了碱基b = 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,您将获得此挑战的输出(从处开始3),因为您得到的数字都是以n=0碱基为基础的回文数。

对于n=15是在基地中的回文,这是它在2其中的唯一2 <= b <= (5-2)回文。7在基地中2,是回文,并且是在其中,是回文唯一的基2 <= b <= (7-2)


如果您的语言不支持无限输出,则可以使用另一个整数z作为输入并输出z序列的第一个元素,或输出所有小于的元素z。无论您喜欢哪个。如果是这种情况,请说明您在答案中使用了哪个。

有关


为了100%清晰,输出的数字必须是完全以n碱基为基础的回文,而不是以n多个碱基为基础?
Mike Bufardeci

1
是。那是正确的。因此,的所有值的所有序列的n并集是整数的集合>=3
mbomb007'3

Answers:


2

果冻,18 字节

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

在线尝试!-在线解释器将在60秒后超时,然后刷新其输出(除非它具有缓存的副本),而在离线时它将依次打印每个输出。

怎么样?

n上开始评估数字,如果数字在序列中,则将其打印出来。请注意,任何输出中的第一个数字都将大于,n因为否则范围的范围将b不够大,因此无需使用来播种该过程3。还要注意,从2x i -2(包括2)的回文数仅比从1x的回文数少两个。

Ṅ‘µ‘µ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字节

感谢JungHwan Min节省了9个字节!

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

是三字节字符U + 221E。)纯函数,以非负整数作为输入。i~IntegerReverse~Range[2,i-2]创建一个i所有从2到的底数反转的列表i-2。然后Length[...~Cases~i]计算这些冲销i又等于多少。#!=...||Echo@i如果该计数不等于输入,则默默地暂停;如果等于输入,i则回显。该过程嵌入在一个简单的无限循环中。


巧妙运用短路评估Echo@i当第一个参数为时,不评估该术语True。我可以将其添加到Mathematica打高尔夫球的技巧吗?
JungHwan Min

顺便说一句,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

是的,请添加提示!-很奇怪,它还没有出现,因为我肯定是从某个地方的网站上学到的....
Greg Martin

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,∞}]& 编辑:仍然有它。这是一个pastebin链接
JungHwan Min 3'4'17

1

Pyth,21 19 18字节

.V3IqQlf_IjbTr2tbb

这在理论上应该起作用。如果我将无限循环替换为任何有限循环(例如JQFbr3 50*`bqJlf_IjbTr2tb3到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

Bash + Unix实用程序,134132字节

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上。

如果正常运行,它将以无限顺序一次显示一个数字。

如果在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分钟即可使程序超时,然后再查看输出。

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.