PowerShell, 84 bytes
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Isso será uma bobagem completa para pessoas não familiarizadas com o PowerShell. Vamos passar por isso.
Recebe entrada param([char]$a,$b)
, com um elenco explícito para caractere $a
. O restante do programa é uma declaração. Começaremos com o primeiro semestre, até o -join
.
Estamos criando uma nova matriz dinâmica (...,...)
e fazendo a indexação nela $a%7-eq6
. Os valores ASCII para v
e >
são 116
e 62
, respectivamente, e 116%7 = 62%7 = 6
, e essas são as duas direções que "aumentam" para baixo e para a direita. Então, se isso -eq
é$true
, vamos dar o segundo valor, o que é $b[0..$c]
, ou uma matriz de caracteres de $b
até o final . Nós obtemos o valor $c
do primeiro valor, $b[($c=$b.length)..0]
que é selecionado se o caractere de entrada é ^
ou <
( ou seja, ele passa a string para trás). Importante notar que, mesmo que o segundo valor seja selecionado, o $c
valor ainda será calculado e armazenado, para que possamos reutilizá-lo como um atalho como esse.
Então, agora temos uma variedade de caracteres indo para frente ou para trás. Em seguida, -join
esses caracteres são combinados com o resultado de outro índice de matriz dinâmica. Desta vez, selecionamos com base se o valor ASCII para$a
está abaixo 90
(realmente muitos valores funcionariam, selecionei este apenas porque). Como >
e <
ambos têm um valor abaixo 90
, o -lt
é $false
, então selecionamos a string vazia ""
e, portanto, o array de caracteres é simplesmente concatenado. Caso contrário, selecionamos o caractere de nova linha "`n"
para associar o conjunto de caracteres a novas linhas.
Essa sequência resultante é deixada no pipeline e a saída é implícita.
Exemplo
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T