PowerShell, 84 байта
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Это будет полным бредом для людей, не знакомых с PowerShell. Давайте пройдем через это.
Принимает ввод param([char]$a,$b)с явным приведением к символу для $a. Остальная часть программы - одно утверждение. Начнем с первой половины, до-join .
Мы создаем новый динамический массив (...,...)и индексируем его $a%7-eq6. Значения ASCII для vи >есть 116и 62, соответственно, и 116%7 = 62%7 = 6, и это два направления, которые «увеличиваются» вниз и вправо. Таким образом, если -eqесть $true, мы будем принимать второе значение, которое $b[0..$c], или массив символов $bдо конца . Мы получаем значение $cиз первого значения, $b[($c=$b.length)..0]которое выбирается, если входной символ равен ^или <(т. Е. Проходит через строку назад). Важно отметить, что даже если выбрано второе значение,$c оно все равно вычисляется и сохраняется, поэтому мы можем использовать его как ярлык, как этот.
Итак, теперь у нас есть массив символов, идущих вперед или назад. Затем -joinэти символы вместе с результатом другого индекса динамического массива. На этот раз мы выбирающие в зависимости от того значения ASCII для $aниже 90( на самом деле много значений будут работать, я выбрал этот раз потому что). Так как >и <оба имеют значение ниже 90, то -ltесть $false, поэтому мы выбираем пустую строку "", и, таким образом, массив символов просто объединяется. В противном случае мы выбираем символ новой строки, "`n"чтобы присоединить массив символов вместе с символами новой строки.
Эта результирующая строка остается в конвейере, а вывод неявным.
пример
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T