Pali-n-drome цей Список


13

Завдання тут полягає в тому, щоб розширити реалізацію паліндрому, враховуючи наступне:

  • n > 1і список l.

Ваша програма повинна паліндромізувати список як вертикально, так і горизонтально, тобто спочатку повинна бути паліндромерована сам список, а потім кожен елемент у списку після; або навпаки. Перед паліндромізацією всі елементи забезпечують рівну довжину. Дію на паліндром слід виконувати періодично nпослідовно, поки бажаний вихід не буде досягнутий. Найпростіший спосіб показати очікувані результати - це просто провести декілька прикладів:


Одна ітерація виконується на [123,456,789]:

Спочатку ви підключите список до [123,456,789,456,123].

  • Хоча це не паліндром, якщо їх з'єднати разом, це паліндром з точки зору списку.
  • [a,b,c]став [a,b,c,b,a], тому СПИСОК був паліндромізований.

Потім ви підказуєте кожен елемент списку [12321,45654,78987,45654,12321].

Ось так виконується кожна ітерація, це по суті всенаправлений паліндром.


Подано n=1 and l=[123,456,789]:

12321
45654
78987
45654
12321

Дано n=2 and l=[123,456,789]

123212321
456545654
789878987
456545654
123212321
456545654
789878987
456545654
123212321

Подано n=1 and l=[3,2,1]:

3
2
1
2
3

Подано n=2 and l=["hat","mad"," a "]:

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

Подано 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 

Подано 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

Подано n=3 and l=["_|__","__|_","___|"]:

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

Подано n=2 and l=["---|---","__|","___|","____|"]:

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

Правила

  • n завжди буде більше 1.
  • l завжди матиме більше 1 елемента.
  • Усі елементи lоднакової довжини.
  • Це найкоротше рішення з буде позначено як переможець.

9
Це було б кращим завданням, якби нам не довелося прокладати елементи.
mbomb007

2
@JonathanAllan це всенаправлений паліндром, або 2D паліндром, можна сказати. Я оновив опис; Крім того, прокладка запобігає нечисленні випадкові бахроми, коли менша струна вже є паліндром.
Чарівний восьминога Урна

1
@JonathanAllan це з точки зору списку, якщо ви дивитесь на СПИСОК як на предмет, що підлягає паліндромізації. Так само, як [@ 1, @ 2, @ 1] також є паліндром, коли дивишся на це як на список, а не на елементи ...
Magic Octopus Urn

1
@JonathanAllan Так, по суті, ви можете дивитися на це так, якщо хочете.
Чарівний восьминога Урна

1
Останній приклад вимагає прокладки.
Джонатан Аллан

Відповіді:


9

05AB1E , 4 байти

Зауважте, що якби потрібна була лише одна ітерація ( n=1), тоді програма була б паліндром û€û.

Fû€û

Спробуйте в Інтернеті

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

Якщо введення даних все ще залишалося необхідною частиною програми (11 байт):

€R.B€RIFû€û

Я не зміг знайти коротший спосіб правильно виправдати. Виправдання та центрирування зліва вийшло легко, але це чомусь було довше. Використання Eабо ²замість Iтакож працює.


7

Python 2 , 71 63 байт

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

Спробуйте в Інтернеті!

Призначте функцію паліндром f, генеруйте та оцінюйте наступну схему (для n=4)
f(map(f,f(map(f,f(map(f,f(map(f,<input>))))))))


1
Я думаю, ти маєш на увазі призначити . Я не думаю, що assing - це дієслово, lol.
mbomb007

@ mbomb007 приємно, час, щоб отримати більше кави ~
Rod

6

Желе , 6 байт

ŒḄŒB$¡

Діадичне посилання або повна програма, що приймає список та n .

Спробуйте в Інтернеті!

Використання обох версій фантастичного вбудованого "відскоку" Лінни.

ŒḄŒ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 байти

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

Спробуйте в Інтернеті! - колонтитул друкує кожен з елементів списку, що виходить, по одному на рядок, "симпатичним друком".

h є функцією паліндомізації, вона додає до вводу всі елементи списку з останнього, але одного, індексу -2, до початку кроками розміром -1.

fдзвінки hз результатом виклику hкожного елемента по черзі, зменшуються nна одиницю і дзвонять собі, поки не nдосягне 0, в цей момент a- готовий продукт.


... і я все ще забуваю про f=рекурсивні функції, одного дня я згадаю.
Джонатан Аллан

2

APL, 15 байт

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

Пояснення:

  • (... )⍣⎕⊢⎕: читати список і Nяк вхід, і час виконання N:
    • ⊢,1↓⌽: список, а потім хвіст перевернутого списку
    • Z←: зберігати цю функцію в Z
    • : і застосувати його до кожного елемента списку

Тест:

          (Z¨Z ← ⊢, 1 ↓ ⌽) ⍣⎕⊢⎕ 
    ⎕:
          'капелюх' божевільний '' а '
    ⎕:
          2
    ┌───────────────────────────────────────────────────── ┬───────────────────────────────────────────
    │hatahatah│madamadam│ aaaa │madamadam│hatahatah│madamadam│ aaaa │madamadam│hatahatah│
    └───────────────────────────────────────────────────── ┴───────────────────────────────────────────


1

Haskell, 51 байт

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

Приклад використання: ["123","456","789"] ? 1-> ["12321","45654","78987","45654","12321"]. Спробуйте в Інтернеті! .

(++)<*>reverse.initробить паліндром зі списку, iterate(...)xповторює це знову і знову і збирає проміжні результати у списку, !!nвибирає n-й елемент цього списку. (%n)<$>x%nскладає n-паліндром кожного елемента n-паліндром x.


1

JavaScript (ES6), 87 байт

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

1

Піп , 25 байт

24 байти коду, +1 для -lпрапора.

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

Приймає список як аргументи командного рядка і число n від stdin. Спробуйте в Інтернеті!

Пояснення

                          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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.