PowerShell, 84 byte
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Điều này sẽ hoàn toàn vô nghĩa đối với những người không quen thuộc với PowerShell. Hãy đi qua nó.
Đưa đầu vào param([char]$a,$b)
, với một diễn viên rõ ràng cho nhân vật cho $a
. Phần còn lại của chương trình là một tuyên bố. Chúng ta sẽ bắt đầu với nửa đầu, cho đến -join
.
Chúng tôi đang tạo một mảng động mới (...,...)
và lập chỉ mục vào đó $a%7-eq6
. Các giá trị ASCII cho v
và >
là 116
và 62
, tương ứng, và 116%7 = 62%7 = 6
, và đó là những hai hướng đó "nâng cao" xuống và bên phải. Vì vậy, nếu đó -eq
là $true
, chúng ta sẽ lấy giá trị thứ hai $b[0..$c]
, hoặc một mảng các ký tự $b
cho đến cuối . Chúng tôi nhận được giá trị $c
từ giá trị đầu tiên, $b[($c=$b.length)..0]
được chọn nếu char đầu vào là ^
hoặc <
(nghĩa là nó đi qua chuỗi ngược). Điều quan trọng cần lưu ý là ngay cả khi giá trị thứ hai được chọn, $c
giá trị vẫn được tính toán và lưu trữ, vì vậy chúng ta có thể sử dụng lại nó như một phím tắt như thế này.
Vì vậy, giờ chúng ta đã có một loạt các ký tự tiến hoặc lùi. Chúng tôi sau đó -join
những ký tự đó cùng với kết quả của một chỉ số mảng động khác. Lần này chúng tôi chọn dựa trên việc giá trị ASCII cho $a
bên dưới 90
(thực sự rất nhiều giá trị sẽ hoạt động, tôi đã chọn giá trị này chỉ vì). Kể từ >
và <
cả hai đều có một giá trị thấp hơn 90
, những -lt
là $false
, vì vậy chúng tôi chọn chuỗi rỗng ""
, và do đó các char-mảng chỉ đơn giản là nối. Mặt khác, chúng tôi chọn ký tự dòng mới "`n"
để nối mảng char cùng với dòng mới.
Chuỗi kết quả này được để lại trên đường ống và đầu ra là ẩn.
Thí dụ
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T