Задача здесь состоит в том, чтобы расширить реализацию палиндрома, учитывая следующее в качестве входных данных:
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
имеют одинаковую длину. - Это код-гольф, кратчайшее решение будет помечено как победитель.
Ответы:
05AB1E , 4 байта
Обратите внимание, что если требуется только одна итерация (
n=1
), то программа будет палиндромомû€û
.Попробуйте онлайн
Если заполнение входных данных все еще было обязательной частью программы (11 байт):
Я не мог найти более короткий путь, чтобы оправдаться. Выравнивание по левому краю и центрирование были простыми, но по некоторым причинам это было дольше. Использование
E
или²
вместоI
также работает.источник
Python 2 ,
7163 байтаПопробуйте онлайн!
Назначьте функцию палиндрома
f
, сгенерируйте и оцените следующий шаблон (дляn=4
)f(map(f,f(map(f,f(map(f,f(map(f,<input>))))))))
источник
Желе , 6 байт
Дядильная ссылка или полная программа, берущая список и
n
.Попробуйте онлайн!
Использование обеих версий фантастического встроенного «отказов» Линн.
источник
Python 2 , 64 байта
Попробуйте онлайн! - нижний колонтитул печатает каждый из элементов результирующего списка, по одному на строку, «симпатичная печать».
h
является функцией палиндомизации, она добавляет к входу все элементы списка от последнего, кроме одного, с индексом -2, до начала шагами размера -1.f
количество вызововh
с результатом вызоваh
каждого элемента поочередно уменьшаетсяn
на единицу и вызывает себя до тех пор, пока неn
достигнет 0, после чегоa
конечный продукт будет готов.источник
f=
для рекурсивных функций, однажды я буду помнить.APL, 15 байт
Объяснение:
(
...)⍣⎕⊢⎕
: читать список иN
как ввод, иN
время выполнения:⊢,1↓⌽
: список, за которым следует хвост обратного спискаZ←
: сохранить эту функцию вZ
Z¨
: и применить его к каждому элементу спискаТестовое задание:
источник
Groovy, 66 байт
источник
Haskell, 51 байт
Пример использования:
["123","456","789"] ? 1
->["12321","45654","78987","45654","12321"]
. Попробуйте онлайн! ,(++)<*>reverse.init
делает палиндром из списка,iterate(...)x
повторяет это снова и снова и собирает промежуточные результаты в список,!!n
выбирает n-й элемент этого списка.(%n)<$>x%n
делает n-палиндром каждого элемента из n-палиндромаx
.источник
JavaScript (ES6), 87 байт
источник
Пип , 25 байт
24 байта кода, +1 для
-l
флага.Принимает список в качестве аргументов командной строки и число n из стандартного ввода. Попробуйте онлайн!
объяснение
источник