Nombres non palindromiques

16

Un nombre N strictement non palindromique est un nombre qui n'est un palindrome dans aucune base (dans les bases 2 à N-2). Ces numéros sont répertoriés sur OEIS

Par exemple, le nombre 19dans la base 2,3,4,5,6 ... 17 est: 10011, 201, 103, 34, 31, ... 12. Aucune de ces représentations n'est palindromique, donc le nombre est strictement non palindromique.

Pour ce défi, vous devez renvoyer une valeur véridique si le nombre n'est pas palindromique, sinon une valeur falsifiée .

  • Vous pouvez supposer que le nombre qui vous est transmis est supérieur ou égal à 0.
  • Votre programme devrait fonctionner pour des valeurs allant jusqu'à la taille entière de vos langues.

Cas de test:

Vérité:

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

Faux:

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

Ceci est un , alors faites vos réponses aussi courtes que possible!

Nathan Merrill
la source
2
Oui, j'ai raté ça. Cependant, les réponses à ce défi pourraient essentiellement être réutilisées en y ajoutant un result < n-2chèque, je pense.
FryAmTheEggman

Réponses:

6

C, 82 octets

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

Explication

Ce code s'inverse nen base bet se stocke dans r:

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

La boucle externe compte le nombre de bases de 2à n-1dans lesquelles se ntrouve un palindrome.

S'il nn'est pas palindromique, le compte serait 1( ndoit être un palindrome de base n-1).

Leaky Nun
la source
Avoir un vote positif parce que je n'ai pas pu voter deux fois sur la réponse SILOS
Rohan Jhunjhunwala
3
@RohanJhunjhunwala La meilleure raison de voter toujours.
Leaky Nun
@LeakyNun Mais un peu de vote en série ...
Erik the Outgolfer
5

Python 2, 71 octets

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

La sortie se fait via un code de sortie , où 0 est vrai et 1 est faux. Testez-le sur Ideone .

Dennis
la source
5

SILOS , 206 octets

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

Essayez-le en ligne!

Port de ma réponse en C .

Leaky Nun
la source
Avoir deux votes positifs un pour chaque réponse, parce que je ne peux pas voter positivement deux fois
Rohan Jhunjhunwala
pheraps si vous pouvez écrire le code en utilisant une instruction de séparation comme "|" vous pouvez tirer avantage d'écrire 1 caractère au lieu de 2 caractères de \ 13 \ 10 en tant que \ n comme instruction de séparation
RosLuP
@RosLuP Suis-je en train d'utiliser \ r \ n en tant que \ n?
Leaky Nun
Je ne sais pas dans votre système, mais je copie le programme ci-dessus dans un bloc-notes, puis enregistrez-le: la longueur de ce fichier est 241 et non 206. Il me semble donc ici que \ n est 2 caractères et non 1
RosLuP
@RosLuP Votre bloc-notes a automatiquement converti les EOL en \ r \ n.
Leaky Nun
4

Haskell, 75 68 octets

(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
la source
3

Gelée , 9 octets

bRµ⁼"US<3

Essayez-le en ligne! ou vérifiez tous les cas de test .

Comment ça fonctionne

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
la source
+1 pour le <3.
Leaky Nun
2

Mathematica, 58 43 octets

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

TIL qui #~IntegerReverse~iinverse les chiffres de l'entrée lorsqu'elle est écrite en base i.

Greg Martin
la source
2

Pyth, 12 10 octets

Sauvegardé deux octets avec l'astuce de Dennis.

>3sm_IjQdS

Essayez-le en ligne!

Explication:

         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.
la source
1

JavaScript (ES6), 83 octets

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
la source
1

Perl6, 110 72 65

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

Impossible d'utiliser la base car elle est rompue pour toute base supérieure à 36.

Tentatives précédentes

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
la source
J'ai réussi à le réduire à 59 octets lors de mon premier essai. Conseil d'utilisation .polymodavec une liste infinie de diviseurs. 1362.polymod: 226 xx *
Brad Gilbert b2gills
Faites que 53, et un autre indice {...}et -> $_ {...}sont presque exactement les mêmes. De plus, vous n'avez pas besoin de stocker le lambda n'importe où, vous pouvez donc le retirer my &f =.
Brad Gilbert b2gills
1

Brachylog , 14 octets

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

Essayez-le en ligne!

Sorties par succès ou échec de prédicat, qui s'imprime true.ou false.s'il est exécuté en tant que programme.

¬{           }    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.
Chaîne indépendante
la source
0

C, 77 octets

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

exercice récursif ... je change (b + 2> = n) avec (b + 3> n) sans débogage ...

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
la source
1
Ne vandalisez pas vos messages.
DJMcMayhem
0

C, 129 octets

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
la source
0

PHP, 68 octets

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

prend l'entrée de STDIN, sort avec 1pour la fausse, 0pour la vérité. Courez avec -R.

Titus
la source
Si je vois bien, vous ne pouvez résoudre que n <39
Jörg Hülsermann
0

APL (NARS), caractères 47, octets 94

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

{(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}serait la fonction de conversion d'un oméga positif en chiffres de base alpha, et {⍵≡⌽⍵}serait le palindrome de vérification de fonction ... 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
la source