Nomor non-palindromik

16

Sebuah nomor ketat non-palindromic N adalah angka yang bukan merupakan palindrom di setiap basis (dalam basis 2 untuk N-2). Angka-angka ini terdaftar di OEIS

Sebagai contoh, jumlah 19dalam basis 2,3,4,5,6, ... 17 adalah: 10011, 201, 103, 34, 31, ... 12. Tidak satupun dari representasi ini adalah palindromik, sehingga jumlahnya sangat non-palindromik.

Untuk tantangan ini, Anda harus mengembalikan nilai kebenaran jika angka tersebut non-palindromik, jika tidak nilai palsu .

  • Anda dapat menganggap angka yang diberikan kepada Anda lebih besar atau sama dengan 0.
  • Program Anda harus bekerja untuk nilai hingga ukuran bilangan bulat bahasa Anda.

Kasus uji:

Benar:

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

Falsy:

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

Ini adalah , jadi buat jawaban Anda sesingkat mungkin!

Nathan Merrill
sumber
2
Ya, saya melewatkan itu. Namun, jawaban untuk tantangan ini pada dasarnya dapat digunakan kembali dengan menambahkan tanda result < n-2centang kepada mereka, saya pikir.
FryAmTheEggman

Jawaban:

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;}

Ide itu!

Penjelasan

Kode ini terbalik ndi pangkalanb dan disimpan di r:

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

Lingkaran luar menghitung jumlah basis dari 2 ke n-1di mana nadalah palindrom.

Jika nnon-palindromik, hitungannya harus 1( nharus palindrom pada dasarnya n-1).

bocor Nun
sumber
Punya upvote karena saya tidak bisa memilih jawaban SILOS dua kali
Rohan Jhunjhunwala
3
@RohanJhunjhunwala Alasan terbaik untuk mengungguli.
Leaky Nun
@ LeakyNun Tapi sedikit pemungutan suara serial ...
Erik the 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

Output adalah melalui kode keluar , di mana 0 benar dan 1 palsu. Uji di Ideone .

Dennis
sumber
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

Cobalah online!

Pelabuhan jawaban saya di C .

bocor Nun
sumber
Punya dua suara upvotes satu untuk setiap jawaban, karena saya tidak bisa membenarkan ini dua kali
Rohan Jhunjhunwala
pheraps jika Anda dapat menulis kode menggunakan satu pernyataan pemisahan sebagai "|" Anda dapat mengambil keuntungan dalam menulis 1 karakter bukannya 2 karakter \ 13 \ 10 sebagai \ pemisahan sebagai pernyataan
RosLuP
@RosLuP Apakah saya menggunakan \ r \ n seperti \ n sekarang?
Leaky Nun
saya tidak tahu di sys Anda, tetapi saya menyalin program di atas dalam notepad, daripada menyimpannya: panjang file itu adalah 241 bukan 206. jadi di sini tampaknya bagi saya bahwa \ n adalah 2 karakter bukan 1
RosLuP
@RosLuP Notepad Anda secara otomatis mengonversi EOL ke \ 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]
Damien
sumber
3

Jelly , 9 byte

bRµ⁼"US<3

Cobalah online! atau verifikasi semua kasus uji .

Bagaimana itu bekerja

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.
Dennis
sumber
+1 untuk <3.
Leaky Nun
2

Mathematica, 58 43 byte

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

TIL yang #~IntegerReverse~imembalikkan digit input ketika ditulis dalam basis i.

Greg Martin
sumber
2

Pyth, 12 10 byte

Disimpan dua byte dengan trik Dennis.

>3sm_IjQdS

Cobalah online!

Penjelasan:

         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
Steven H.
sumber
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>

Neil
sumber
1

Perl6, 110 72 65

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

Tidak dapat menggunakan basis karena itu rusak untuk basis apa pun di atas 36.

Upaya sebelumnya

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)}
bb94
sumber
Saya berhasil menurunkannya menjadi 59 byte dengan percobaan pertama saya. Jangan gunakan .polymoddengan daftar pembagi yang tak terbatas. 1362.polymod: 226 xx *
Brad Gilbert b2gills
Buat itu 53, dan petunjuk lain {...}dan -> $_ {...}hampir persis sama. Anda juga tidak perlu menyimpan lambda di mana saja sehingga Anda dapat menghapusnya my &f =.
Brad Gilbert b2gills
1

Brachylog , 14 byte

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

Cobalah online!

Keluaran melalui keberhasilan atau kegagalan predikat, yang mencetak true.atau false.jika dijalankan sebagai program.

¬{           }    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.
String yang tidak terkait
sumber
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);}

latihan rekursif ... saya mengubah (b + 2> = n) dengan (b + 3> n) tanpa melakukan debug ...

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
*/
RosLuP
sumber
1
Jangan merusak posting Anda.
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;}
RosLuP
sumber
0

PHP, 68 byte

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

mengambil input dari STDIN, keluar dengan 1untuk falsy, 0untuk truey. Jalankan dengan -R.

Titus
sumber
Jika saya melihat ini dengan benar, Anda hanya dapat menyelesaikan n <39
Jörg Hülsermann
0

APL (NARS), karakter 47, byte 94

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

di mana {(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}akan menjadi konversi fungsi omega positif dalam digit basis angka alpha, dan {⍵≡⌽⍵}akan menjadi fungsi periksa palindrome ... test:

  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 
RosLuP
sumber