Số không palindromic


16

Một số đúng không xuôi ngược N là một con số đó không phải là một palindrome trong bất kỳ cơ sở (trong các căn cứ từ 2 đến N-2). Những con số này được liệt kê trên OEIS

Ví dụ, số lượng 19trong cơ sở 2,3,4,5,6, ... 17 là: 10011, 201, 103, 34, 31, ... 12. Không có đại diện nào trong số này là palindromic, vì vậy con số này hoàn toàn không phải là palindromic.

Đối với thử thách này, bạn cần trả về một giá trị trung thực nếu số đó không phải là palindromic, nếu không là giá trị giả .

  • Bạn có thể giả sử số được chuyển cho bạn lớn hơn hoặc bằng 0.
  • Chương trình của bạn sẽ hoạt động cho các giá trị lên đến kích thước nguyên của ngôn ngữ của bạn.

Các trường hợp thử nghiệm:

Sự thật:

0
1
2
3
4
6
11
19
47
53
79
103
389
997
1459

Giả mạo:

5
7
8
9
10
13
16
43
48
61
62
101
113
211
1361

Đây là một , vì vậy hãy đưa ra câu trả lời của bạn càng ngắn càng tốt!


2
Vâng, tôi đã bỏ lỡ điều đó. Tuy nhiên, câu trả lời cho thách thức này về cơ bản có thể được sử dụng lại bằng cách thêm một result < n-2kiểm tra cho họ, tôi nghĩ vậy.
FryAmTheEggman

Câu trả lời:


6

C, 82 byte

p(n,a,b,c,r){c=0;for(b=1;++b<n-2;c+=r==n)for(a=n,r=0;a>0;a/=b)r=r*b+a%b;return!c;}

Nghĩa là nó!

Giải trình

Mã này đảo ngược ntrong cơ sở bvà lưu trữ trong r:

for(a=n,r=0;a>0;a/=b)r=r*b+a%b;

Vòng lặp bên ngoài đếm số lượng cơ sở từ 2đến n-1trong đó nlà một bảng màu.

Nếu nkhông phải là palindromic, số lượng sẽ là 1( nphải là một palindrom trong cơ sở n-1).


Có một upvote vì tôi không thể upvote câu trả lời SILOS hai lần
Rohan Jhunjhunwala

3
@RohanJhunjhunwala Lý do tốt nhất để nâng cao hơn bao giờ hết.
Leaky Nun

@LeakyNun Nhưng một chút biểu quyết nối tiếp ...
Erik các Outgolfer

5

Python 2, 71 byte

n=input();b=1
while b<n-2:
 m=n;r=0;b+=1
 while m/(r!=n):r=r*b+m%b;m/=b

Đầu ra là thông qua mã thoát , trong đó 0 là trung thực và 1 là sai. Kiểm tra nó trên Ideone .


5

Silos , 206 byte

GOTO e
lbld
c - 1
GOTO c
lble
readIO 
n = i
i - 3
b = i
b + 1
GOTO f
lbla
a = n
r = 0
lblb
m = a
m % b
r * b
r + m
a / b
if a b
r - n
r |
if r d
lblc
c + 1
i - 1
b - 1
lblf
if i a
c / c
c - 1
c |
printInt c

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

Cảng câu trả lời của tôi trong C .


Có hai câu trả lời cho mỗi câu trả lời, vì tôi không thể nâng cao câu trả lời này hai lần
Rohan Jhunjhunwala

pheraps nếu bạn có thể viết mã bằng cách sử dụng một câu lệnh phân tách là "|" bạn có thể tận dụng lợi thế khi viết 1 char thay vì 2 char của \ 13 \ 10 như \ n như tuyên bố tách
RosLuP

@RosLuP Bây giờ tôi có đang sử dụng \ r \ n như \ n không?
Nữ tu bị rò rỉ

Tôi không biết trong hệ thống của bạn, nhưng tôi sao chép chương trình trên vào một sổ ghi chú, hơn là lưu nó: chiều dài của tệp đó là 241 chứ không phải 206. vì vậy ở đây có vẻ như tôi là 2 ký tự không phải là 1
RosLuP

@RosLuP Sổ ghi chép của bạn tự động chuyển đổi EOL thành \ r \ n.
Leaky Nun

4

Haskell, 75 68 byte

(a!c)b|a<1=c|x<-c*b+mod a b=div a b!x$b
f n=all((/=n).(n!0))[2..n-2]

3

Thạch , 9 byte

bRµ⁼"US<3

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm .

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

bRµ⁼"US<3  Main link. Argument: n

 R         Range; yield [1, ..., n].
b          Convert n to all bases between 1 and n, yielding a 2D array A>
  µ        Begin a new, monadic chain. Argument: A
     U     Upend; reverse the 1D arrays in A.
   ⁼"      Zipwith equal; yield 1 for each array that matches its inverse.
      S    Sum; add the resulting Booleans.
           If n > 1, the sum will be 2 if n is strictly non-palindromic (it is only
           a palindrome in bases 1 and n - 1), and greater than 2 otherwise.
           For 0 and 1, the sum will be 0 (sum of the empty array) and 1 (only a
           palindrome in base 1); both are less than 2.
       <3  Compare the sum with 3, yielding the desired Boolean.


2

Toán học, 58 43 byte

!Or@@Table[#==#~IntegerReverse~i,{i,2,#-2}]&

TIL #~IntegerReverse~iđảo ngược các chữ số của đầu vào khi được viết trong cơ sở i.


2

Bình thường, 12 10 byte

Đã lưu hai byte với thủ thuật của Dennis.

>3sm_IjQdS

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

Giải trình:

         S (Q)   Get all the bases we need by building a list from 1 to Q
   m               For all bases d in the bases list:
      jQd           cast Q to base d as a list
    _I              and check to see if the list is palindromic (invariant on reversal)
                  Compile all the results back into a list
  s                Sum the results (a shorter form of any), gives 3 or more for palindromics 
                    (2 is the usual because of bases 1 and Q-1)
>3                 And verify that the sum is greater than three to get non-palindromics

1

JavaScript (ES6), 83 byte

f=(n,i=n-2,g=n=>n<i?[n]:[...g(n/i|0),n%i])=>i<2||`${a=g(n)}`!=a.reverse()&&f(n,i-1)
<input type=number oninput=o.textContent=f(this.value);><pre id=o>


1

Perl6, 110 72 65

my &f={?all(map {{.reverse ne$_}(@(.polymod: $^a xx*))},2..$_-2)}

Không thể sử dụng cơ sở vì nó bị hỏng cho bất kỳ cơ sở nào trên 36.

Những nỗ lực trước đây

my &a={$^a??flat($a%$^b,a($a div$b,$b))!!()};my &f=-> $n {?all(map {.reverse ne$_ given @(a($n,$_))},2..$n-2)}
my &f=->\n {?all(map {.reverse ne$_ given @(n.polymod: $_ xx*)},2..n-2)}

Tôi đã cố gắng giảm xuống còn 59 byte với lần thử đầu tiên. Gợi ý sử dụng .polymodvới một danh sách vô hạn của ước. 1362.polymod: 226 xx *
Brad Gilbert b2gills

Thực hiện điều đó 53, và một gợi ý khác {...}-> $_ {...}gần như giống hệt nhau. Ngoài ra, bạn không phải lưu trữ lambda ở bất cứ đâu để bạn có thể loại bỏ my &f =.
Brad Gilbert b2gills

1

Brachylog , 14 byte

¬{⟦₆bk∋;?ḃ₍.↔}

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

Đầu ra thông qua thành công hoặc thất bại, mà in true.hoặc false.nếu chạy như một chương trình.

¬{           }    It cannot be shown that
        ?         the input
       ; ḃ₍       in a base
      ∋           which is an element of
  ⟦₆              the range from 1 to the input - 1
    b             without its first element
     k            or its last element
           .      can be unified with both the output variable
            ↔     and its reverse.

0

C, 77 byte

h(n,b,k,z){for(z=0,k=n;z+=k%b,k/=b;z*=b);return b+3>n?1:z==n?0:h(n,++b,0,0);}

bài tập đệ quy ... tôi thay đổi (b + 2> = n) với (b + 3> n) không gỡ lỗi ...

main()
{int  v[]={0,1,2,3, 4, 6,11,19,47,53,79,103,389,997,1459},
  n[]={5,7,8,9,10,13,16,43,48,61,62,101,113,211,1361}, m;
    // 0 1 2 3  4  5  6  7  8  9 10  11  12  13   14
 for(m=0; m<15; ++m)
    printf("%u=%u\n", v[m], h(v[m],2,0,0));
 for(m=0; m<15; ++m)
    printf("%u=%u\n", n[m], h(n[m],2,0,0));
}

/*
 77
 0=1
 1=1
 2=1
 3=1
 4=1
 6=1
 11=1
 19=1
 47=1
 53=1
 79=1
 103=1
 389=1
 997=1
 1459=1
 5=0
 7=0
 8=0
 9=0
 10=0
 13=0
 16=0
 43=0
 48=0
 61=0
 62=0
 101=0
 113=0
 211=0
 1361=0
*/

1
Đừng phá hoại bài viết của bạn.
DJMcMayhem

0

C, 129 byte

f(n,b,k,j){int a[99];for(b=2;b+2<n;++b){for(j=0,k=n;a[j]=k%b,k/=b;++j);for(;k<j&&a[k]==a[j];++k,--j);if(k>=j)return 0;}return 1;}

0

PHP, 68 byte

for($b=$argn;--$b;)strrev($c=base_convert($argn,10,$b))!=$c?:die(1);

lấy đầu vào từ STDIN, thoát ra 1cho giả, 0cho sự thật. Chạy với -R.


Nếu tôi thấy điều này đúng, bạn chỉ có thể giải quyết n <39
Jörg Hülsermann

0

APL (NARS), ký tự 47, byte 94

{⍵≤4:1⋄∼∨/{⍵≡⌽⍵}¨{⍵{(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}w}¨2..¯2+w←⍵}

trong đó {(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}sẽ là chuyển đổi chức năng một omega dương trong số chữ số cơ sở alpha, và {⍵≡⌽⍵}sẽ là chức năng kiểm tra palindrom ... kiểm tra:

  f←{⍵≤4:1⋄∼∨/{⍵≡⌽⍵}¨{⍵{(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}w}¨2..¯2+w←⍵}
  f¨0 1 2 3 4 6 11 19 47 53 79 103 389 997 1459
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
  f¨5 7 8 9 10 13 16 43 48 61 62 101 113 211 1361
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
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.