Translate a Glypho program Given an input of any valid Glypho program,
output its "human-readable" counterpart.

Glypho is an interesting esolang idea:


  The instruction reference is given here. For each instruction, the characters
  abcd represent the symbols composing each instruction. a refers to the first
  unique symbol, b refers to the second unique symbol, etc.

aaaa ..... n NOP - no operation; do nothing
aaab ..... i Input - push input onto top of stack
aaba ..... &gt; Rot - pops top stack element and pushes to bottom of stack
aabb ..... \ Swap - swaps top two stack elements
aabc ..... 1 Push - pushes a 1 onto the top of stack (creates new element)
abaa ..... &lt; RRot - pops bottom element and pushes to top of stack
abab ..... d Dup - Duplicates top stack element
abac ..... + Add - pops top two elements and pushes their sum
abba ..... [ L-brace - skip to matching ] if top stack element is 0
abbb ..... o Output - pops and outputs top stack element
abbc ..... * Multiply - pops top two elements and pushes their product
abca ..... e Execute - Pops four elements and interprets them as an instruction
abcb ..... - Negate - pops value from stack, pushes -(value)
abcc ..... ! Pop - pops and discards top stack element
abcd ..... ] R-brace - skip back to matching [

  
  (credit: Brian Thompson aka
  Wildhalcyon)


So, for example, PPCG would represent the Push instruction—PPCG matches
the pattern aabc, where a represents P, b represents C, and c
represents G.

The input will be a single string consisting of only printable ASCII
characters. It will always have a length divisible by four (duh).

The output is each group of four characters in the input string replaced by
which instruction they designate. Use the single-letter instruction names (the
ones right after the five dots in the table quoted above).

Since this is code-golf, the shortest code in bytes will win.

Test cases:

In                                Out
------------------------------------------------
Programming Puzzles &amp; Code Golof  ]!]!]]]+
nananananananana batman!          dddd]]
;;;;;;;:;;:;;;::                  ni&gt;\
llamas sleep                      1-*
8488133190003453                  &lt;[oe
&lt;empty string&gt;                    &lt;empty string&gt;
Pyth, 37 35 34 bytes
The code contains unprintable characters, so here is the xxd hexdump:
0000000: 5663 7a34 7040 2e22 216f d78c 40bf d4f0  Vcz4p@.&quot;!o..@...
0000010: 38d6 7dfe 7312 3ff8 ea22 6958 4e7b 4e55  8.}.s.?..&quot;iXN{NU
0000020: 5433                                     T3

Here's a printable version at 36 bytes:
Vcz4p@&quot;ni &gt;\\1   &lt;d+[o*e-!]&quot;iXN{NUT3

Try it online. Test suite.
Explanation
Vcz4p@.&quot;…&quot;iXN{NUT3       implicit: z = input
  z                      input
 c 4                     split to 4-character blocks
V                        loop over that in N
           X               replace...
            N                in current part
             {N              unique chars in current part, in order
               UT            with numbers 0-9
          i      3         interpret as base 3
     @                     take that item of
      .&quot;…&quot;                   string &quot;ni &gt;\\1   &lt;d+[o*e-!]&quot;
    p                      and print without newline