Tất cả các palindromic cơ sở của bạn thuộc về chúng tôi


20

Tạo sốn thứ tự của các cơ sở trong đó là một bảng màu ( OEIS A126071 ).

Cụ thể, chuỗi được định nghĩa như sau: đưa ra một số n, biểu thị nó trong cơ sở acho a = 1,2, ..., nvà đếm xem có bao nhiêu trong số các biểu thức đó là palindromic. "Palindromic" được hiểu theo nghĩa đảo ngược các achữ số cơ bản của biểu thức dưới dạng đơn vị nguyên tử (cảm ơn, @Martin Büttner ). Ví dụ, xem xét n= 5:

  • a=1: biểu thức là 11111: palindromic
  • a=2: biểu thức là 101: palindromic
  • a=3: biểu thức là 12: không palindromic
  • a=4: biểu thức là 11: palindromic
  • a=5: biểu thức là 10: không palindromic

Do đó, kết quả cho n=53. Lưu ý rằng OEIS sử dụng các cơ sở 2, ..., n+1thay vì 1, ..., n(cảm ơn, @beaker ). Nó tương đương, bởi vì các biểu thức trong cơ sở 1n+1luôn luôn là palindromic.

Các giá trị đầu tiên của chuỗi là

 1, 1, 2, 2, 3, 2, 3, 3, 3, 4, 2, 3, 3, 3, 4, 4, 4, 4, 2, 4, 5, ...

Đầu vào là một số nguyên dương n. Đầu ra là đầu tiênn điều khoản của chuỗi.

Về mặt lý thuyết, chương trình sẽ hoạt động (được cung cấp đủ thời gian và bộ nhớ) cho bất kỳ ngiới hạn nào gây ra bởi loại dữ liệu mặc định của bạn trong bất kỳ tính toán nội bộ nào.

Tất cả các chức năng được phép. Số byte thấp nhất sẽ thắng.



1
Nếu nó hữu ích cho bất cứ ai, thì đáng chú ý rằng một số n cũng luôn luôn là palindromic trong cơ sở n-1.
Computronium

Đây là A126071
Tít

Câu trả lời:


9

Bình thường, 13 byte

mlf_ITjLdSdSQ

Sự ngắn gọn của điều này chủ yếu là do Ilệnh " Invariant" có giá trị.

msf_ITjLdSdSQ       implicit: Q=input
m         d         map lambda d over
           SQ       Inclusive range 1 to Q
      jLdSd         Convert d to all the bases between 1 and d
  f                  filter lambda T:
   _IT                 is invariant under reverse
 l                  number that are invariant under reverse

Nếu Truelà một đầu ra chấp nhận được cho 1,msm_IjdkSdSQ (12 byte) hoạt động.

Hãy thử nó ở đây .


2
Xem đề xuất của FryAmTheEggman để sử dụng _I#chứ không phải f_IT(Tôi không chắc chắn 100% nó có sẵn, nhưng dường nhưđã có ).
Jonathan Allan

7

Thạch, 14 byte

bR‘$µ=UP€S
RÇ€

Hãy thử trực tuyến!

Phiên bản không cạnh tranh

Trình thông dịch Jelly có một lỗi khiến việc chuyển đổi thành unary là không thể. Điều này đã được sửa bây giờ, vì vậy đoạn mã sau ( 12 byte ) cũng hoàn thành nhiệm vụ trong tay.

bRµ=UP€S
RÇ€

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

bR‘$µ=UP€S  Helper link. Argument: z

 R‘$        Apply range and increment, i.e., map z to [2, ..., z + 1].
            In the non-competing version R simply maps z to [1, ... z].
b           Convert z to each of the bases to the right.
    µ       Begin a new, monadic chain. Argument: base conversions
     =U     Compare the digits of each base with the reversed digits.
            = has depth 0, so [1,2,3]=[1,3,3] yields [1,0,1].
       P€   Take the product of the innermost arrays.
         S  Sum all resulting Booleans.


RÇ€         Main link. Argument: n

R           Yield [1, ..., n].
 ǀ         Apply the helper link to each.

4

TOÁN , 19 20 byte

:"0@XK:Q"K@:YAtP=A+

Công dụng bản phát hành hiện tại (10.1.0) , sớm hơn thử thách này.

Dùng thử trực tuyến !

Giải trình

:            % vector [1,2,...,N], where "N" is implicit input
"            % for each number in that vector
  0          % push 0
  @          % push number 1,2,...N corresponding to current iteration, say "n" 
  XK         % copy n to clipboard
  :Q         % vector [2,3,...,n+1]
  "          % for each number "m" in that vector
    K        % push n
    @:       % vector [1,2,...,m]
    YA       % express n in base m with symbols 1,2,...,m
    tP       % duplicate and permute
    =A       % 1 if all entries are equal (palindrome), 0 otherwise
    +        % add that number
             % implicitly close the two loops and display stack contents


1

Haskell, 88 byte

a!b|a<b=[a]|1>0=mod a b:(div a b)!b
f n=[1+sum[1|x<-[2..y],y!x==reverse(y!x)]|y<-[1..n]]

1

ES6, 149 byte

n=>[...Array(n)].map((_,i)=>[...Array(i)].reduce((c,_,j)=>c+(''+(a=q(i+1,j+2,[]))==''+a.reverse()),1),q=(n,b,d)=>n<b?[n,...d]:q(n/b|0,b,[n%b,...d]))

Hoạt động cho các căn cứ> 36 quá.


1

JavaScript (ES6), 105 95 byte

f=(n,b)=>b?b<2?1:f(n,b-1)+([...s=n.toString(b)].reverse().join``==s):n<2?[1]:[...f(n-1),f(n,n)]

Giải trình

Lấy một số từ 1 đến 36 (giới hạn chuyển đổi cơ sở trong JavaScript) và trả về một mảng của chuỗi.

Hàm đệ quy kiểm tra palindromes khi một cơ sở được thông qua, khác trả về chuỗi nếu chỉ nđược thông qua.

f=(n,b)=>

  // Base palindrome checking
  b?
    b<3?1:                 // return 1 for base-1, since toString(2)
    f(n,b-1)+(             // return the sum of all lower bases and check  this
      [...s=n.toString(b)] // s = n in base b
      .reverse().join``==s // add 1 if it is a palindrome
    )

  // Sequence generation
  :
    n<2?[1]:               // return 1 for the first value of the sequence
    [...f(n-1),f(n,n)]     // return the value for n after the previous values

Kiểm tra

var solution = f=(n,b)=>b?b<2?1:f(n,b-1)+([...s=n.toString(b)].reverse().join``==s):n<2?[1]:[...f(n-1),f(n,n)]
<input type="number" oninput="result.textContent=solution(+this.value)" />
<pre id="result"></pre>


Có cách nào để biến điều đó thành một hàm đệ quy không? Tôi cảm thấy như thế có thể tiết kiệm một số byte.
Mama Fun Roll

@ Bạn nói đúng. Cảm ơn vì tiền hỗ trợ.
dùng81655


1

PHP, 73 + 1 byte

while(++$i<$argn)$c+=strrev($n=base_convert($argn,10,$i+1))==$n;echo$c+1;

làm việc cho các căn cứ 1để 36. Chạy như ống với -nRhoặc thử trực tuyến .


1

PHP, 92 + 1 byte:

for($b=$c=1;$b++<$n=$argn;$c+=$a==array_reverse($a))for($a=[];~~$n;$n/=$b)$a[]=$n%$b;echo$c;

làm việc cho tất cả các cơ sở. Chạy như ống với -nRhoặc thử trực tuyến .


1

Python 2, 97 byte

c=1;n=int(input())
for b in range(2,n):
	a=[];z=n
	while z:a+=[z%b];z//=b
	c+=a[::-1]==a
print c

Bài viết Python đầu tiên của tôi, thực sự là mã Python đầu tiên của tôi
có thể có một số tiềm năng chơi gôn.

Hãy thử trực tuyến!


1

> <>, 197 + 2 byte

+2 cho cờ -v

:1+0v    ;n\
1\  \$:@2(?/
:<~$/?)}:{:*}}@:{{
\   \~0${:}
>$:@1(?\::4[:&r&r]:$&@@&%:&@&$@-$,5[1+{]$~{{:@}}$@,$
~~1 \  \
?\~0>$:@2(?\$1-:@3+[}]4[}1-]=
 \  /@@r/!?/
r@+1/)0:<
  /?/$-1$~<
~$/       \-1

tio.run dường như không trả lại bất kỳ đầu ra nào cho n> 1, nhưng bạn có thể xác minh nó trên https: //fishl Language.com . Đầu vào đi vào hộp "Ngăn xếp ban đầu".


1

Japt , 10 byte

õ_õ!ìZ èêS

Thử nó


Giải trình

õ              :Range [1,input]
 _             :Map each Z
  õ            :  Range [1,Z] (let's call each X)
   !ìZ         :   Convert Z to a base X digit array
       è       :  Count
        êS     :   Palindromes

1
õ_õ hahaha biểu tượng cảm xúc đẹp
Luis felipe De jesus Munoz

1

Python 2 , 85 byte

def f(a):b,c=2,0;exec'd,m=[],a\nwhile m:d+=[m%b];m/=b\nc+=d[::-1]==d;b+=1;'*a;print c

Hãy thử trực tuyến!

Yêu cầu một số nguyên làm đối số.

Giải trình:

# named function
def f(a):
    # initialize variable to track base (b) and to track palindromes (c)
    b,c=2,0
        # construct code
        '
        # initialize variable to store remainders (m) and to track divisor (d)
        m,d=[],a
        # while d is not zero,
        # add the current remainder to the array
        # and divide d by the base and assign the result back to d
        while d:m+=[m%b];d/=b
        # False == 0 and True == 1, so add 1 to total if m == reversed(m)
        c+=m[::-1]==m;
        # increment base
        # terminate with ; so that next statement can be executed separately
        b+=1;
        '
    # execute constructed statement (a) times
    exec'....................................................'*a
    # print result
    print c
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.