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, тому ми вибираємо порожній рядок "", і, таким чином, масив char просто об'єднується. В іншому випадку ми вибираємо символ нового рядка, "`n"щоб приєднатися до масиву char разом із новими рядками.
Цей результуюча рядок залишається на конвеєрі, а вихід неявний.
Приклад
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T