Pali-n-drome Daftar ini

13

Tantangannya di sini adalah untuk memperluas implementasi palindrome yang diberikan sebagai masukan sebagai berikut:

  • n > 1dan daftar l.

Program Anda harus palindrome daftar baik secara vertikal maupun horizontal, artinya harus terlebih dahulu palindrome daftar itu sendiri, kemudian masing-masing elemen dalam daftar setelah; atau sebaliknya. Sebelum palindromisasi, semua elemen dipastikan memiliki panjang yang sama. Tindakan palindrome kemudian dilakukan nkali secara berurutan sampai output yang diinginkan terpenuhi. Cara termudah untuk menunjukkan hasil yang diharapkan adalah dengan menjalankan beberapa contoh:


Satu iterasi dilakukan pada [123,456,789]:

Pertama, Anda palindromize daftar ke [123,456,789,456,123].

  • Meskipun ini bukan palindrom jika digabungkan, ini adalah palindrom dalam hal daftar.
  • [a,b,c]menjadi [a,b,c,b,a], jadi DAFTAR itu palindromized.

Kemudian, Anda palindromize setiap elemen daftar [12321,45654,78987,45654,12321].

Ini adalah bagaimana setiap iterasi dilakukan, itu pada dasarnya merupakan palindrome omnidirectional.


Diberikan n=1 and l=[123,456,789]:

12321
45654
78987
45654
12321

Diberikan n=2 and l=[123,456,789]

123212321
456545654
789878987
456545654
123212321
456545654
789878987
456545654
123212321

Diberikan n=1 and l=[3,2,1]:

3
2
1
2
3

Diberikan n=2 and l=["hat","mad"," a "]:

hatahatah
madamadam
 a a a a 
madamadam
hatahatah
madamadam
 a a a a 
madamadam
hatahatah

Diberikan n=2 and l=[" 3 ","2000"," 100"]:

 3   3 3   3 
2000002000002
100 00100 001
2000002000002
 3   3 3   3 
2000002000002
100 00100 001
2000002000002
 3   3 3   3 

Diberikan n=4 and l=["3 ","20","1 "]:

3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3

Diberikan n=3 and l=["_|__","__|_","___|"]:

_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_

Diberikan n=2 and l=["---|---","__|","___|","____|"]:

---|-----|-----|-----|---
  __|   |__   __|   |__  
 ___|   |___ ___|   |___ 
 ____| |____ ____| |____ 
 ___|   |___ ___|   |___ 
  __|   |__   __|   |__  
---|-----|-----|-----|---
  __|   |__   __|   |__  
 ___|   |___ ___|   |___ 
 ____| |____ ____| |____ 
 ___|   |___ ___|   |___ 
  __|   |__   __|   |__  
---|-----|-----|-----|---

Aturan

  • n akan selalu lebih besar dari 1.
  • l akan selalu memiliki lebih dari 1 elemen.
  • Semua elemen lmemiliki panjang yang sama.
  • Ini adalah solusi terpendek akan ditandai sebagai pemenang.
Guci Gurita Ajaib
sumber
9
Ini akan menjadi tantangan yang lebih baik jika kita tidak perlu menambahkan elemen.
mbomb007
2
@ Jonathan Allan itu adalah palindrome omnidirectional, atau palindrome 2D bisa Anda katakan. Saya telah memperbarui deskripsi; juga, padding mencegah beberapa kasus pinggiran aneh di mana string yang lebih kecil sudah menjadi palindrome.
Magic Octopus Urn
1
@ Jonathan Allan itu dalam hal daftar, jika Anda melihat LIST sebagai item yang akan palindromized. Sama seperti [@ 1, @ 2, @ 1] juga merupakan palindrom ketika melihatnya sebagai daftar, bukan oleh unsur-unsur ...
Magic Octopus Mm
1
@ Jonathan Allan ya, pada dasarnya, Anda bisa melihatnya seperti itu jika Anda mau.
Magic Octopus Urn
1
Contoh terakhir membutuhkan padding.
Jonathan Allan

Jawaban:

9

05AB1E , 4 byte

Perhatikan bahwa jika hanya satu iterasi yang diperlukan ( n=1), maka program akan menjadi palindrom û€û.

Fû€û

Cobalah online

F       Do n times
 û      Palindromize the list
  €û    Palindromize each element in the list

Jika mengisi input masih merupakan bagian yang diperlukan dari program (11 byte):

€R.B€RIFû€û

Saya tidak bisa menemukan cara yang lebih pendek untuk membenarkan benar. Pembenaran kiri dan pemusatan semua mudah, tetapi ini lebih lama karena beberapa alasan. Menggunakan Eatau ²bukannya Ijuga berfungsi.

mbomb007
sumber
7

Python 2 , 71 63 byte

lambda x,n,f=lambda x:x+x[-2::-1]:eval('f(map(f,'*n+`x`+'))'*n)

Cobalah online!

Tetapkan fungsi palindrome untuk f, menghasilkan dan mengevaluasi pola berikut (untuk n=4)
f(map(f,f(map(f,f(map(f,f(map(f,<input>))))))))

tongkat
sumber
1
Saya pikir maksud Anda menugaskan . Saya tidak menganggap assing adalah kata kerja, lol.
mbomb007
@ mbomb007 welp, saatnya untuk mendapatkan lebih banyak kopi ~
Rod
6

Jelly , 6 byte

ŒḄŒB$¡

Link Dyadic, atau program lengkap yang mengambil daftar dan n.

Cobalah online!

Menggunakan kedua versi "pantulan" built-in Lynn yang fantastis.

ŒḄŒB$¡ - Main link: l, n
     ¡ - repeat n times
    $  -     last two links as a monad (firstly with l then the result...)
ŒḄ     -         bounce ("palindromise") the list
  ŒB   -         bounce the elements
Jonathan Allan
sumber
5

Python 2 , 64 byte

h=lambda a:a+a[-2::-1]
f=lambda a,n:n and f(h(map(h,a)),n-1)or a

Cobalah online!- footer mencetak setiap elemen dari daftar yang dihasilkan, satu per baris, "print cantik".

h adalah fungsi palindomisation, ditambahkan ke input, semua elemen daftar dari yang terakhir kecuali satu, indeks -2, ke awal dalam langkah-langkah ukuran -1.

fpanggilan hdengan hasil panggilan hpada setiap elemen pada gilirannya, berkurang nsatu dan panggilan itu sendiri hingga nmencapai 0, pada titik mana aadalah produk jadi.

Jonathan Allan
sumber
... dan saya masih lupa f=untuk fungsi rekursif, suatu hari saya akan ingat.
Jonathan Allan
2

APL, 15 byte

(Z¨Z←⊢,1↓⌽)⍣⎕⊢⎕

Penjelasan:

  • (... )⍣⎕⊢⎕: baca daftar dan Nsebagai input, dan jalankan Nkali:
    • ⊢,1↓⌽: daftar, diikuti oleh ekor dari daftar terbalik
    • Z←: simpan fungsi ini di Z
    • : dan menerapkannya ke setiap elemen daftar juga

Uji:

          (Z¨Z ← ⊢, 1 ↓ ⌽) ⍣⎕⊢⎕ 
    ⎕:
          'topi' 'gila' 'a'
    ⎕:
          2
    ┌────────┬─────────┬────────┬────────┬───────── ┬───────────────────────────┬─────────┐
    │hatahatah│madamadam│ aaaa │madamadam│hatahatah│madamadam│ aaaa │madamadam│hatahatah│
    └────────┴─────────┴────────┴────────┴───────── ┴───────────────────────────┴─────────┘
marinus
sumber
1

Groovy, 66 byte

{x,n->f={z->z+z[z.size()-2..0]};n.times{x=f(x).collect{f(it)}};x}
Guci Gurita Ajaib
sumber
1

Haskell, 51 byte

x%n=iterate((++)<*>reverse.init)x!!n
x?n=(%n)<$>x%n

Contoh penggunaan: ["123","456","789"] ? 1-> ["12321","45654","78987","45654","12321"]. Cobalah online! .

(++)<*>reverse.initmembuat palindrom dari daftar, iterate(...)xmengulanginya lagi dan lagi dan mengumpulkan hasil antara dalam daftar, !!nmengambil elemen ke-n dari daftar ini. (%n)<$>x%nmembuat n-palindrom dari setiap elemen n-palindrome dari x.

nimi
sumber
1

JavaScript (ES6), 87 byte

f=(n,l,r=l=>[...a].reverse().slice(1))=>n--?f(l.concat(r(l)).map(s=>s+r(s).join``),n):l
Neil
sumber
1

Pip , 25 byte

24 byte kode, +1 untuk -lbendera.

Lq{gM:_.@>RV_gAL:@>RVg}g

Mengambil daftar sebagai argumen baris perintah dan nomor n dari stdin.Cobalah online!

Penjelasan

                          g is list of cmdline args (implicit)
Lq{                   }   Read a line of input and loop that many times:
      _.@>RV_             Lambda function: take all but the first character (@>) of the
                           reverse (RV) of the argument (_), and concatenate that (.) to
                           the argument (_)
   gM:                    Map this function to g and assign the result back to g
                 @>RVg    Take all but the first element of the reverse of g
             gAL:         Append that list to g and assign the result back to g
                       g  After the loop, print g (each item on its own line due to -l)
DLosc
sumber