Palindrom Prefixless


8

Tulis sebuah program atau fungsi yang membutuhkan N , dan S dan hasilkan jumlah palindrom dengan panjang S yang dapat Anda bangun menggunakan alfabet ukuran N sehingga awalan ukuran antara 2 dan S-1 bukanlah palindrom.

Misalnya jika N adalah 2 dan S adalah 5

Palindrom yang valid adalah

01110
10001

Dan dengan demikian jawabannya adalah 2

Ini adalah sehingga jawaban akan dinilai dalam byte berdasarkan panjangnya dengan lebih sedikit byte yang lebih baik.


2
Selamat datang di PPCG! Terlepas dari format singkatnya, ini tampak seperti tantangan yang valid - asalkan itu bukan dupe atau pertanyaan yang diambil di tempat lain tanpa izin. Paling tidak, Anda perlu menambahkan kriteria kemenangan utama yang objektif seperti kode-golf . Saya akan merekomendasikan untuk menambahkan beberapa contoh dan menguji kasus juga.
Arnauld

@Arnauld Mungkin bagi kami untuk mengubah pertanyaan di luar topik menjadi tantangan yang valid (ais523 melakukan itu untuk beberapa kali) tetapi dalam kasus itu jelas bukan yang diinginkan OP. Lagipula tidak akan sakit.
user202729

hasilnya tidak terbatas? untuk N> = 2: 01111111111111111111111111..0adalah palindrom sehingga awalan apa pun bukan palindrom
Nahuel Fouilleul

@NahuelFouilleul dari panjang S.
user202729

1
@ user77149 Jika Anda bertanya di sini, Anda akan mendapatkan jawaban seperti "Jelly, 15 byte: Coba online! "
user202729

Jawaban:



1

Pyth , 16 byte

lf!tit_IM._T2^SE

Coba di sini!

Jawaban saya setuju dengan hasil Dennis , daripada jawaban Haskell dan Python.

Bagaimana itu bekerja

Jika! tit_IM._T2 ^ SE | Program lengkap.

              SE | Ambil input kedua (E), buat rentang bilangan bulat dari 1 ... E.
             ^ | Dan ambil Q Cartesian Power, di mana Q adalah input pertama.
 f | Saring berdasarkan kondisi yang menggunakan T sebagai variabel.
         ._T | Ambil semua awalan T ...
      _IM | Dan untuk setiap awalan, periksa apakah mereka tidak berubah dibandingkan pembalikan.
     t | Ambil ekornya (lepaskan elemen pertama).
    saya 2 | Konversi dari basis 2 ke integer.
  ! t | Pengurangan, negasikan. Perhatikan bahwa di antara bilangan bulat, hanya 0 yang salah.
aku | Ambil panjang daftar yang difilter.

1

Sekam , 19 byte

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

Cobalah online atau lihat solusinya!

Penjelasan

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

0

Bersih , 129 byte

import StdEnv,StdLib
?l=l==reverse l
@n s=sum[1\\p<-iter s(\a=[[e:b]\\e<-[1..n],b<-a])[[]]|and[?p:[not(?q)\\q<-inits p%(2,s-1)]]]

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.