PowerShell, 84 byte
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Ini akan menjadi omong kosong lengkap untuk orang-orang yang tidak terbiasa dengan PowerShell. Mari kita lalui.
Mengambil input param([char]$a,$b), dengan karakter pemeran eksplisit untuk $a. Sisa dari program ini adalah satu pernyataan. Kami akan mulai dengan babak pertama, hingga -join.
Kami sedang membuat array dinamis baru (...,...)dan mengindeks ke dalamnya $a%7-eq6. Nilai-nilai ASCII untuk vdan >adalah 116dan 62, masing-masing, dan 116%7 = 62%7 = 6, dan mereka adalah dua arah yang "naik" ke bawah dan ke kanan. Jadi, jika itu -eqadalah $true, kami akan mengambil nilai kedua, yang $b[0..$c], atau sebuah array dari karakter $bhingga akhir . Kami mendapatkan nilai $cdari nilai pertama $b[($c=$b.length)..0],, yang dipilih jika karakter inputnya adalah^ atau< (yaitu, sehingga melewati string ke belakang). Penting untuk dicatat adalah bahwa bahkan jika nilai kedua dipilih, $cnilai tersebut masih dihitung dan disimpan, sehingga kami dapat menggunakannya kembali sebagai jalan pintas seperti ini.
Jadi, kita sekarang punya berbagai karakter baik maju atau mundur. Kami kemudian -joinkarakter-karakter tersebut bersama-sama dengan hasil indeks array dinamis lain. Kali ini kami memilih berdasarkan pada apakah nilai ASCII di $abawah 90(benar-benar banyak nilai akan berfungsi, saya memilih ini hanya karena). Karena >dan <keduanya memiliki nilai di bawah ini 90, -ltis $false, jadi kami memilih string kosong "", dan dengan demikian char-array digabungkan. Jika tidak, kami memilih karakter baris baru "`n"untuk bergabung dengan char-array bersama dengan baris baru.
String yang dihasilkan ini ditinggalkan di jalur pipa, dan outputnya implisit.
Contoh
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T