Tâche: étant donné une entrée composée exactement d'un des caractères <>^v
, sortez une deuxième entrée composée des caractères ASCII imprimables (de l'espace au tilde), orientée avec la flèche.
Supposons que la deuxième entrée du programme soit ABC
. Voici ce qu'il devrait faire:
- Entrée
>
: impressionABC
. - Entrée
<
: impressionCBA
. - Entrée
^
: impressionC\nB\nA
ou entrée pivotée de -90 °. - Entrée
v
: impressionA\nB\nC
ou entrée pivotée de 90 °.
Cas de test
input => \n output
---
">", "thanks!" =>
thanks!
---
"<", "Hello, World!" =>
!dlroW ,olleH
---
"^", "This is text." =>
.
t
x
e
t
s
i
s
i
h
T
---
"v", "Tokyo" =>
T
o
k
y
o
---
"<", ">>>" =>
>>>
Il s'agit d'un code-golf , donc le programme le plus court en octets l'emporte.
>ABC
>
orientation.Réponses:
MATL ,
106 octets4 octets économisés grâce à Martin!
Essayez-le en ligne!
Ancienne version, sans opérations modulo: 10 octets
Essayez-le en ligne!
la source
mod 11
astuce (vous devrez cependant faire pivoter l'inverse) .Python 3,
645148 octets6 octets enregistrés grâce à xnor.
Enregistré 7 octets grâce à Lynn.
Enregistré 3 octets grâce à DSM et Morgan de so python.
La fonction accepte l'un des caractères de
<>^v
comme premier argument et la chaîne qui doit être tournée comme deuxième argument.Voici une version plus lisible:
la source
s[1|-(c in'<^')]
- être etsep='\n'*(c in'^v')
lambda
si vous utilisiezjoin
avec votre sep plutôt que d'imprimer.Haskell, 57 octets
Exemple d'utilisation:
f "v" "ABC"
->"A\nB\nC"
.Direction
>
est la fonction d'idendité,<
inverse son argument,v
ajoute une nouvelle ligne à chaque caractère de la chaîne et supprime le dernier et^
estv
suivi de<
.la source
Japt, 9 octets
Inspiré par la réponse de @ DonMuesli, même si je viens de remarquer que le CJam utilise exactement la même technique. Testez-le en ligne!
Comment ça marche
la source
Error: Japt.stdout must be sent to an HTMLElement
etc.CJam, 13 octets
L'entrée est le caractère d'orientation suivi directement par la chaîne à faire pivoter.
Testez-le ici.
Explication
Ouais pour la magie modulo. Prendre les quatre caractères modulo 11 les mappe à:
Ce sont tous distincts modulo 4 et plus important encore, ils augmentent nettement:
3, 0, 1, 2
. Cela signifie que nous pouvons simplement utiliser le résultat de lamod 11
pour déterminer la fréquence de rotation (sans avoir besoin d'un explicitemod 4
, car quatre rotations sont de toute façon un non-op). Nous devrions normalement compenser ces nombres par 1, de sorte que cela>
donne8
et devient un no-op, mais la façon dont je les tourne, inverse en fait la chaîne sur la première application de sorte que nous obtenons toujours une rotation gratuitement.la source
Pyth,
1715Essayez-le ici ou exécutez la suite de tests
2 octets économisés grâce à Jakube!
Vous pouvez également utiliser des astuces de mod:
Essayez-le ici .
la source
Julia, 51 octets
Il s'agit d'une fonction qui accepte un
Char
et une chaîne et renvoie une chaîne.Soit
d
le caractère indiquant la direction ets
la chaîne. Sid
est laissé ou haut, nous utilisons l'inverse des
, sinon nous utilisonss
tel que donné. Nous construisons un séparateur comme la chaîne vide sid
est à gauche ou à droite, ou une nouvelle ligne sid
est vers le haut ou vers le bas. Le passe la chaîne et le séparateur àjoin
, qui insérera le séparateur entre chaque caractère de la chaîne et retournera une chaîne.Vérifiez tous les cas de test en ligne
la source
Utilitaires Bash + GNU, 67
la source
-q
's, mais vous en avezJavaScript (ES6),
766765 octetsPort de réponse Julia @Alex A.. Edit: 9 octets enregistrés grâce à @ETHproductions. Enregistré deux octets séparément grâce à @ edc65.
la source
/[v^]/.test(a)
=>'Z'<a
?:
version ennuyeuse était plus courte d'un octet.(/v|>/.test(a)?[...b]:[...b].reverse())...
devrait être 65Perl,
5451 + 1 = 52 octetsNécessite le
-n
drapeau et la gratuité-M5.010
|-E
. Prend la saisie comme suitdirection\nline
::J'aime que ça
$/x/[v^]/
ressemble à une substitution.Comment ça marche:
la source
PowerShell, 84 octets
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 pourv
et>
sont116
et62
, respectivement, et116%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érieure90
(vraiment beaucoup de valeurs fonctionneraient, j'ai choisi celle-ci juste parce que). Puisque>
et les<
deux ont une valeur en dessous90
, 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
la source
C,
123119117 117114 octetsGolfé:
Programme de test, avec explications et code quelque peu inchangé:
Conseils bienvenus!
la source
Rétine , 60 octets
A besoin de jouer au golf ...
L'entrée est tout comme une chaîne, par exemple
^ABC
.^
ou<
, inversez la chaîne<
ou>
, supprimez les retours à la ligneEssayez-le en ligne.
la source
Dyalog APL , 15 octets
⍪
faire une chaîne dans un tableau à 1 colonne⍣(
…)
répéter ( n ) fois⍞
obtenir l'entrée de chaîne⎕UCS
convertir en point de code UCS11|
reste la division du lorsqu'elle est divisée par 11⌽∘⍉
tournez -90 ° (flip-transpose)Méthode alternative (même longueur):
⎕
obtenir une entrée évaluée (donc il faut entrer, par exemple '^' ou le nom d'un programme / variable qui retourne le caractère souhaité)'<^>v'⍳
index dans la chaînela source
Jolf, 22 octets
Essayez-le ici! Vous devez remplacer
ƒ
par\x9f
. Prend la piqûre, puis le caractère directionnel.la source
JavaScript ES6,
918384 octetsConstruit les chaînes nécessaires et obtient l'index duquel
a
se trouve.indexOf
Est utilisé car^
est un jeton d'expression régulière. Merci à ETHproductions pour la correction de bogue et les octets rasés!la source
f("v","abc")
revientc\nb\na
pour moi.(a,b)=>[b,(c=[...b].reverse()).join``,[...b].join`\n`,c.join`\n`]["><v^".indexOf(a)]
c
c'est littéralementd
.JavaScript (ES6) 71
Tester
la source
Perl 5, 67 octets
66 plus un pour
-p
L'entrée est une chaîne unique dont le premier caractère définit l'orientation.
la source
DUP , 48 octets
Try it here.
Lambda anonyme qui prend à la fois l'argument et l'entrée STDIN. Usage:
Explication
la source
Sérieusement, 41 octets
Prend la chaîne comme première entrée et la direction (
><v^
) comme deuxième entrée.Essayez-le en ligne!
la source
D, 198 octets
: c
Moins golfé:
la source