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 v
ve >
olduğu 116
ve 62
sırasıyla ve 116%7 = 62%7 = 6
ve bu aşağı ve sağa "artırmak" diye iki yön vardır. O Yani, -eq
olduğunu $true
, biz olan ikinci değer alacağım$b[0..$c]
, ya karakter dizisi $b
sona kadar . Biz değeri elde $c
ilk 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 -join
bu karakterleri başka bir dinamik dizi indeksinin sonucu ile birlikte kullanıyoruz. Bu sefer, ASCII değerinin $a
altı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
, -lt
olduğu $false
biz 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