PowerShell, 84 byte
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Questo sarà completamente incomprensibile per le persone che non hanno familiarità con PowerShell. Andiamo attraverso.
Riceve input param([char]$a,$b), con un cast esplicito a carattere per $a. Il resto del programma è una frase. Inizieremo con la prima metà, fino al -join.
Stiamo creando un nuovo array dinamico (...,...)e indicizzandolo con $a%7-eq6. I valori ASCII per ve >sono 116e 62, rispettivamente, e 116%7 = 62%7 = 6e quelli e sono le due direzioni che "aumentano" verso il basso e verso destra. Quindi, se -eqè così $true, prenderemo il secondo valore, ovvero $b[0..$c], o un array di caratteri $bfino alla fine . Otteniamo il valore $cdal primo valore, $b[($c=$b.length)..0]che viene selezionato se il carattere di input è ^o <(ovvero, passa attraverso la stringa all'indietro). È importante notare che anche se viene selezionato il secondo valore, il $cvalore viene comunque calcolato e memorizzato, quindi possiamo riutilizzarlo come collegamento come questo.
Quindi ora abbiamo una serie di personaggi che vanno avanti o indietro. Abbiamo quindi -joinquei caratteri insieme al risultato di un altro indice di array dinamico. Questa volta stiamo selezionando in base al fatto che il valore ASCII $asia inferiore 90(davvero molti valori funzionerebbero, ho selezionato questo solo perché). Poiché >ed <entrambi hanno un valore di seguito 90, -ltè $false, quindi selezioniamo la stringa vuota ""e quindi il char-array viene semplicemente concatenato. Altrimenti, selezioniamo il carattere di nuova riga "`n"per unire il char-array con le nuove righe.
Questa stringa risultante viene lasciata sulla pipeline e l'output è implicito.
Esempio
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T