Palíndromos sin prefijo


8

Escriba un programa o función que tome N y S y genere el número de palíndromos de longitud S que puede construir utilizando un alfabeto de tamaño N de manera que cualquier prefijo de tamaño entre 2 y S-1 no sea un palíndromo.

Por ejemplo, si N fuera 2 y S fuera 5

Los palíndromos válidos serían

01110
10001

Y así la respuesta sería 2

Este es un por lo que las respuestas se puntuarán en bytes en función de su longitud, siendo mejores menos bytes.


2
Bienvenido a PPCG! A pesar de su formato lacónico, esto parece un desafío válido, siempre que no sea un engaño ni una pregunta elegida en otro lugar sin permiso. Como mínimo, deberá agregar un criterio objetivo primario ganador , como el código golf . Recomiendo agregar algunos ejemplos y casos de prueba también.
Arnauld

@Arnauld Es posible que cambiemos una pregunta fuera del tema a un desafío válido (ais523 lo hizo varias veces), pero en ese caso obviamente no es lo que quiere el OP. No dolerá de todos modos.
usuario202729

el resultado no es infinito? para N> = 2: 01111111111111111111111111..0es un palíndromo tal que cualquier prefijo no es un palíndromo
Nahuel Fouilleul

@NahuelFouilleul de longitud S.
usuario202729

1
@ user77149 Si lo pregunta aquí, obtendrá respuestas como "Jelly, 15 bytes: ¡ Pruébelo en línea! "
user202729

Respuestas:



1

Pyth , 16 bytes

lf!tit_IM._T2^SE

Pruébalo aquí!

Mi respuesta está de acuerdo con los resultados de Dennis , en lugar de las respuestas de Haskell y Python.

Cómo funciona

lf! tit_IM._T2 ^ SE | Programa completo

              SE | Tome la segunda entrada (E), haga un rango entero de 1 ... E.
             ^ | Y tome el Qth Cartesian Power, donde Q es la primera entrada.
 f | Filtre por una condición que use T como variable.
         ._T | Toma todos los prefijos de T ...
      _IM | Y para cada prefijo, verifique si son invariantes sobre la inversión.
     t | Toma la cola (quita el primer elemento).
    i 2 | Convierte de base 2 a entero.
  ! t | Decremento, negar. Tenga en cuenta que entre los enteros, solo 0 es falso.
l | Tome la longitud de la lista filtrada.

1

Casco , 19 bytes

Lf(=1ḋ↔mS=↔‼hU¡h)πŀ

¡Pruébelo en línea o vea las soluciones!

Explicación

Lf(=1ḋ↔mS=↔‼hU¡h)πŀ  -- takes two arguments N S, example: 2 4
                  ŀ  -- range [0..N-1]: [0,1]
                 π   -- all strings of length S: [[[0,0,0,0],[0,0,0,1],…,[1,1,1,1]]
 f(             )    -- filter with the following predicate (example with [0,1,1,0]):
              ¡h     --   infinitely times take the head & accumulate in list: [[0,1,1,0],[0,1,1],[0,1],[0],[],[],…
             U       --   only keep longest prefix with unique elements: [[0,1,1,0],[0,1,1],[0,1],[0],[]]
           ‼h        --   get rid of last two (apply twice head): [[0,1,1,0],[0,1,1],[0,1]]
       m             --   map the following
        S=           --     is itself equal to..
          ↔          --     .. itself reversed?
                     --   ↳ [1,0,0]
      ↔              --   reverse: [0,0,1]
     ḋ               --   convert from binary: 1
   =1                --   is it equal to 1: 1
                     -- ↳ [[1,0,0,1],[0,1,1,0]]
L                    -- length: 2

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.