Wyzwaniem jest tutaj rozszerzenie implementacji palindromu, biorąc pod uwagę następujące dane wejściowe:
n > 1
i listęl
.
Twój program musi palindromować listę zarówno pionowo, jak i poziomo, to znaczy najpierw musi palindromować samą listę, a następnie każdy element na liście; Albo na odwrót. Przed palindromizacją wszystkie elementy mają równą długość. Działanie palindromu należy następnie wykonywać n
kolejno, aż do uzyskania pożądanego wyniku. Najłatwiejszym sposobem wyświetlenia oczekiwanych wyników jest po prostu kilka przykładów:
Jedna iteracja wykonana dla [123,456,789]
:
Najpierw palindromize listę do [123,456,789,456,123]
.
- Chociaż nie jest to palindrom, jeśli jest ze sobą połączony, jest palindromem pod względem listy.
[a,b,c]
stał się[a,b,c,b,a]
, więc LISTA była palindromizowana.
Następnie palindromalizujesz każdy element listy [12321,45654,78987,45654,12321]
.
W ten sposób wykonywana jest każda iteracja, jest to zasadniczo palindrom dookólny.
Biorąc pod uwagę n=1 and l=[123,456,789]
:
12321
45654
78987
45654
12321
Dany n=2 and l=[123,456,789]
123212321
456545654
789878987
456545654
123212321
456545654
789878987
456545654
123212321
Biorąc pod uwagę n=1 and l=[3,2,1]
:
3
2
1
2
3
Biorąc pod uwagę n=2 and l=["hat","mad"," a "]
:
hatahatah
madamadam
a a a a
madamadam
hatahatah
madamadam
a a a a
madamadam
hatahatah
Biorąc pod uwagę 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
Biorąc pod uwagę 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
Biorąc pod uwagę n=3 and l=["_|__","__|_","___|"]
:
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
Biorąc pod uwagę n=2 and l=["---|---","__|","___|","____|"]
:
---|-----|-----|-----|---
__| |__ __| |__
___| |___ ___| |___
____| |____ ____| |____
___| |___ ___| |___
__| |__ __| |__
---|-----|-----|-----|---
__| |__ __| |__
___| |___ ___| |___
____| |____ ____| |____
___| |___ ___| |___
__| |__ __| |__
---|-----|-----|-----|---
Zasady
n
zawsze będzie większy niż 1.l
zawsze będzie mieć więcej niż 1 element.- Wszystkie elementy
l
są tej samej długości. - To jest najkrótsze rozwiązanie do gry w golfa oznaczone jako zwycięzca.
Odpowiedzi:
05AB1E , 4 bajty
Zauważ, że gdyby wymagana była tylko jedna iteracja (
n=1
), wówczas program byłby palindromemû€û
.Wypróbuj online
Jeśli wypełnienie było nadal wymaganą częścią programu (11 bajtów):
Nie mogłem znaleźć krótszego sposobu uzasadnienia. Lewe justowanie i centrowanie były łatwe, ale z jakiegoś powodu było to dłuższe. Używanie
E
lub²
zamiastI
działa również.źródło
Python 2 ,
7163 bajtówWypróbuj online!
Przypisz funkcję palindromu do
f
, wygeneruj i oceń następujący wzorzec (dlan=4
)f(map(f,f(map(f,f(map(f,f(map(f,<input>))))))))
źródło
Galaretka , 6 bajtów
Dyadic link lub pełny program z listą i
n
.Wypróbuj online!
Używanie obu wersji fantastycznego wbudowanego „bounce” Lynn.
źródło
Python 2 , 64 bajty
Wypróbuj online! - stopka wypisuje każdy element wynikowej listy, po jednym w wierszu, „ładny wydruk”.
h
jest funkcją palindomizacji, dołącza do danych wejściowych wszystkie elementy listy od przedostatniego indeksu -2 do początku w krokach wielkości -1.f
wywołańh
z wynikiem wywoływania kolejnoh
każdego elementu, zmniejsza sięn
o jeden i wywołuje się, ażn
osiągnie 0, w któryma
to momencie jest gotowy produkt.źródło
f=
o funkcjach rekurencyjnych, któregoś dnia zapamiętam.APL, 15 bajtów
Wyjaśnienie:
(
...)⍣⎕⊢⎕
: odczytaj listę iN
dane wejściowe orazN
czasy działania:⊢,1↓⌽
: lista, po której następuje ogon odwróconej listyZ←
: zapisz tę funkcję wZ
Z¨
: i zastosuj go również do każdego elementu listyTest:
źródło
Groovy, 66 bajtów
źródło
Haskell, 51 bajtów
Przykład użycia:
["123","456","789"] ? 1
->["12321","45654","78987","45654","12321"]
. Wypróbuj online! .(++)<*>reverse.init
tworzy palindrom z listy,iterate(...)x
powtarza to wielokrotnie i zbiera wyniki pośrednie z listy,!!n
wybiera n-ty element tej listy.(%n)<$>x%n
tworzy n-palindrom każdego elementu n-palindromu zx
.źródło
JavaScript (ES6), 87 bajtów
źródło
Pip , 25 bajtów
24 bajty kodu, +1 dla
-l
flagi.Pobiera listę jako argumenty wiersza poleceń i liczbę n od standardowego wejścia. Wypróbuj online!
Wyjaśnienie
źródło