Pendulum Encoding
Python 3, 29 bytes
lambda l:l[1::2][::-1]+l[::2]
Try it online!
Input: A sequence
Output: The pendulum encoding of that sequence
How
Consider the sequence [0,1,2,3,4,5]
, whose pendulum encoding is [5,3,1,0,2,4]
. We can see that all even indices ended up in order on the right, and all odd indices are in reversed order on the left.
l[1::2][::-1]
takes all odd indices and reverses them, e.g[5,3,1]
l[::2]
takes all even indices, e.g[0,2,4]
brainfuck, 24 21 18 bytes
,[[<],[>],<]>>[.>]
Try it online!
Thanks to Jo King for -3 bytes
,[ while input
[<], add new character to start of memory
[>], add new character to end of memory
< go one back, so the loop will run another time, moving the pointer to the start of memory
]
>>[.>] print memory
APL (Dyalog Unicode), 11 bytes
I promised you'll see at least one interesting answer :)
{⍵[⍋-\⍳≢⍵]}
Try it online!
Uses my own tip about -\⍳
, specifically the ⍋
variation, to generate the permutation needed for this challenge.
How it works
⍋-\⍳≢⍵
generates the target permutation for both even- and odd-length arrays:
⍋-\⍳≢⍵ ⍝ Length-7 vector | Length-8 vector
≢ ⍝ Length
⍝ 7 | 8
⍳ ⍝ Range (1..n)
⍝ 1 2 3 4 5 6 7 | 1 2 3 4 5 6 7 8
-\ ⍝ Cumulative alternating difference
⍝ 1 -1 2 -2 3 -3 4 | 1 -1 2 -2 3 -3 4 -4
⍋ ⍝ Grade up; permutation that will sort the input array
⍝ 6 4 2 1 3 5 7 | 8 6 4 2 1 3 5 7
Then ⍵[...]
arranges the original elements in that particular order.