PowerShell, 84 bayt
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Bu PowerShell'e aşina olmayan insanlara tamamen saçma gelecek. Hadi geçelim şunu.
Girdi param([char]$a,$b), karakterine açık bir alçı ile $a. Programın geri kalanı bir ifadedir. İlk yarıya kadar başlayacağız-join .
Yeni bir dinamik dizi yaratıyoruz (...,...)ve içine indeksliyoruz $a%7-eq6. ASCII değerleri için vve >olduğu 116ve 62sırasıyla ve 116%7 = 62%7 = 6ve bu aşağı ve sağa "artırmak" diye iki yön vardır. O Yani, -eqolduğunu $true, biz olan ikinci değer alacağım$b[0..$c] , ya karakter dizisi $bsona kadar . Biz değeri elde $cilk değerinden, $b[($c=$b.length)..0]giriş Char ise seçilmiş olur, ^ya da <(o dize geriye doğru geçer, yani böylece). Unutulmaması gereken, ikinci değer seçilse bile$c değerin hala hesaplanıp saklandığından, bu şekilde böyle bir kısayol olarak yeniden kullanılabileceğimizi unutmayın.
Yani şimdi ileri ya da geri giden bir dizi karakterimiz var. Daha sonra -joinbu karakterleri başka bir dinamik dizi indeksinin sonucu ile birlikte kullanıyoruz. Bu sefer, ASCII değerinin $aaltında olup olmadığına bağlı olarak seçiyoruz.90 (gerçekten çok sayıda değer işe yarayacak, bunu sadece ben seçtim). O zaman >ve <her ikisinin de değeri var90 , -ltolduğu $falsebiz boş bir dize seçmek, böylece ""ve böylece odun kömüründe dizisi basitçe birleştirilmiş. Aksi takdirde, karakter "`n"dizisine yeni satırlarla birlikte katılmak için yeni satır karakterini seçeriz.
Bu sonuç dizesi boru hattında bırakılır ve çıktı gizlidir.
Örnek
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T