Chaque fois que vous effectuez un mouvement sur un Rubik's Cube, il y a un mouvement inverse qui annule le premier mouvement. Pour cette raison, chaque algorithme (ensemble de mouvements) a un algorithme inverse qui annule le premier algorithme.
Le but de ce défi est de trouver l'inverse d'un algorithme donné.
Spécification:
L'entrée se compose d'un tableau de mouvements individuels. Chaque mouvement est une chaîne de longueur 1 ou 2. Bien sûr, vous pouvez utiliser le format d'entrée le plus logique dans votre langue. Chaque mouvement se compose de la structure X
ou X'
ou X2
, où X
est une lettre majuscule ou minuscule.
Pour inverser X
, remplacez-le simplement par X'
. De même, X'
devient X
. X2
d'autre part ne change pas.
Pour créer la sortie, inversez chaque déplacement, puis inversez le tableau.
Exemples (chaînes séparées par des espaces):
R
=> R'
D U'
=> U D'
S T A C K
=> K' C' A' T' S'
A2 B2
=> B2 A2
Notation:
Il s'agit de code-golf, donc le moins d'octets est gagnant. Les échappatoires standard ne sont pas autorisées.
la source
R2
->R2'
ouB
->B3
permis?X3
ouX1
aurait été un bon ajout au défi.D2R2
comme cas de test ...Réponses:
Python 2 ,
71575453 octets-15 octets grâce aux ovs! -3 octets grâce à Rod.
Essayez-le en ligne!
E / S de chaîne, 70 octets
Essayez-le en ligne!
la source
V ,
1310 octetsEssayez-le en ligne!
3 octets économisés grâce à @nmjmcman soulignant ma fonctionnalité préférée. Explication:
la source
ä
like représente une expression régulière lorsqu'elle est compilée dans vim?:g!/\d/norm A'<CR>:%s/''//g<CR>gg:g/^/m0<CR>
Plus d'informations sur la façon dont V compresse les expressions régulières peut être trouvée iciRetina 0.8.2 ,
2726 octetsEssayez-le en ligne! Le lien inclut des cas de test. Explication: La première étape ajoute une apostrophe après chaque alphanumérique. Il en résulte des doubles apostrophes (avec ou sans 2 inclus) qui doivent être éliminées. La dernière étape inverse les mouvements.
la source
O$^
c'est en fait toujours le meilleur moyen d'inverser une liste de correspondances, donc le nombre d'octets est en fait inchangé dans Retina 1.JavaScript (ES6), 45 octets
La solution la plus courte consiste à prendre Array IO. Utilisation simple et appropriée de la destruction d'arguments.
La sortie de chaîne est de +8 octets pour
.join` `
.Entrée chaîne, sortie tableau: 69 octets
la source
.reverse()
en::reverse
économisant 1 octet mais en faisant ES7Gelée , 11 octets
Un lien monadique prenant un retour d'une liste de listes de caractères (un "tableau" de "chaînes").
Essayez-le en ligne! (Le pied de page évite d'écraser la sortie, affichant la liste divisée avec des espaces.)
Comment?
la source
JavaScript (ES6), 46 octets
Prend l'entrée comme un tableau de mouvements.
Essaye-le
Entrez une liste de mouvements séparés par des virgules.
Explication
Fonction anonyme prenant le tableau de mouvements comme argument via un paramètre
a
.Mappez sur le tableau, en passant chaque chaîne à travers une fonction, où
m
est la chaîne actuelle.Vérifiez si la chaîne contient un deuxième deuxième caractère (
"'"
ou"2"
).S'il essaie de convertir cette chaîne de caractères en un entier. Si la chaîne est
"2"
, elle devient2
, ce qui est vrai. Si la chaîne est"'"
, elle devientNaN
, ce qui est falsey.Si le test précédent est véridique, revenez simplement
m
.Sinon, retournez le premier caractère de
m
.Si la chaîne ne contient pas de second caractère, renvoyez-le
m
avec un'
.Inversez le tableau modifié.
la source
Python ,
5148 octetsUne fonction sans nom prenant et renvoyant des listes de chaînes.
Essayez-le en ligne!
Inverse la liste d'entrée avec
a[::-1]
; ajoute un'
à chaque entrée avecv+"'"
; dirige chacun de 1 ou 2 caractères selon que l'original a'
ou non un in[:2-("'"in v)]
.la source
Python 3 ,
918972706965 octetsEssayez-le en ligne! (Avec des cas de test)
Apparemment, vous n'avez pas besoin de prendre l'entrée et la sortie comme des chaînes, donc une solution de 69 octets est possible
la source
len(i)==1
len(i)-2
est plus court quelen(i)==1
(rappelez-vous que 0 est falsey)Haskell , 43 octets
Essayez-le en ligne! Déclare une fonction anonyme
map f.reverse
. Lier àg
et utiliser commeg["S","T","A","C","K"]
.la source
PHP , 81 octets
Essayez-le en ligne!
la source
05AB1E , 13 octets
Essayez-le en ligne!
Explication
la source
J, 25 octets
J gère bien celui-ci, autre que la séquence d'échappement malheureuse nécessaire pour représenter une seule citation:
Nous devons représenter la liste à l'aide de données encadrées, car il s'agit d'un mélange d'éléments à un et deux caractères, d'où:
&.>
- "under unbox", ce qui signifie déballer chaque élément, effectuer l'opération qui suit (c'est-à-dire, les symboles expliqués ci-dessous) puis réemballer une fois terminé(''''={:)
"si le 2ème caractère est un guillemet simple" ....@.
(Verbe de l'ordre du jour de J, une sorte de déclaration ternaire généralisée ou une déclaration de cas) "puis effectuez le 2e point de la liste de l'ordre du jour, sinon effectuez le premier"}:
(le 2e point de la liste de l’ordre du jour), "supprimer le dernier caractère", c’est-à-dire la citation unique`(Le verbe de cravate de J) Vous pouvez penser à cela comme le séparateur de point de l'ordre du jour
,&''''
(premier point de la liste de l'ordre du jour) "ajouter une seule citation à la fin"|.
"sens inverse"Essayez-le en ligne!
la source
R , 51 octets
Essayez-le en ligne!
la source
Rubis , 44 octets
Essayez-le en ligne!
la source
Java 8,
141128126 octetsPrend l'entrée comme simple
String
sans espaces (ieRUR'URU2R'U
).Explication:
Essayez-le en ligne.
Exemple des étapes ci-dessus, avec comme entrée donnée:
RUR'URU2R'U
RUR'URU2R'U
→R'U'R'''U'R'U'2'R'''U'
R'U'R'''U'R'U'2'R'''U'
→R'U'RU'R'U'2'RU'
R'U'RU'R'U'2'RU'
→'R'UR'U'R'U'2R'U
'R'UR'U'R'U'2R'U
→'R'UR'U'R2UR'U
'R'UR'U'R2UR'U
→U'RU2R'U'RU'R'
la source