PowerShell, 84 bytes
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Esto será un completo galimatías para las personas que no están familiarizadas con PowerShell. Vamos a atravesarlo.
Toma entrada param([char]$a,$b), con un elenco explícito para el personaje $a. El resto del programa es una declaración. Comenzaremos con la primera mitad, hasta la -join.
Estamos creando una nueva matriz dinámica (...,...)e indexándola con ella $a%7-eq6. Los valores ASCII para vy >son 116y 62, respectivamente, y 116%7 = 62%7 = 6, y esas son las dos direcciones que "aumentan" hacia abajo y hacia la derecha. Entonces, si -eqes así $true, tomaremos el segundo valor, que es $b[0..$c], o una matriz de los caracteres $bhasta el final . Obtenemos el valor $cdel primer valor, $b[($c=$b.length)..0]que se selecciona si el carácter de entrada es ^o <(es decir, pasa por la cadena hacia atrás). Es importante tener en cuenta que incluso si se selecciona el segundo valor, el $cvalor aún se calcula y almacena, por lo que podemos reutilizarlo como un acceso directo como este.
Entonces, ahora tenemos una variedad de personajes que van hacia adelante o hacia atrás. Luego, -joinesos caracteres junto con el resultado de otro índice de matriz dinámica. Esta vez estamos seleccionando en función de si el valor ASCII para $aestá por debajo 90(realmente funcionarían muchos valores, seleccioné este solo porque). Dado que >y <ambos tienen un valor a continuación 90, el -ltes $false, por lo que seleccionamos la cadena vacía ""y, por lo tanto, la matriz de caracteres simplemente se concatena. De lo contrario, seleccionamos el carácter de nueva línea "`n"para unir el conjunto de caracteres junto con las nuevas líneas.
Esta cadena resultante se deja en la tubería y la salida es implícita.
Ejemplo
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T