Liczby niepalindromiczne

16

Liczba bezwzględnie nie palindromowe N jest liczbą, która jest palindrom w każdej stacji bazowej (w bazach 2-N-2). Numery te są wymienione w OEIS

Na przykład, numer 19w bazie 2,3,4,5,6, ... 17: 10011, 201, 103, 34, 31, ... 12. Żadna z tych reprezentacji nie jest palindromiczna, więc liczba jest ściśle niepalindromiczna.

W przypadku tego wyzwania musisz zwrócić prawdziwą wartość, jeśli liczba nie jest palindromiczna, w przeciwnym razie jest to wartość fałszywa .

  • Możesz założyć, że przekazana ci liczba jest większa lub równa 0.
  • Twój program powinien działać dla wartości do całkowitej liczby języków w Twoim języku.

Przypadki testowe:

Prawda:

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

To jest gra w , więc udziel odpowiedzi tak krótko, jak to możliwe!

Nathan Merrill
źródło
2
Tak, tęskniłem za tym. Jednak odpowiedzi na to wyzwanie można zasadniczo wykorzystać, dodając result < n-2do nich czek.
FryAmTheEggman

Odpowiedzi:

6

C, 82 bajty

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

Ideone to!

Wyjaśnienie

Ten kod odwraca się nw bazie bi przechowuje w r:

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

Zewnętrzna pętla liczy liczbę zasad od 2do, n-1w których nznajduje się palindrom.

Jeśli nnie jest palindromiczny, liczba będzie wynosić 1( nmusi być palindromem w podstawie n-1).

Leaky Nun
źródło
Mam głos, ponieważ nie mogłem dwukrotnie głosować na odpowiedź SILOS
Rohan Jhunjhunwala
3
@RohanJhunjhunwala Najlepszy powód, aby głosować kiedykolwiek.
Leaky Nun
@LeakyNun Ale trochę głosowania seryjnego ...
Erik the Outgolfer
5

Python 2, 71 bajtów

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

Wyjście odbywa się za pomocą kodu wyjścia , gdzie 0 to prawda, a 1 to fałsz. Przetestuj na Ideone .

Dennis
źródło
5

SILOS , 206 bajtów

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

Wypróbuj online!

Port moją odpowiedź w C .

Leaky Nun
źródło
Mam dwie głosy poparcia po jednej dla każdej odpowiedzi, ponieważ nie mogę głosować za tym dwukrotnie
Rohan Jhunjhunwala
ferher, jeśli możesz napisać kod za pomocą jednej instrukcji separacji jako „|” możesz skorzystać, pisząc 1 znak zamiast 2 znaków \ ​​13 \ 10 jako \ n jako oświadczenie o separacji
RosLuP
@RosLuP Czy używam teraz \ r \ n jako \ n?
Leaky Nun
nie wiem w twoim systemie, ale kopiuję powyższy program do notatnika, niż go zapisuję: długość tego pliku to 241, a nie 206. więc tutaj wydaje mi się, że \ n to 2 znaki, a nie 1
RosLuP
@RosLuP Twój notatnik automatycznie przekonwertował EOL na \ r \ n.
Leaky Nun
4

Haskell, 75 68 bajtów

(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
źródło
3

Galaretka , 9 bajtów

bRµ⁼"US<3

Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .

Jak to działa

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
źródło
+1 za <3.
Leaky Nun
2

Mathematica, 58 43 bajtów

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

TIL, który #~IntegerReverse~iodwraca cyfry wejścia, gdy są zapisane w bazie i.

Greg Martin
źródło
2

Pyth, 12 10 bajtów

Oszczędność dwóch bajtów dzięki trikowi Dennisa.

>3sm_IjQdS

Wypróbuj online!

Wyjaśnienie:

         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.
źródło
1

JavaScript (ES6), 83 bajty

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
źródło
1

Perl6, 110 72 65

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

Nie można użyć bazy, ponieważ jest zepsuta dla dowolnej bazy powyżej 36.

Poprzednie próby

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
źródło
Za pierwszym razem udało mi się sprowadzić go do 59 bajtów. Wskazówka użycia .polymodz nieskończoną listą dzielników. 1362.polymod: 226 xx *
Brad Gilbert b2gills
Zrób to 53 i kolejną wskazówkę {...}i -> $_ {...}są prawie dokładnie takie same. Ponadto nie musisz nigdzie przechowywać lambda, abyś mógł ją usunąć my &f =.
Brad Gilbert b2gills
1

Brachylog , 14 bajtów

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

Wypróbuj online!

Wyprowadza przez sukces lub niepowodzenie predykatu, który drukuje true.lub false.działa jako 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.
Niepowiązany ciąg
źródło
0

C, 77 bajtów

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

ćwiczenie rekurencyjne ... zmieniam (b + 2> = n) z (b + 3> n) bez debugowania ...

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
źródło
1
Nie niszcz swoich postów.
DJMcMayhem
0

C, 129 bajtów

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
źródło
0

PHP, 68 bajtów

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

pobiera dane wejściowe ze STDIN, wychodzi z 1dla falsy, 0dla prawdy. Uruchom z -R.

Tytus
źródło
Jeśli widzę to prawo, możesz rozwiązać tylko n <39
Jörg Hülsermann
0

APL (NARS), znaki 47, bajty 94

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

gdzie {(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}byłaby konwersja funkcji jedna dodatnia omega w liczbach alfa podstawa liczbowa, a {⍵≡⌽⍵}byłaby funkcja sprawdzania palindromu ... 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
źródło