PowerShell, 84 octets
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
Cela va être du charabia complet pour les personnes qui ne connaissent pas PowerShell. Passons en revue.
Prend une entrée param([char]$a,$b)
, avec une conversion explicite en caractère pour $a
. Le reste du programme est une instruction. Nous allons commencer par la première moitié, jusqu'à la -join
.
Nous créons un nouveau tableau dynamique (...,...)
et nous y indexons avec $a%7-eq6
. Les valeurs ASCII pour v
et >
sont 116
et 62
, respectivement, et 116%7 = 62%7 = 6
, et ce sont les deux directions qui "augmentent" vers le bas et vers la droite. Donc, si tel -eq
est le cas $true
, nous prendrons la deuxième valeur, qui est $b[0..$c]
, ou un tableau de caractères $b
jusqu'à la fin . Nous obtenons la valeur $c
de la première valeur, $b[($c=$b.length)..0]
qui est sélectionnée si le caractère d'entrée est ^
ou <
(c'est-à-dire qu'il passe par la chaîne en arrière). Il est important de noter que même si la deuxième valeur est sélectionnée, la $c
valeur est toujours calculée et stockée, nous pouvons donc la réutiliser comme raccourci comme celui-ci.
Donc, nous avons maintenant un tableau de caractères allant vers l'avant ou vers l'arrière. Nous avons ensuite -join
ces caractères avec le résultat d'un autre index de tableau dynamique. Cette fois, nous sélectionnons en fonction de si la valeur ASCII pour $a
est inférieure 90
(vraiment beaucoup de valeurs fonctionneraient, j'ai choisi celle-ci juste parce que). Puisque >
et les <
deux ont une valeur en dessous 90
, le -lt
est $false
, donc nous sélectionnons la chaîne vide ""
, et donc le tableau de caractères est simplement concaténé. Sinon, nous sélectionnons le caractère de nouvelle ligne "`n"
pour joindre le tableau de caractères avec les nouvelles lignes.
Cette chaîne résultante est laissée sur le pipeline et la sortie est implicite.
Exemple
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T