Pali-n-drome Danh sách này


13

Thách thức ở đây là mở rộng việc triển khai palindrom như sau:

  • n > 1và một danh sách l.

Chương trình của bạn phải palindrom danh sách theo cả chiều dọc và chiều ngang, nghĩa là trước tiên nó phải palindrom danh sách, sau đó từng phần tử trong danh sách sau; Hoặc cách khác xung quanh. Trước khi palindromization, tất cả các yếu tố được đảm bảo có độ dài bằng nhau. Hành động palindrom sau đó sẽ được thực hiện ntheo trình tự cho đến khi đạt được đầu ra mong muốn. Cách dễ nhất để hiển thị các đầu ra dự kiến ​​chỉ là chạy qua một vài ví dụ:


Một lần lặp được thực hiện trên [123,456,789]:

Đầu tiên bạn palindromize danh sách để [123,456,789,456,123].

  • Mặc dù đây không phải là một bảng màu nếu được kết hợp với nhau, nhưng nó là một bảng màu về danh sách.
  • [a,b,c]đã trở thành [a,b,c,b,a], vì vậy DANH SÁCH đã được giảm nhẹ.

Sau đó, bạn palindromize từng yếu tố danh sách [12321,45654,78987,45654,12321].

Đây là cách mỗi lần lặp được thực hiện, về cơ bản nó là một bảng màu đa hướng.


Đưa ra n=1 and l=[123,456,789]:

12321
45654
78987
45654
12321

Được n=2 and l=[123,456,789]

123212321
456545654
789878987
456545654
123212321
456545654
789878987
456545654
123212321

Đưa ra n=1 and l=[3,2,1]:

3
2
1
2
3

Đưa ra n=2 and l=["hat","mad"," a "]:

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

Đưa ra 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 

Đưa ra 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

Đưa ra n=3 and l=["_|__","__|_","___|"]:

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

Đưa ra n=2 and l=["---|---","__|","___|","____|"]:

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

Quy tắc

  • n sẽ luôn luôn lớn hơn 1.
  • l sẽ luôn có nhiều hơn 1 phần tử.
  • Tất cả các yếu tố lcó cùng chiều dài.
  • Đây là giải pháp ngắn nhất về sẽ được đánh dấu là người chiến thắng.

9
Đây sẽ là một thách thức tốt hơn nếu chúng ta không phải đệm các yếu tố.
mbomb007

2
@Jonathan ALLan đó là một palindrom đa hướng, hoặc palindrom 2D mà bạn có thể nói. Tôi đã cập nhật mô tả; Ngoài ra, phần đệm ngăn ngừa một vài trường hợp rìa kỳ lạ trong đó một chuỗi nhỏ hơn đã là một bảng màu.
Bạch tuộc ma thuật Urn

1
@Jonathan ALLan là về mặt danh sách, nếu bạn đang xem LIST là mục cần được palindromized. Giống như [@ 1, @ 2, @ 1] cũng là một bảng màu khi xem nó như một danh sách, không phải bởi các yếu tố ...
Bạch tuộc ma thuật Urn

1
@Jonathan ALLan yeah, về cơ bản, bạn có thể nhìn vào nó như thế nếu bạn muốn.
Bạch tuộc ma thuật Urn

1
Ví dụ cuối cùng yêu cầu đệm.
Jonathan Allan

Câu trả lời:


9

05AB1E , 4 byte

Lưu ý rằng nếu chỉ một lần lặp duy nhất được yêu cầu ( n=1), thì chương trình sẽ là bảng màu û€û.

Fû€û

Dùng thử trực tuyến

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

Nếu đệm, đầu vào vẫn là một phần bắt buộc của chương trình (11 byte):

€R.B€RIFû€û

Tôi không thể tìm thấy một cách ngắn hơn để biện minh đúng. Biện minh trái và trung tâm đều dễ dàng, nhưng điều này lâu hơn vì một số lý do. Sử dụng Ehoặc ²thay vì Icũng hoạt động.


7

Python 2 , 71 63 byte

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

Hãy thử trực tuyến!

Gán một hàm palindrom cho f, tạo và đánh giá mẫu sau (cho n=4)
f(map(f,f(map(f,f(map(f,f(map(f,<input>))))))))


1
Tôi nghĩ bạn có nghĩa là giao . Tôi không nghĩ assing là một động từ, lol.
mbomb007

@ mbomb007 welp, thời gian để có thêm cà phê ~
Rod

6

Thạch , 6 byte

ŒḄŒB$¡

Liên kết Dyadic, hoặc chương trình đầy đủ lấy danh sách và n .

Hãy thử trực tuyến!

Sử dụng cả hai phiên bản "nảy" tích hợp tuyệt vời của Lynn.

ŒḄŒ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

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

Hãy thử trực tuyến! - chân trang in từng yếu tố của danh sách kết quả, mỗi yếu tố trên một dòng, một "bản in đẹp".

h là hàm palindomisation, nó gắn vào đầu vào, tất cả các thành phần của một danh sách từ cuối cùng, nhưng chỉ số -2, đến đầu trong các bước có kích thước -1.

fcác cuộc gọi hvới kết quả hlần lượt gọi từng phần tử, giảm đi nmột và tự gọi cho đến khi nđạt 0, tại thời điểm đó alà thành phẩm.


... và tôi vẫn đang quên các f=hàm đệ quy, một ngày nào đó tôi sẽ nhớ.
Jonathan Allan

2

APL, 15 byte

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

Giải trình:

  • (... )⍣⎕⊢⎕: đọc danh sách và Nlàm đầu vào, và chạyN thời gian :
    • ⊢,1↓⌽: danh sách, theo sau là đuôi của danh sách đảo ngược
    • Z←: lưu trữ chức năng này trong Z
    • : và áp dụng nó cho từng yếu tố của danh sách

Kiểm tra:

          (Z¨Z ←, 1) 
    ⎕:
          'mũ' 'điên' 'a'
    ⎕:
          2
    ┌ ─ ─ ┬ ─ ─ ─
    │hatahatah│madamadam│ aaaa madamadam│hatahatah│madamadam│ aaaa madamadam│hatahatah│
    └ ─ ─ ┴ ─ ─ ─


1

Haskell, 51 byte

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

Ví dụ sử dụng: ["123","456","789"] ? 1-> ["12321","45654","78987","45654","12321"]. Hãy thử trực tuyến! .

(++)<*>reverse.inittạo một bảng màu ra khỏi danh sách, iterate(...)xlặp đi lặp lại điều này và thu thập các kết quả trung gian trong một danh sách, !!nchọn phần tử thứ n của danh sách này. (%n)<$>x%nlàm cho một n-palindrom của mỗi phần tử của n-palindrom của x.


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

1

Pip , 25 byte

24 byte mã, +1 cho -lcờ.

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

Lấy danh sách làm đối số dòng lệnh và số n từ stdin. Hãy thử trực tuyến!

Giải trình

                          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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.