Nichtpalindrome Zahlen


16

Eine streng nicht-palindromische Zahl N ist eine Zahl, die in keiner Basis ein Palindrom ist (in den Basen 2 bis N-2). Diese Nummern sind im OEIS aufgeführt

Zum Beispiel ist die Zahl 19in der Basis 2,3,4,5,6, ... 17: 10011, 201, 103,34 , 31, ... 12. Keine dieser Darstellungen ist palindrom, daher ist die Zahl streng genommen nicht palindrom.

Für diese Herausforderung müssen Sie einen Wahrheitswert zurückgeben, wenn die Zahl nicht palindromisch ist, andernfalls einen falschen Wert .

  • Sie können davon ausgehen, dass die an Sie übergebene Zahl größer oder gleich 0 ist.
  • Ihr Programm sollte für Werte bis zur ganzzahligen Größe Ihrer Sprachen funktionieren.

Testfälle:

Wahrheit:

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

Falsch:

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

Dies ist ein , also machen Sie Ihre Antworten so kurz wie möglich!


2
Ja, das habe ich verpasst. Die Antworten auf diese Herausforderung könnten jedoch im Grunde genommen wiederverwendet werden, indem ein result < n-2Häkchen hinzugefügt wird , denke ich.
FryAmTheEggman

Antworten:


6

C 82 Bytes

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 es!

Erläuterung

Dieser Code kehrt nin der Basis um bund speichert in r:

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

Die äußere Schleife zählt die Anzahl der Basen von 2bis, n-1in denen nsich ein Palindrom befindet.

Wenn nes sich nicht um ein Palindrom handelt, ist die Anzahl 1( nmuss ein Palindrom in der Basis sein n-1).


Habe eine positive Bewertung abgegeben, da ich die SILOS-Antwort nicht zweimal positiv bewerten konnte
Rohan Jhunjhunwala,

3
@RohanJhunjhunwala Bester Grund, jemals zu werben.
Undichte Nonne

@LeakyNun Aber ein bisschen Serienwahl ...
Erik the Outgolfer

5

Python 2, 71 Bytes

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

Die Ausgabe erfolgt über den Exit-Code , wobei 0 wahr und 1 falsch ist. Teste es auf Ideone .


5

SILOS , 206 Bytes

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

Probieren Sie es online!

Port of meine Antwort in C .


Haben Sie zwei Upvotes eine für jede Antwort, weil ich dies nicht zweimal upvoten kann
Rohan Jhunjhunwala

pheraps, wenn Sie den Code mit einer Trennungsanweisung als "|" schreiben können Sie können den Vorteil nutzen, indem Sie 1 Zeichen anstelle von 2 Zeichen von \ 13 \ 10 als \ n als Trennungsanweisung
schreiben

@RosLuP Benutze ich jetzt \ r \ n als \ n?
Undichte Nonne

Ich weiß es nicht in Ihrem System, aber ich kopiere das obige Programm in einen Notizblock, als es zu speichern: Die Länge dieser Datei ist 241 nicht 206.
Daher

@RosLuP Ihr Notizblock konvertierte EOLs automatisch nach \ r \ n.
Undichte Nonne

4

Haskell, 75 68 Bytes

(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

Gelee , 9 Bytes

bRµ⁼"US<3

Probieren Sie es online! oder überprüfen Sie alle Testfälle .

Wie es funktioniert

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.

+1 für die <3.
Undichte Nonne

2

Mathematica, 58 43 Bytes

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

TIL, #~IntegerReverse~idas die Ziffern der Eingabe umkehrt, wenn es in Basis i geschrieben wird.


2

Pyth, 12 10 Bytes

Mit Dennis 'Trick zwei Bytes gespart.

>3sm_IjQdS

Probieren Sie es online!

Erläuterung:

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

Basis konnte nicht verwendet werden, da diese für eine Basis über 36 defekt ist.

Bisherige Versuche

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

Beim ersten Versuch habe ich es auf 59 Bytes geschafft. Tipp Verwenden Sie .polymodmit einer unendlichen Liste von Teilern. 1362.polymod: 226 xx *
Brad Gilbert b2gills

Machen Sie das 53 und einen anderen Hinweis {...}und -> $_ {...}sind fast genau das gleiche. Sie müssen das Lambda auch nirgendwo aufbewahren, damit Sie es entfernen können my &f =.
Brad Gilbert b2gills

1

Brachylog , 14 Bytes

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

Probieren Sie es online!

Ausgaben durch Erfolg oder Misserfolg von Prädikaten, die gedruckt true.oder false.als Programm ausgeführt werden.

¬{           }    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 Bytes

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

rekursive Übung ... ich ändere (b + 2> = n) mit (b + 3> n) ohne Fehlerbehebung ...

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
Zerstöre deine Beiträge nicht.
DJMcMayhem

0

C 129 Bytes

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 Bytes

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

Nimmt Eingaben von STDIN, geht mit 1für falsch, 0für wahr. Laufen Sie mit -R.


Wenn ich das richtig sehe, kannst du nur n <39 lösen
Jörg Hülsermann

0

APL (NARS), Zeichen 47, Bytes 94

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

Wo {(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}wäre die Funktionsumwandlung ein positives Omega in Zahlenbasis Alpha, und wo {⍵≡⌽⍵}wäre die Funktionsprüfung Palindrom ... 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 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.