PowerShell, 84 bajty
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
To będzie kompletny bełkot dla osób nie znających PowerShell. Przejdźmy przez to.
Pobiera dane wejściowe param([char]$a,$b), z wyraźnym oddaniem dla postaci $a. Reszta programu to jedna instrukcja. Zaczniemy od pierwszej połowy, aż do -join.
Tworzymy nową tablicę dynamiczną (...,...)i indeksujemy w niej za pomocą $a%7-eq6. Wartości ASCII vi >są 116i 62, odpowiednio, i 116%7 = 62%7 = 6, i to są dwa kierunki, że „wzrost” w dół i na prawo. Więc jeśli to -eqjest $true, weźmiemy drugą wartość, która jest $b[0..$c]lub tablicę znaków $baż do końca . Otrzymujemy wartość $cod pierwszej wartości, $b[($c=$b.length)..0]która jest wybierana, jeśli wejściowy znak char to ^lub <(tzn. Tak, że przechodzi on przez łańcuch do tyłu). Ważne jest, aby pamiętać, że nawet jeśli wybrana zostanie druga wartość, $cwartość jest nadal obliczana i zapisywana, dzięki czemu możemy ponownie użyć jej jako takiego skrótu.
Tak więc mamy teraz szereg znaków, które idą do przodu lub do tyłu. Następnie -joinznaki te łączymy z wynikiem innego dynamicznego indeksu tablicowego. Tym razem wybieramy na podstawie tego, czy wartość ASCII dla $ajest poniżej 90(naprawdę wiele wartości by działało, wybrałem tę właśnie dlatego). Ponieważ >i <oba mają poniżej wartość 90, -ltjest $false, więc wybieramy pusty ciąg "", a zatem tablica znaków jest po prostu łączona. W przeciwnym razie wybieramy znak nowej linii, "`n"aby połączyć tablicę znaków z znakami nowej linii.
Ten wynikowy ciąg zostaje pozostawiony w potoku, a dane wyjściowe są niejawne.
Przykład
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T