Se le dará una cadena s
. Se garantiza que la cadena tiene igual y al menos un [
sy ]
s. También se garantiza que los soportes estén equilibrados. La cadena también puede tener otros caracteres.
El objetivo es de salida / devolver una lista de tuplas o una lista de listas que contienen índices de cada [
y ]
par.
nota: la cadena está indexada a cero.
Ejemplo:
!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]
debería volver
[(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]
o algo equivalente a esto. Las tuplas no son necesarias. Las listas también se pueden utilizar.
Casos de prueba:
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)]
Este es el código de golf , por lo que gana el código más corto en bytes para cada lenguaje de programación.
code-golf
string
balanced-string
Galletas de molino de viento
fuente
fuente
Respuestas:
Brain-Flak Classic , 108 bytes
Pruébalo en línea!
Almacena cada apertura
[
en la pila correcta, y genera cada vez que golpeamos a]
.fuente
Python 2 , 74 bytes
Pruébalo en línea!
fuente
JavaScript,
6962 bytesUn poco de golf en el tren a casa. Probablemente se puede mejorar.
Toma la entrada como una matriz de caracteres y genera un objeto con las claves como los índices de
[
sy sus valores son los índices de sus]
s correspondientes .Pruébalo en línea
fuente
Haskell ,
9279 bytesPruébalo en línea!
Explicación
Creamos una función
g
que toma 3 argumentos.a
, que es la ubicación de todos los[
s no coincidentes.n
, que es el número de caracteres procesadosx
que son los caracteres sin procesar.Si nuestro primer personaje es
]
quitamosu
del frente nuestroa
y devolvemos(u,n)
más lo que queda.Si nuestro primer personaje no es
]
, eso es uno[
u otro, incrementamosn
y agregamos[n|s=='[']
al frente dea
.[n|s=='[']
será[n]
sis=='['
y de lo[]
contrario.Si no tenemos caracteres, devolvemos la lista vacía.
fuente
Java 10, 95 bytes
Un lambda vacío que toma la cadena de entrada como un
int[]
punto de código Unicode.Pruébalo en línea
Sin golf
Expresiones de gratitud
fuente
r
yw
como parte del código, no como parámetros:s->{int r=0,w=0;...}
.vim, 89 bytes
Anotado
<C-V>
es 0x16.<C-M>
es 0x0d.<C-X>
es 0x18.Pruébalo en línea!
fuente
QBasic (QB64),
137127112 bytesNecesitamos
cuatrodos bytes porque el desafío requiere indexación 0. Mi primera publicación de QBasic, agradecemos sus comentarios.\r\n
->\n
)Se ve así cuando se ejecuta:
fuente
?
lugar deprint
(el compilador lo expande automáticamenteprint
), no necesita los espacios entre las cadenas citadas yTHEN
en laIF
s, y puede soltar eli
afterNEXT
.0
yto
? Estoy confundido ...if c$="["
puede convertirseif"["=c$
,elseif c$="]"
puede convertirseelseif"]"=c$
,end if
puede convertirseendif
y, con un ligero cambio en la salida,?b(n),i
puede convertirse?b(n)i
(QBasic 1.1 es lo que uso, su caso podría ser diferente).?b(n)i
funcionóPyth, 26 bytes
Pruébalo aquí
Explicación
fuente
C,x"[" MQ #.e*qb\[t+lhfSI/LT"[]"._>Q
. Editar: También tuve éxito jugando al golf, ahora tengo menos de 30.R ,
141133115115108bytesPruébalo en línea!
Nada especial. 1 indexado, porque lo dije. R realmente no tiene pilas, por lo que utiliza un principio
c
,head
ytail
para conseguir el mismo efecto literal. Versión original sin golf (las actualizaciones se utilizanutf8ToInt
para eliminar algunos bytes, el inicio del vector como la parte superior de la pilaT
y el usoF
indebido e integrado para evitar la inicialización de las pilas):fuente
T`` and
funciones1:nchar(y)
es más corto queseq_along(x)
. Muy buena solución por cierto :)gregexpr
es el camino a seguir.22 28 22
lugar de22 28 21
) probablemente el uso (ab) de T / F no es realmente seguro: D. Esto es más corto y parece funcionar -> ¡ Pruébelo en línea!Adelante (gforth) , 75 bytes
Pruébalo en línea!
Abusa de la pila de punto flotante, pero permite usar un
do loop
dado que el código no toca (manualmente) la pila de retorno.Explicación
[
, poner en la pila de coma flotante]
pop de la pila de coma flotante y la salida con la posición actualExplicación del código
fuente
Retina , 36 bytes
Pruébalo en línea! Explicación:
Genera una lista a partir de los resultados del partido.
Use la siguiente sustitución para generar la lista en lugar de las coincidencias.
Permita que las coincidencias se superpongan.
Esta es una aplicación de los grupos de equilibrio de .NET. El
[
coincide literalmente, luego se consumen tantos caracteres como sea posible. A medida que[
se empareja cada subsiguiente , la coincidencia se agrega a la$2
pila. Si esa pila no está vacía, podemos hacer coincidir a]
, eliminando la coincidencia de la pila. De lo contrario, podemos hacer coincidir cualquier cosa que no sea un]
([
ya se hizo coincidir anteriormente). La coincidencia se detiene cuando se encuentra con la coincidencia]
para el[
, ya que la$2
pila está (ahora) vacía en ese punto.La sustitución consta de dos variables separadas por una coma. El
.
indica que la longitud de la variable, en lugar de su valor, ser utilizado. El>
indica que la variable debe ser evaluado en términos del separador de la derecha en lugar de partido. La$`
variable se refiere al prefijo de la coincidencia, lo que significa$.`
da la posición de[
; el>
modificador modifica esto al prefijo del separador derecho de la coincidencia, que proporciona la posición de la coincidencia]
.fuente
Jalea ,
22 21 2019 bytesSin duda, es posible en Jelly en la mitad de este conteo de bytes: p ...
Un enlace monádico que acepta una lista de caracteres que devuelve una lista de listas de enteros.
Como programa completo, acepta una cadena e imprime una representación de dicha lista.
Pruébalo en línea!
¿Cómo?
fuente
œ¿
y son parientes, pero no pude encontrar una solución. Esto fue lo más cerca que tuve.SWI-Prolog 254 bytes
Ejemplo:
fuente
C (gcc) , 87 bytes
Pruébalo en línea!
Explicación
Para realizar un seguimiento de los índices de cadena del paréntesis de apertura, la cadena de entrada se sobrescribe y se usa como una pila.
Pruébalo en línea!
fuente
Jalea , 20 bytes
Pruébalo en línea!
Tiene un efecto secundario en el registro, espero que sea una función.
fuente
Japt v1.4.5, 23 bytes
Pruébalo en línea!
Desempaquetado y cómo funciona
La salida es una matriz aplanada de
[closing index, opening index]
. Si no se desea el orden inverso, agregarw
al final hace el trabajo (+1 bytes).fuente
Lisp común, 95 bytes
Versión larga Pruebashuellas dactilares:
fuente
K (ngn / k) ,
3837 bytesPruébalo en línea!
{
}
funcionar con argumentox
"[]"=\:x
dos listas booleanas para las ocurrencias de"["
y"]"
a:
asignar aa
|/
booleano "o" de las dos listas&
¿Dónde (en qué índices) están los corchetes?b:
asignar ab
-/
una lista con 1 para"["
, -1 para"]"
y 0 en todas partes+\
sumas parciales|':
máximo en pares (cada elemento maximizado con el anterior, el elemento inicial permanece igual)Esto representa la profundidad del soporte para cada personaje. Lo indexamos con
b
(la yuxtaposición es indexación) y obtenemos la profundidad del paréntesis solo para los paréntesis.=
"agrupar por": un diccionario que asigna las profundidades a los índices en los que ocurren,/
concatenar los valores en el diccionario, ignorando las claves0N 2#
remodelar a una matriz de 2 columnas (lista de listas)b@
indiceb
con cada elemento de la matrizfuente
Jalea ,
2018 bytesGuardado 1 byte gracias a @ user202729 que me informa que
µ€
es)
Pruébalo en línea!
Después de luchar con esto durante varias horas solo para que funcione ... Estoy sinceramente sorprendido de que se haya vuelto tan corto :-)
Explicación
fuente
CJam , 25 bytes
Sorprendentemente competitivo: pierde solo ante Japt y Jelly [ Editar : y Carbón y Stax :(]
Pruébalo en línea!
Explicación
fuente
Python 2 , 109 bytes
Pruébalo en línea!
fuente
Pyth ,
2826 bytesBanco de pruebas.
Por el momento es más largo que el enfoque de Mnemonic, pero siento que puedo jugar golf un poco y, afortunadamente, tampoco utiliza estructuras de pitón imperativo comoV
. La versión inicial era de 36 bytes y también tenía numerosos errores.Cómo funciona
fuente
{I#.e,t+lhfSI/LT`Y._>Q
casi funciona para 22 bytes ...Perl 5, 53 bytes
Corre como
perl -nE '<above code snippet>'
. Toma entrada a través de stdin.Como de costumbre, la solución Perl óptima para el problema es una expresión regular. Intentamos hacer coincidir cualquier par de paréntesis que no contenga ningún par dentro de él usando una clase de personaje bastante tonta (
s/\[[^][]*\]/.../
). Si la coincidencia es exitosa, reemplazamos el texto coincidente con el dígito1
una y otra vez para que no coincidamos accidentalmente con esos corchetes e imprimimos los índices de la coincidencia. Enjuague y repita.fuente
Stax , 13 bytes
Ejecutar y depurarlo
Utiliza la pila de entrada para rastrear pares de llaves abiertas. Aquí está el programa desempaquetado, sin golf y comentado.
Ejecute este
fuente
Carbón de leña , 20 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Recorra el rango implícito de la longitud de la cadena de entrada.
Enciende el personaje actual.
Si es un,
[
entonces empuje el índice actual a la variable de matriz predefinida.Si es un a
]
continuación, haga estallar el último índice de la variable de matriz e imprímalo junto con el índice actual separados por una coma y comience una nueva línea. Los formatos de salida alternativos, si son aceptables, ahorrarían algunos bytes:]I⟦⊟υιω
ahorra 2 bytes pero imprime cada índice en una línea separada, con doble espacio entre los pares de índices;]I⟦⊟υι
simplemente imprime los índices en líneas separadas, lo que dificulta distinguirlos.fuente