Vous recevrez une chaîne s
. Il est garanti que la chaîne a égal et au moins un [
s et ]
s. Il est également garanti que les supports sont équilibrés. La chaîne peut également avoir d'autres caractères.
L'objectif est de sortir / retourner une liste de tuples ou une liste de listes contenant des indices de chacun [
et de la ]
paire.
remarque: la chaîne est indexée zéro.
Exemple:
!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]
devrait revenir
[(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]
ou quelque chose d'équivalent à cela. Les tuples ne sont pas nécessaires. Des listes peuvent également être utilisées.
Cas de test:
input:[[asdf][][td([)ty54g% ]hg[[f]u][f[[jhg][gfd]sdf]sdfs]ghd]fr43f]
output:[(0, 62),(1, 6), (7, 8), (9, 56), (13, 22), (25, 30), (26, 28), (31, 52), (33, 47), (34, 38), (39, 43)]
input:[[][][][]][[][][][[[[(]]]]]))
output:[(0, 9), (1, 2), (3, 4), (5, 6), (7, 8), (10,26),(11, 12), (13, 14), (15, 16), (17, 25), (18, 24), (19, 23), (20, 22)]
input:[][][[]]
output:[(0, 1), (2, 3), (4, 7), (5, 6)]
input:[[[[[asd]as]sd]df]fgf][][]
output:[(0, 21), (1, 17), (2, 14), (3, 11), (4, 8), (22, 23), (24, 25)]
input:[]
output:[(0,1)]
input:[[(])]
output:[(0, 5), (1, 3)]
Il s'agit de code-golf , donc le code le plus court en octets pour chaque langage de programmation l'emporte.
code-golf
string
balanced-string
Cookies de moulin à vent
la source
la source
Réponses:
Brain-Flak Classic , 108 octets
Essayez-le en ligne!
Stocke chaque ouverture
[
dans la bonne pile et sort chaque fois que nous frappons a]
.la source
Python 2 , 74 octets
Essayez-le en ligne!
la source
JavaScript,
6962 octetsUn peu de golf sur le train de retour. Peut probablement être amélioré.
Prend l'entrée comme un tableau de caractères et sort un objet avec les clés étant les indices des
[
s et leurs valeurs étant les indices de leurs]
s correspondants .Essayez-le en ligne
la source
Haskell ,
9279 octetsEssayez-le en ligne!
Explication
Nous créons une fonction
g
qui prend 3 arguments.a
, qui est l'emplacement de tous les[
art.n
, qui est le nombre de caractères traitésx
qui est les caractères non traités.Si notre premier personnage est que
]
nous retironsu
du front notrea
et revenons(u,n)
plus tout ce qui reste.Si notre premier caractère ne l'est pas
]
, que ce soit l'un[
ou l'autre, nous incrémentonsn
et ajoutons[n|s=='[']
au début dea
.[n|s=='[']
sera[n]
sis=='['
et[]
sinon.Si nous n'avons plus de caractères, nous renvoyons la liste vide.
la source
Java 10, 95 octets
Un lambda vide prenant la chaîne d'entrée comme un
int[]
des points de code Unicode.Essayez-le en ligne
Non golfé
Remerciements
la source
r
etw
dans le cadre du code, et non comme paramètres:s->{int r=0,w=0;...}
.vim, 89 octets
Annoté
<C-V>
est 0x16.<C-M>
est 0x0d.<C-X>
est 0x18.Essayez-le en ligne!
la source
QBasic (QB64),
137127112 octetsNous avons besoin de
quatredeux octets car le défi nécessite une indexation 0. Mon premier article QBasic, les commentaires sont appréciés.\r\n
->\n
)Ressemble à ceci une fois exécuté:
la source
?
place deprint
(le compilateur le développe automatiquementprint
), vous n'avez pas besoin des espaces entre les chaînes entre guillemets etTHEN
dans leIF
s, et vous pouvez supprimer l'i
afterNEXT
.0
etto
? Je suis confus ...if c$="["
peut devenirif"["=c$
,elseif c$="]"
peut devenirelseif"]"=c$
,end if
peut devenirendif
et, avec un léger changement dans la sortie,?b(n),i
peut devenir?b(n)i
(QBasic 1.1 est ce que j'utilise, votre cas peut être différent).?b(n)i
travailléPyth, 26 octets
Essayez-le ici
Explication
la source
C,x"[" MQ #.e*qb\[t+lhfSI/LT"[]"._>Q
. Edit: J'ai aussi réussi à jouer au mien, j'ai maintenant moins de 30 ans.R ,
141 133 115 112 112108 octetsEssayez-le en ligne!
Rien de spécial. 1 indexé, parce que je l'ai dit. R n'a pas vraiment de piles, donc j'ai utilisé à l'origine
c
,head
ettail
pour obtenir le même effet littéral. Ungolfed version originale (mises à jour à l' aideutf8ToInt
de supprimer certains octets, en utilisant le début du vecteur en haut de la pile, et en abusantT
etF
builtins pour éviter l' initialisation des piles.):la source
T`` and
F intégrés1:nchar(y)
est plus court queseq_along(x)
. Very nice solution btw :)gregexpr
c'est la voie à suivre.22 28 22
au lieu de22 28 21
) probablement l'utilisation (ab) de T / F n'est pas vraiment sûre: D. C'est plus court et semble fonctionner -> Essayez-le en ligne!Forth (gforth) , 75 octets
Essayez-le en ligne!
Abuse la pile à virgule flottante, mais permet d'utiliser un
do loop
car le code ne touche pas (manuellement) à la pile de retour.Explication
[
, mettre sur une pile à virgule flottante]
pop de la pile à virgule flottante et sortie avec la position actuelleExplication du code
la source
Rétine , 36 octets
Essayez-le en ligne! Explication:
Générez une liste à partir des résultats de la correspondance.
Utilisez la substitution suivante pour générer la liste au lieu des correspondances.
Autoriser les correspondances à se chevaucher.
Il s'agit d'une application des groupes d'équilibrage de .NET. Le
[
correspond littéralement, puis autant de caractères que possible sont consommés. Comme chaque suivant[
est mis en correspondance, la correspondance est ajoutée à la$2
pile. Si cette pile n'est pas vide, nous pouvons alors faire correspondre a]
, en supprimant la correspondance de la pile. Sinon, nous pouvons faire correspondre tout ce qui n'est pas un]
(le[
a déjà été mis en correspondance plus tôt). La correspondance s'arrête lorsqu'elle rencontre la correspondance]
pour le[
, car la$2
pile est (maintenant) vide à ce stade.La substitution se compose de deux variables séparées par une virgule. Le
.
indique que la longueur de la variable, plutôt que sa valeur, doit être utilisée. Le>
indique que la variable doit être évaluée en fonction du séparateur droit plutôt que de la correspondance. La$`
variable fait référence au préfixe de la correspondance, ce qui signifie$.`
donne la position du[
; le>
modificateur le modifie en préfixe du séparateur droit de la correspondance, ce qui donne la position de la correspondance]
.la source
Gelée ,
22 21 2019 octetsSans doute, il est possible dans Jelly dans la moitié de ce nombre d'octets: p ...
Un lien monadique acceptant une liste de caractères qui renvoie une liste de listes d'entiers.
En tant que programme complet, il accepte une chaîne et imprime une représentation de ladite liste.
Essayez-le en ligne!
Comment?
la source
œ¿
et ses parents mais je n'ai pas trouvé de solution. C'était le plus proche que j'aie eu.SWI-Prolog 254 octets
Exemple:
la source
C (gcc) , 87 octets
Essayez-le en ligne!
Explication
Pour garder une trace de l'ouverture des index de chaîne du crochet, la chaîne d'entrée est remplacée et utilisée comme une pile.
Essayez-le en ligne!
la source
Gelée , 20 octets
Essayez-le en ligne!
Cela a un effet secondaire sur le registre, j'espère que cela peut être une fonction.
la source
Japt v1.4.5, 23 octets
Essayez-le en ligne!
Déballé et comment cela fonctionne
La sortie est un tableau aplati de
[closing index, opening index]
. Si l'ordre inversé n'est pas souhaité, l'ajoutw
à la fin fait le travail (+1 octet).la source
Lisp commun, 95 octets
Version longue Les testsimpressions:
la source
K (ngn / k) ,
3837 octetsEssayez-le en ligne!
{
}
fonction avec argumentx
"[]"=\:x
deux listes booléennes pour les occurrences de"["
et"]"
a:
affecter àa
|/
booléen "ou" des deux listes&
où (à quels indices) se trouvent les parenthèses?b:
affecter àb
-/
une liste avec 1 pour"["
, -1 pour"]"
et 0 partout ailleurs+\
sommes partielles|':
maxima par paire (chaque élément est au maximum avec le précédent, l'élément initial reste le même)Cela représente la profondeur du crochet pour chaque caractère. Nous l'indexons avec
b
(la juxtaposition est l'indexation) et nous obtenons la profondeur des crochets uniquement pour les crochets.=
«group by» - un dictionnaire mappant les profondeurs aux indices auxquels elles se produisent,/
concaténer les valeurs dans le dictionnaire, en ignorant les clés0N 2#
remodeler en une matrice à 2 colonnes (liste de listes)b@
indexb
avec chaque élément de la matricela source
Gelée ,
2018 octets1 octet enregistré grâce à @ user202729 m'informant que
µ€
c'est)
Essayez-le en ligne!
Après avoir lutté avec cela pendant plusieurs heures juste pour le faire fonctionner ... Je suis honnêtement surpris que ça soit si court :-)
Explication
la source
CJam , 25 octets
Étonnamment compétitif - ne perd que face à Japt et Jelly [ Edit : and Charcoal and Stax :(]
Essayez-le en ligne!
Explication
la source
Python 2 , 109 octets
Essayez-le en ligne!
la source
Pyth ,
2826 octetsSuite de tests.
Pour le moment, c'est plus long que l'approche de Mnemonic, mais je sens que je peux jouer au golf un peu et heureusement, cela n'utilise pas non plus des structures impératives de PythonV
. La version initiale était de 36 octets et comportait également de nombreux bogues.Comment ça marche
la source
{I#.e,t+lhfSI/LT`Y._>Q
aaalmost fonctionne pour 22 octets ...Perl 5, 53 octets
Exécuter en tant que
perl -nE '<above code snippet>'
. Prend l'entrée via stdin.Comme d'habitude, la solution Perl optimale au problème est une expression régulière. Nous essayons de faire correspondre n'importe quelle paire de crochets qui ne contient aucune paire à l'intérieur en utilisant une classe de caractères plutôt stupide (
s/\[[^][]*\]/.../
). Si la correspondance est réussie, nous remplaçons le texte correspondant par le chiffre1
encore et encore afin de ne plus correspondre accidentellement à ces crochets, et nous imprimons les indices de la correspondance. Rincez et répétez.la source
Stax , 13 octets
Exécuter et déboguer
Il utilise la pile d'entrée pour suivre les paires d'accolades ouvertes. Voici le programme décompressé, non golfé et commenté.
Exécutez celui-ci
la source
Fusain , 20 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Boucle sur la plage implicite de la longueur de la chaîne d'entrée.
Activez le caractère actuel.
Si c'est un,
[
poussez l'index en cours vers la variable de tableau prédéfinie.Si c'est un,
]
puis pop le dernier index de la variable de tableau et imprimez-le et l'index en cours séparés par une virgule et commencez une nouvelle ligne. D'autres formats de sortie, s'ils sont acceptables, permettraient d'économiser quelques octets:]I⟦⊟υιω
enregistre 2 octets mais imprime chaque index sur une ligne distincte, en double-espaçant les paires d'index;]I⟦⊟υι
imprime simplement les index sur des lignes séparées, ce qui rend difficile leur distinction.la source