Inspiré par ce défi .
Objectif:
Étant donné un standard préconfiguré et une liste d'index, inversez les commutateurs aux index donnés.
Un tableau est composé d'un certain nombre de commutateurs ( v
ou ^
) enveloppés de -
's et disposés en rangées de longueur variable. Voici un exemple de standard:
-v-^-v-
-^-v-
-v-^-v-
Pour inverser / basculer un commutateur, il faut le changer de v
à ^
, ou de ^
àv
.
Les commutateurs sont indexés de gauche à droite, de haut en bas. Par exemple, dans l'exemple ci-dessus, le dernier v
de la première ligne serait en position 3 et le^
de la ligne du milieu serait à 4 (en utilisant l'indexation 1).
Contribution:
- Une chaîne (ou une liste de chaînes) représentant le standard. Il est garanti pour correspondre à l'expression régulière
((-[v^])+-)(\n(-[v^])+-)*
. - Une liste éventuellement vide de nombres représentant des index, peut être 0 ou 1 (ou un certain nombre arbitraire si vous le souhaitez) indexé. Ce sont les commutateurs qui doivent être actionnés.
Sortie:
- Un tableau de distribution de la même forme que l'entrée avec les commutateurs spécifiés inversés. Tout commutateur non spécifié doit conserver son état initial.
Règles:
- L'entrée sera toujours correctement formatée et aucun index donné ne sera hors limites.
- La liste des index sera triée et n'aura pas de doublons.
- Indiquez dans votre réponse quelle indexation vous utilisez, que ce soit 0, 1 ou arbitraire.
- La fin des espaces blancs est correcte tant que la sortie ressemble à l'entrée.
- C'est le code-golf donc le code le plus court gagne.
Exemples:
#Using 1-indexing
input: #Empty Case
[],
-v-^-v-
output:
-v-^-v-
input: #Single switch
[1],
-v-
output:
-^-
input: #Skip a line
[3,5],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-v-
-v-^-
input: #Flip one in each line + number wrap
[3,4,6],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-^-
-^-v-
input: #Flip 'em all
[1,2,3,4,5,6],
-^-v-v-
-v-
-^-^-
output:
-v-^-^-
-^-
-v-v-
>"-"
: Comme la chaîne d'entrée est garantie pour commencer-
, vous pouvez vérifier par rapport au paramètre / argument / nom de variable que vous utilisez pour cela à la place.Réponses:
Vim,
60, 46, 38, 37 octets / touches<esc>
et<C-r>
sont tous deux 1 octet / frappe. Compteur d'octetsCas de test 1 (mode détaillé)
Cas de test 2 (mode détaillé)
Merci à Grimy pour les idées qui ont conduit à une réduction de 22 octets :)
la source
:s/\%V./\='v^'[submatch(0)=='v']
êtrecl<C-R>='v^'['<C-R>"'=='v']
pour -13 octets? (chaque <CR> n'est qu'un octet).s == cl
, donc dans l'-14
ensemble.s^v!<Esc>?\<C-R>"<CR>xhf!x
ous<CR>^v<Esc>:s/\V<C-R>"<CR>kgJ
.-
, donc ça marche vraiment! Duh.JavaScript,
6359 octetsEssayez-le en ligne!
Enregistré 4 octets grâce à Arnauld .
la source
K (oK) ,
3127 octetsSolution:
Essayez-le en ligne!
Explication:
Réponse rapide, va essayer de jouer au golf. 0 indexé.
Remarques:
>93
trickla source
Python 3 ,
140134103 103 octets(-30 grâce à DJMcMayhem ♦, -1 de plus grâce à Black Owl Kai)
Essayez-le en ligne!
Oof, deuxième essai de jouer au golf. Cela utilise simplement une boucle plutôt simple sur la chaîne, en utilisant
x
permettant de garder la trace de l'index de commutateur actuel. Utilise l'indexation 1.Non golfé:
la source
Gelée , 12 octets
Un programme complet acceptant une chaîne et une liste d'entiers qui imprime le résultat.
Essayez-le en ligne!
Comment?
la source
Python 3.8 (pré-version) ,
80,78,77,71, 70 octets-1 octet, merci à @Shaggy
Essayez-le en ligne!
la source
c>s
enregistre un octet.Perl 6 , 31 octets
Essayez-le en ligne!
(-2 octets grâce à Jo King)
L'opérateur de substitution de Perl 6
S
prend commodément unnth
adverbe qui accepte non seulement un seul index auquel effectuer le remplacement, mais une liste d'entre eux, exactement comme nécessaire ici.Le remplacement est
$/ ~^ '('
, où$/
est le texte correspondant (soitv
ou^
),~^
est exclusif ou alphabétiquement opérateur, et(
est le caractère dont les bits transformerv
en^
et vice - versa.la source
MATL , 29 octets
Essayez-le en ligne! Ou vérifiez tous les cas de texte .
L'entrée est un tableau de cellules de chaînes et un vecteur de lignes de nombres, avec une indexation basée sur 1. La sortie est remplie à droite d'espaces.
la source
Python 2 ,
1059791 octetsEssayez-le en ligne!
6 octets sauvés par le
volà l' aide de Fourier de Rin transformer « s auc>'-'
lieu dec in'^v'
.0
-indexé.la source
Gelée , 14 octets
Essayez-le en ligne!
Programme complet.
Cela semble trop long ...
la source
”-
par le nom du premier argument (³
?), Qui est garanti de commencer par un-
, à la place?>
vectorise. Vous pouvez voir que cela ne fonctionne pas .³
,⁴
,⁵
,⁶
et⁷
, pour la première à la cinquième ALC , respectivement. Vous pouvez lire la page Atomes pour savoir s'il existe une fonction intégrée spécifique.Stax , 13 octets
Exécuter et déboguer
Cela utilise des indices basés sur 0.
[v^]
.40
. C'est çaxor('v', '^')
.la source
Nettoyer , 93 octets
Essayez-le en ligne!
Définit la fonction en
$ :: [Int] -> [Char] -> [Char]
prenant une liste d'index zéro indexée et en retournant une fonction qui prend la chaîne et renvoie la chaîne modifiée.la source
JavaScript (Node.js) ,
1019893917767 octetsEssayez-le en ligne!
10 octets, merci aux suggestions de Shaggy .
Port de ma réponse Python . Pas habitué au golf javascript!
la source
V , 20 octets
Essayez-le en ligne!
Utilise de nouvelles fonctionnalités, comme celle
Ñ
qui est incroyablement utile.la source
JavaScript, 111 octets
Code
Prend l'entrée au format f (x) (y) où x est les indices et y est le standard. Les indices sont 0 indexés
Essayez-le en ligne!
Explication
Pour chaque indice
construire l'expression régulière qui trouve l'index + 1 e "^" ou "v"
insérez-le dans une chaîne pour le remplacer par le symbole opposé "v" <-> "^"
puis évaluer la chaîne en fonction
Après avoir parcouru les indices pour basculer, renvoyez le standard
la source
Gelée , 17 octets
Essayez-le en ligne!
Un programme complet prenant les indices comme premier et la chaîne comme deuxième argument. Imprime la sortie avec les commutateurs indiqués basculés.
la source
Rétine 0,8,2 ,
6662 octetsEssayez-le en ligne! Le lien inclut un cas de test. 1 indexé. Explication:
Convertissez les nombres entrés en unaire.
Translittérer entre
v
et^
tous les caractères avec la propriété que le nombre dev
s et^
s jusqu'à présent (inclus) est égal à l'un des nombres d'entrée.Supprimez les numéros saisis.
la source
Fusain , 23 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. 0 indexé. Explication:
la source
Rubis , 56 octets
1 indexé.
Essayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 73 octets
Essayez-le en ligne!
la source
Japt , 15 octets
Essayez-le
la source
Japt ,
1614 octetsEssayez-le
la source
:D
)