PowerShell, 84 octets
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Cela va être du charabia complet pour les personnes qui ne connaissent pas PowerShell. Passons en revue.
Prend une entrée param([char]$a,$b), avec une conversion explicite en caractère pour $a. Le reste du programme est une instruction. Nous allons commencer par la première moitié, jusqu'à la -join.
Nous créons un nouveau tableau dynamique (...,...)et nous y indexons avec $a%7-eq6. Les valeurs ASCII pour vet >sont 116et 62, respectivement, et 116%7 = 62%7 = 6, et ce sont les deux directions qui "augmentent" vers le bas et vers la droite. Donc, si tel -eqest le cas $true, nous prendrons la deuxième valeur, qui est $b[0..$c], ou un tableau de caractères $bjusqu'à la fin . Nous obtenons la valeur $cde la première valeur, $b[($c=$b.length)..0]qui est sélectionnée si le caractère d'entrée est ^ou <(c'est-à-dire qu'il passe par la chaîne en arrière). Il est important de noter que même si la deuxième valeur est sélectionnée, la $cvaleur est toujours calculée et stockée, nous pouvons donc la réutiliser comme raccourci comme celui-ci.
Donc, nous avons maintenant un tableau de caractères allant vers l'avant ou vers l'arrière. Nous avons ensuite -joinces caractères avec le résultat d'un autre index de tableau dynamique. Cette fois, nous sélectionnons en fonction de si la valeur ASCII pour $aest inférieure 90(vraiment beaucoup de valeurs fonctionneraient, j'ai choisi celle-ci juste parce que). Puisque >et les <deux ont une valeur en dessous 90, le -ltest $false, donc nous sélectionnons la chaîne vide "", et donc le tableau de caractères est simplement concaténé. Sinon, nous sélectionnons le caractère de nouvelle ligne "`n"pour joindre le tableau de caractères avec les nouvelles lignes.
Cette chaîne résultante est laissée sur le pipeline et la sortie est implicite.
Exemple
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T