Otrzymasz ciąg znaków s
. Gwarantuje to, że ciąg ma równych i przynajmniej jeden [
s i ]
s. Zagwarantowane jest również wyważenie wsporników. Ciąg może mieć także inne znaki.
Celem jest wyprowadzenie / zwrócenie listy krotek lub listy list zawierającej indeksy każdego [
i ]
pary.
Uwaga: ciąg znaków jest indeksowany od zera.
Przykład:
!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]
powinien wrócić
[(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]
lub coś równoważnego z tym. Krotki nie są konieczne. Można również używać list.
Przypadki testowe:
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)]
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach dla każdego języka programowania.
code-golf
string
balanced-string
Ciasteczka Wiatrak
źródło
źródło
Odpowiedzi:
Brain-Flak Classic , 108 bajtów
Wypróbuj online!
Przechowuje każdy otwór
[
w odpowiednim stosie i wysyła za każdym razem, gdy trafimy a]
.źródło
Python 2 , 74 bajty
Wypróbuj online!
źródło
JavaScript,
6962 bajtówSzybki golf w pociągu do domu. Prawdopodobnie można to poprawić.
Pobiera dane wejściowe jako tablicę znaków i wysyła obiekt z kluczami będącymi wskaźnikami
[
s, a ich wartości są wskaźnikami odpowiadających im]
s.Wypróbuj online
źródło
Haskell ,
9279 bajtówWypróbuj online!
Wyjaśnienie
Tworzymy funkcję,
g
która przyjmuje 3 argumenty.a
, czyli lokalizacje wszystkich niedopasowanych[
s.n
, czyli liczba przetworzonych znakówx
czyli znaki nieprzetworzone.Jeśli naszą pierwszą postacią jest to,
]
że usuwamyu
z przodu nasząa
i wracamy(u,n)
plus wszystko, co pozostanie.Jeśli naszą pierwszą postacią nie jest
]
, to jest albo[
coś innego, zwiększamyn
i dodajemy[n|s=='[']
z przodua
.[n|s=='[']
będzie,[n]
jeślis=='['
i[]
inaczej.Jeśli brakuje nam znaków, zwracamy pustą listę.
źródło
Java 10, 95 bajtów
Pusta lambda przyjmująca ciąg wejściowy jako punkt
int[]
kodu Unicode.Wypróbuj online
Nie golfił
Podziękowanie
źródło
r
iw
jako część kodu, a nie jako parametry:s->{int r=0,w=0;...}
.vim, 89 bajtów
Adnotacja
<C-V>
to 0x16.<C-M>
to 0x0d.<C-X>
to 0x18.Wypróbuj online!
źródło
QBasic (QB64),
137127112 bajtówPotrzebujemy
czterechdwóch bajtów, ponieważ wyzwanie wymaga 0-indeksowania. Mój pierwszy post QBasic, opinie są mile widziane.\r\n
->\n
)Po wykonaniu wygląda tak:
źródło
?
zamiastprint
(kompilator automatycznie to rozszerzaprint
), nie potrzebujesz spacji między cytowanymi ciągamiTHEN
w tychIF
s, a można upuścići
poNEXT
.0
ito
? Jestem zdezorientowany ...if c$="["
może stać sięif"["=c$
,elseif c$="]"
stać sięelseif"]"=c$
,end if
stać sięendif
, a przy niewielkiej zmianie danych wyjściowych?b(n),i
może stać się?b(n)i
(QBasic 1.1 jest tym, którego używam, twoja sprawa może być inna).?b(n)i
działałoPyth, 26 bajtów
Wypróbuj tutaj
Wyjaśnienie
źródło
C,x"[" MQ #.e*qb\[t+lhfSI/LT"[]"._>Q
. Edycja: Udało mi się trochęR ,
141 133 115 112108 bajtówWypróbuj online!
Nic specjalnego. 1-indeksowany, bo tak powiedziałem. R tak naprawdę nie ma stosy, więc pierwotnie stosowany
c
,head
oraztail
aby uzyskać ten sam efekt dosłownego. Niegolfowana wersja oryginalna (aktualizuje za pomocą,utf8ToInt
aby usunąć niektóre bajty, używając początku wektora jako górnej części stosu oraz nadużywającT
iF
wbudowanych, aby uniknąć inicjowania stosów.):źródło
T`` and
F`1:nchar(y)
jest krótszy niżseq_along(x)
. Bardzo fajne rozwiązanie btw :)gregexpr
jest taka droga.22 28 22
zamiast22 28 21
) prawdopodobnie użycie (ab) T / F nie jest naprawdę bezpieczne: D. To jest krótsze i wydaje się działać -> Wypróbuj online!Dalej (gforth) , 75 bajtów
Wypróbuj online!
Nadużywa stosu zmiennoprzecinkowego, ale pozwala na użycie,
do loop
ponieważ kod nie (ręcznie) dotyka stosu zwrotnego.Wyjaśnienie
[
, umieść stos zmiennoprzecinkowy]
pop z stosu zmiennoprzecinkowego i wyjście z bieżącą pozycjąObjaśnienie kodu
źródło
Siatkówka , 36 bajtów
Wypróbuj online! Wyjaśnienie:
Wygeneruj listę z wyników dopasowania.
Użyj poniższego podstawienia, aby wygenerować listę zamiast dopasowań.
Pozwól, aby mecze się nakładały.
Jest to aplikacja grup bilansujących .NET.
[
Jest dopasowany dosłownie, to jak wiele znaków jak to możliwe są konsumowane. Po[
dopasowaniu każdego kolejnego dopasowanie jest dodawane do$2
stosu. Jeśli ten stos nie jest pusty, możemy dopasować a]
, usuwając dopasowanie ze stosu. W przeciwnym razie możemy dopasować wszystko, co nie jest]
([
zostało już wcześniej dopasowane). Dopasowanie kończy się, gdy spełnia dopasowanie]
dla[
, ponieważ$2
stos jest (teraz) pusty w tym momencie.Podstawienie składa się z dwóch zmiennych oddzielonych przecinkiem.
.
Wskazuje długość zmienną zamiast wartości być stosowane.>
Wskazuje, że zmienna powinna być oceniana pod względem separatora prawej zamiast meczu.$`
Zmienna oznacza prefiks meczu, co oznacza,$.`
daje pozycję z poniższych[
; że>
modyfikator zmienia to prefiksem właściwym separatorem meczu, co daje pozycję dopasowywania]
.źródło
Galaretka ,
22 21 2019 bajtówBez wątpienia jest możliwe w galaretce w połowie tej liczby bajtów: p ...
Monadyczny link akceptujący listę znaków, który zwraca listę list liczb całkowitych.
Jako pełny program przyjmuje ciąg znaków i wyświetla reprezentację tej listy.
Wypróbuj online!
W jaki sposób?
źródło
œ¿
i to krewni, ale nie mogłem znaleźć rozwiązania. To było najbliżej.SWI-Prolog 254 bajty
Przykład:
źródło
C (gcc) , 87 bajtów
Wypróbuj online!
Wyjaśnienie
Aby śledzić indeksy łańcuchów otwierających nawias, łańcuch wejściowy jest nadpisywany i używany jako stos.
Wypróbuj online!
źródło
Galaretka , 20 bajtów
Wypróbuj online!
Ma efekt uboczny w rejestrze, mam nadzieję, że może być funkcją.
źródło
Japt v1.4.5, 23 bajty
Wypróbuj online!
Rozpakowane i jak to działa
Dane wyjściowe to spłaszczona tablica
[closing index, opening index]
. Jeśli odwrotna kolejność nie jest pożądana, dodaniew
na końcu wykonuje zadanie (+1 bajty).źródło
Common Lisp, 95 bajtów
Długa wersja Testydrukuje:
źródło
K (ngn / k) ,
3837 bajtówWypróbuj online!
{
}
funkcja z argumentemx
"[]"=\:x
dwie listy boolowskie dla wystąpienia"["
i"]"
a:
Przypisać doa
|/
boolean ”lub” z dwóch list&
gdzie (przy jakich indeksach) są nawiasy?b:
Przypisać dob
-/
lista z 1 dla"["
, -1 dla"]"
i 0 wszędzie indziej+\
sumy częściowe|':
parami maksima (każdy element maksymalny z poprzednim, element początkowy pozostaje taki sam)Reprezentuje głębokość nawiasu dla każdego znaku. Indeksujemy go za pomocą
b
(zestawienie indeksuje) i uzyskujemy głębokość nawiasów tylko dla nawiasów.=
„grupuj według” - słownik odwzorowuje głębokości odwzorowujące indeksy, w których występują,/
konkatenuj wartości ze słownika, ignorując klucze0N 2#
przekształć macierz w 2 kolumny (lista list)b@
indeksujb
z każdym elementem macierzyźródło
Galaretka ,
2018 bajtówZapisane 1 bajt dzięki @ user202729 informując mnie, że
µ€
jest)
Wypróbuj online!
Po kilku godzinach zmagania się z tym po to, żeby go uruchomić ... Jestem szczerze zaskoczony, że stało się tak krótko :-)
Wyjaśnienie
źródło
CJam , 25 bajtów
Zaskakująco konkurencyjny - przegrywa tylko z Japt i Jelly [ Edytuj : oraz Węgiel drzewny i Stax :(]
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 , 109 bajtów
Wypróbuj online!
źródło
Pyth ,
2826 bajtówZestaw testowy.
W tej chwili jest to dłuższe niż podejście Mnemonica, ale wydaje mi się, że mogę trochę pograć w golfa i to na szczęście również nie korzysta z takich struktur imperatywnych w języku PythonV
. Początkowa wersja miała 36 bajtów i zawierała także wiele błędów.Jak to działa
źródło
{I#.e,t+lhfSI/LT`Y._>Q
aaalmost działa dla 22 bajtów ...Perl 5, 53 bajtów
Uruchom jako
perl -nE '<above code snippet>'
. Pobiera dane wejściowe przez standardowe wejście.Jak zwykle optymalnym rozwiązaniem problemu dla Perla jest wyrażenie regularne. Próbujemy dopasować dowolną parę nawiasów, która nie zawiera żadnych par, używając raczej głupio wyglądającej klasy znaków (
s/\[[^][]*\]/.../
). Jeśli dopasowanie się powiedzie, zastępujemy dopasowany tekst cyfrą1
w kółko, aby przypadkowo nie dopasować tych nawiasów i drukujemy wskaźniki dopasowania. Wypłukać i powtórzyć.źródło
Stax , 13 bajtów
Uruchom i debuguj
Używa stosu wejściowego do śledzenia otwartych par nawiasów klamrowych. Oto program rozpakowany, nieposortowany i skomentowany.
Uruchom ten
źródło
Węgiel drzewny , 20 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Pętla w niejawnym zakresie długości ciągu wejściowego.
Włącz aktualny znak.
Jeśli jest to
[
a, wypchnij bieżący indeks do predefiniowanej zmiennej tablicowej.Jeśli jest to a
]
następnie usuń najnowszy indeks ze zmiennej tablicowej i wydrukuj go, a bieżący indeks oddzielamy przecinkiem i rozpoczynamy nowy wiersz. Alternatywne formaty wyjściowe, jeśli są akceptowalne, mogłyby zaoszczędzić niektóre bajty:]I⟦⊟υιω
zapisuje 2 bajty, ale drukuje każdy indeks w osobnej linii, podwójnie rozmieszczając pary indeksów;]I⟦⊟υι
po prostu drukuje indeksy w osobnych wierszach, co utrudnia ich rozróżnienie.źródło