PowerShell, 84 байта
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Это будет полным бредом для людей, не знакомых с PowerShell. Давайте пройдем через это.
Принимает ввод param([char]$a,$b)
с явным приведением к символу для $a
. Остальная часть программы - одно утверждение. Начнем с первой половины, до-join
.
Мы создаем новый динамический массив (...,...)
и индексируем его $a%7-eq6
. Значения ASCII для v
и >
есть 116
и 62
, соответственно, и 116%7 = 62%7 = 6
, и это два направления, которые «увеличиваются» вниз и вправо. Таким образом, если -eq
есть $true
, мы будем принимать второе значение, которое $b[0..$c]
, или массив символов $b
до конца . Мы получаем значение $c
из первого значения, $b[($c=$b.length)..0]
которое выбирается, если входной символ равен ^
или <
(т. Е. Проходит через строку назад). Важно отметить, что даже если выбрано второе значение,$c
оно все равно вычисляется и сохраняется, поэтому мы можем использовать его как ярлык, как этот.
Итак, теперь у нас есть массив символов, идущих вперед или назад. Затем -join
эти символы вместе с результатом другого индекса динамического массива. На этот раз мы выбирающие в зависимости от того значения ASCII для $a
ниже 90
( на самом деле много значений будут работать, я выбрал этот раз потому что). Так как >
и <
оба имеют значение ниже 90
, то -lt
есть $false
, поэтому мы выбираем пустую строку ""
, и, таким образом, массив символов просто объединяется. В противном случае мы выбираем символ новой строки, "`n"
чтобы присоединить массив символов вместе с символами новой строки.
Эта результирующая строка остается в конвейере, а вывод неявным.
пример
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T