Você receberá uma string s
. É garantido que a corda tem iguais e pelo menos um [
s e ]
s. Também é garantido que os suportes estejam equilibrados. A cadeia também pode ter outros caracteres.
O objetivo é produzir / retornar uma lista de tuplas ou uma lista de listas contendo índices de cada [
e ]
par.
nota: a sequência é indexada a zero.
Exemplo:
!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]
deve retornar
[(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]
ou algo equivalente a isso. Tuplas não são necessárias. As listas também podem ser usadas.
Casos de teste:
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)]
Isso é código-golfe , então o código mais curto em bytes para cada linguagem de programação vence.
code-golf
string
balanced-string
Bolinhos de moinho de vento
fonte
fonte
Respostas:
Clássico Brain-Flak , 108 bytes
Experimente online!
Armazena cada abertura
[
na pilha certa e produz sempre que atingimos a]
.fonte
Python 2 , 74 bytes
Experimente online!
fonte
JavaScript,
6962 bytesUm pouco rápido de golfe no trem para casa. Provavelmente pode ser melhorado.
Recebe entrada como uma matriz de caracteres e gera um objeto com as chaves sendo os índices de se
[
seus valores são os índices de seus]
s correspondentes .Experimente online
fonte
Haskell ,
9279 bytesExperimente online!
Explicação
Criamos uma função
g
que leva 3 argumentos.a
, que são os locais de todos os[
s sem correspondência .n
, que é o número de caracteres processadosx
que são os personagens não processados.Se nosso primeiro personagem for
]
, removemosu
da frente nossoa
e retornamos(u,n)
mais o que resta.Se o nosso primeiro caractere não for
]
, isso é um[
ou outro, incrementamosn
e adicionamos[n|s=='[']
à frente dea
.[n|s=='[']
será[n]
ses=='['
e[]
caso contrário.Se estivermos sem caracteres, retornamos a lista vazia.
fonte
Java 10, 95 bytes
Um lambda nulo usando a sequência de entrada como um
int[]
dos pontos de código Unicode.Experimente Online
Ungolfed
Agradecimentos
fonte
r
ew
como parte do código, não como parâmetros:s->{int r=0,w=0;...}
.vim, 89 bytes
Anotado
<C-V>
é 0x16.<C-M>
é 0x0d.<C-X>
é 0x18.Experimente online!
fonte
QBasic (QB64),
137127112 bytesPrecisamos de
quatrodois bytes porque o desafio requer indexação 0. Meu primeiro post QBasic, o feedback é apreciado.\r\n
->\n
)É assim quando executado:
fonte
?
vez deprint
(o compilador expande isso automaticamente paraprint
), você não precisa dos espaços entre as seqüências de caracteres citadas eTHEN
nosIF
s, e pode soltar oi
depoisNEXT
.0
eto
? Estou confuso ...if c$="["
pode se tornarif"["=c$
,elseif c$="]"
pode se tornarelseif"]"=c$
,end if
pode se tornarendif
e, com uma ligeira alteração na saída,?b(n),i
pode se tornar?b(n)i
(QBasic 1.1 é o que eu uso, seu caso pode ser diferente).?b(n)i
funcionouPitão, 26 bytes
Experimente aqui
Explicação
fonte
C,x"[" MQ #.e*qb\[t+lhfSI/LT"[]"._>Q
,. Edit: eu sucedi golfe mina um pouco também, eu sou agora abaixo de 30.R ,
141 133 115 112108 bytesExperimente online!
Nada especial. 1 indexado, porque eu disse isso. R realmente não tem pilhas, então eu usei originalmente
c
,head
etail
para obter o mesmo efeito literal. Versão original não gasta (atualiza usandoutf8ToInt
para remover alguns bytes, usando o início do vetor como o topo da pilha e abusandoT
eF
builtins para evitar a inicialização das pilhas.):fonte
T`` and
f`1:nchar(y)
é mais curto queseq_along(x)
. Very nice solução btw :)gregexpr
é o caminho a percorrer.22 28 22
vez de22 28 21
) provavelmente o (ab) uso de T / F não é realmente seguro: D. É mais curto e parece funcionar -> Experimente online!Quarto (gforth) , 75 bytes
Experimente online!
Abusa da pilha de ponto flutuante, mas permite o uso de uma
do loop
vez que o código não toca (manualmente) na pilha de retorno.Explicação
[
, coloque na pilha de ponto flutuante]
pop da pilha de ponto flutuante e saída com a posição atualCódigo Explicação
fonte
Retina , 36 bytes
Experimente online! Explicação:
Gere uma lista a partir dos resultados da correspondência.
Use a seguinte substituição para gerar a lista em vez das correspondências.
Permita que as correspondências se sobreponham.
Esta é uma aplicação dos grupos de balanceamento do .NET. O
[
é correspondido literalmente, e o máximo de caracteres possível é consumido. À medida que cada subseqüente[
é correspondida, a correspondência é adicionada à$2
pilha. Se essa pilha não estiver vazia, podemos corresponder a]
, removendo a correspondência da pilha. Caso contrário, podemos corresponder a qualquer coisa que não seja um]
(o que[
já foi correspondido anteriormente). O jogo pára quando atende a correspondência]
para o[
, uma vez que a$2
pilha é (agora) esvaziar naquele ponto.A substituição consiste em duas variáveis separadas por vírgula. O
.
indica que o comprimento da variável, em vez de seu valor, deve ser usado. A>
indica que a variável deve ser avaliada em termos do separador da mão direita ao invés do jogo. A$`
variável refere-se ao prefixo da correspondência, o que significa$.`
indica a posição do[
; o>
modificador altera isso para o prefixo do separador direito da partida, que fornece a posição da correspondência]
.fonte
Geléia ,
22 21 2019 bytesSem dúvida, é possível no Jelly pela metade dessa contagem de bytes: p ...
Um link monádico que aceita uma lista de caracteres que retorna uma lista de listas de números inteiros.
Como um programa completo, ele aceita uma string e imprime uma representação da referida lista.
Experimente online!
Quão?
fonte
œ¿
e é parentes, mas não consegui encontrar uma solução. Este foi o mais perto que eu cheguei.SWI-Prolog 254 bytes
Exemplo:
fonte
C (gcc) , 87 bytes
Experimente online!
Explicação
Para acompanhar os índices de sequência do colchete de abertura, a sequência de entrada é substituída e usada como uma pilha.
Experimente online!
fonte
Gelatina , 20 bytes
Experimente online!
Tem um efeito colateral no registro, espero que possa ser uma função.
fonte
Japt v1.4.5, 23 bytes
Experimente online!
Descompactado e como funciona
A saída é uma matriz achatada de
[closing index, opening index]
. Se a ordem inversa não for desejada, a adiçãow
no final faz o trabalho (+1 bytes).fonte
Lisp comum, 95 bytes
Versão longa Testesimpressões:
fonte
K (ngn / k) ,
3837 bytesExperimente online!
{
}
função com argumentox
"[]"=\:x
duas listas booleanas para as ocorrências de"["
e"]"
a:
atribuir aa
|/
booleano "ou" das duas listas&
onde (em que índices) estão os colchetes?b:
atribuir ab
-/
uma lista com 1 para"["
, -1 para"]"
e 0 em qualquer outro lugar+\
somas parciais|':
máximos em pares (cada elemento maximizado com o anterior, o elemento inicial permanece o mesmo)Isso representa a profundidade do colchete para cada caractere. Nós o indexamos com
b
(justaposição é indexação) e obtemos profundidade de colchete apenas para os colchetes.=
"agrupar por" - um dicionário mapeando as profundidades para os índices nos quais elas ocorrem,/
concatenar os valores no dicionário, ignorando as chaves0N 2#
remodelar para uma matriz de 2 colunas (lista de listas)b@
índiceb
com cada elemento da matrizfonte
Geléia ,
2018 bytesEconomizei 1 byte graças a @ user202729 informando que
µ€
é)
Experimente online!
Depois de lutar com isso por várias horas apenas para fazê-lo funcionar ... Estou sinceramente surpreso que tenha ficado tão curto assim :-)
Explicação
fonte
CJam , 25 bytes
Surpreendentemente competitivo - perde apenas para Japt e Jelly [ Edit : and Charcoal and Stax :(]
Experimente online!
Explicação
fonte
Python 2 , 109 bytes
Experimente online!
fonte
Pitão ,
2826 bytesSuíte de teste.
No momento, é mais longo do que a abordagem de Mnemonic, mas eu sinto que posso jogar um pouco mais e isso felizmente também não usa estruturas imperativas em PythonV
. A versão inicial tinha 36 bytes e também possuía vários bugs.Como funciona
fonte
{I#.e,t+lhfSI/LT`Y._>Q
aaalmost funciona para 22 bytes ...Perl 5, 53 bytes
Correr como
perl -nE '<above code snippet>'
. Toma entrada através de stdin.Como sempre, a solução Perl ideal para o problema é uma expressão regular. Tentamos corresponder a qualquer par de colchetes que não contenha nenhum par usando uma classe de caracteres um tanto boba (
s/\[[^][]*\]/.../
). Se a correspondência for bem-sucedida, substituímos o texto correspondente pelo dígito1
repetidas vezes para não coincidir acidentalmente com esses colchetes e imprimimos os índices da correspondência. Enxague e repita.fonte
Stax , 13 bytes
Execute e depure
Ele usa a pilha de entrada para rastrear pares de chaves abertas. Aqui está o programa descompactado, não destruído e comentado.
Execute este
fonte
Carvão , 20 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Loop sobre o intervalo implícito do comprimento da sequência de entrada.
Ligue o caractere atual.
Se for um
[
, envie o índice atual para a variável de matriz predefinida.Se for um
]
, pop o índice mais recente da variável da matriz e imprima-o e o índice atual separado por vírgula e inicie uma nova linha. Formatos de saída alternativos, se aceitáveis, economizariam alguns bytes:]I⟦⊟υιω
economiza 2 bytes, mas imprime cada índice em uma linha separada, espaçando duas vezes os pares de índices;]I⟦⊟υι
simplesmente imprime os índices em linhas separadas, dificultando sua distinção.fonte