Números no palindrómicos

16

Un número N estrictamente no palindrómico es un número que no es un palíndromo en ninguna base (en las bases 2 a N-2). Estos números están listados en OEIS

Por ejemplo, el número 19de la base de 2,3,4,5,6, ... 17 es: 10011, 201, 103, 34, 31, ... 12. Ninguna de estas representaciones es palindrómica, por lo que el número es estrictamente no palindrómico.

Para este desafío, debe devolver un valor verdadero si el número no es palindrómico, de lo contrario, un valor falso .

  • Puede suponer que el número que le pasó es mayor o igual a 0.
  • Su programa debería funcionar para valores hasta el tamaño entero de sus idiomas.

Casos de prueba:

Verdad:

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

Este es un , ¡así que haga sus respuestas lo más breve posible!

Nathan Merrill
fuente
2
Sí, me perdí eso. Sin embargo, las respuestas a este desafío podrían reutilizarse básicamente agregándoles un result < n-2cheque, creo.
FryAmTheEggman

Respuestas:

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

Explicación

Este código se invierte nen la base by se almacena en r:

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

El bucle exterior cuenta el número de bases de 2a n-1en el que nes un palíndromo.

Si nno es palindrómico, el recuento sería 1( ndebe ser un palíndromo en la base n-1).

Monja permeable
fuente
Tener una votación positiva porque no pude votar la respuesta SILOS dos veces
Rohan Jhunjhunwala
3
@RohanJhunjhunwala La mejor razón para votar.
Leaky Nun
@LeakyNun Pero un poco de votación en serie ...
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

La salida es a través del código de salida , donde 0 es verdadero y 1 es falso. Pruébalo en Ideone .

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

Pruébalo en línea!

Puerto de mi respuesta en C .

Monja permeable
fuente
Tengo dos votos a favor, uno por cada respuesta, porque no puedo votar esto dos veces
Rohan Jhunjhunwala
pheraps si puede escribir el código usando una declaración de separación como "|" puede aprovechar escribir 1 carácter en lugar de 2 caracteres de \ 13 \ 10 como \ n como declaración de separación
RosLuP
@RosLuP ¿Estoy usando \ r \ n como \ n ahora?
Leaky Nun
no sé en su sistema, pero copio el programa anterior en un bloc de notas, que lo guardo: la longitud de ese archivo es 241 no 206. así que aquí me parece que \ n es 2 caracteres no 1
RosLuP
@RosLuP Su bloc de notas convirtió automáticamente EOL a \ r \ n.
Leaky Nun
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]
Damien
fuente
3

Jalea , 9 bytes

bRµ⁼"US<3

Pruébalo en línea! o verificar todos los casos de prueba .

Cómo funciona

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
fuente
+1 para el <3.
Leaky Nun
2

Mathematica, 58 43 bytes

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

TIL que #~IntegerReverse~iinvierte los dígitos de la entrada cuando se escribe en la base i.

Greg Martin
fuente
2

Pyth, 12 10 bytes

Guardado dos bytes con el truco de Dennis.

>3sm_IjQdS

Pruébalo en línea!

Explicación:

         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.
fuente
1

JavaScript (ES6), 83 bytes

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
fuente
1

Perl6, 110 72 65

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

No se pudo usar la base ya que está rota para cualquier base superior a 36.

Intentos anteriores

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
fuente
Logré reducirlo a 59 bytes con mi primer intento. Sugerencia de uso .polymodcon una lista infinita de divisores. 1362.polymod: 226 xx *
Brad Gilbert b2gills
Haga que 53, y otra pista {...}y -> $_ {...}sean casi exactamente lo mismo. Además, no tiene que almacenar la lambda en ningún lugar para poder quitarla my &f =.
Brad Gilbert b2gills
1

Brachylog , 14 bytes

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

Pruébalo en línea!

Salidas a través del predicado de éxito o falla, que se imprime true.o se false.ejecuta como un programa.

¬{           }    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.
Cadena no relacionada
fuente
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);}

ejercicio recursivo ... cambio (b + 2> = n) con (b + 3> n) sin depuración ...

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
fuente
1
No destroces tus publicaciones.
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;}
RosLuP
fuente
0

PHP, 68 bytes

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

toma información de STDIN, sale con 1for falsey, 0para verdad. Corre con -R.

Titus
fuente
Si veo esto bien, solo puedes resolver n <39
Jörg Hülsermann el
0

APL (NARS), caracteres 47, bytes 94

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

donde {(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}sería la conversión de función un omega positivo en dígitos base alfa número, y {⍵≡⌽⍵}sería la función comprobar palíndromo ... prueba:

  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
fuente