Вам будет предоставлена строка s
. Гарантируется, что строка имеет равные и хотя бы один [
s и ]
s. Также гарантируется, что кронштейны сбалансированы. Строка также может содержать другие символы.
Цель состоит в том, чтобы вывести / вернуть список кортежей или список списков, содержащих индексы каждого [
и ]
пары.
примечание: строка с нулевым индексом.
Пример:
!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]
должен вернуться
[(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]
или что-то эквивалентное этому. Кортежи не нужны. Списки также могут быть использованы.
Тестовые случаи:
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)]
Это код-гольф , поэтому выигрывает самый короткий код в байтах для каждого языка программирования.
code-golf
string
balanced-string
Печенье мельницы
источник
источник
Ответы:
Brain-Flak Classic , 108 байт
Попробуйте онлайн!
Сохраняет каждое отверстие
[
в правильном стеке и выводит всякий раз, когда мы нажимаем]
.источник
Python 2 , 74 байта
Попробуйте онлайн!
источник
JavaScript,
6962 байтаНемного о гольфе в поезде домой. Возможно, может быть улучшено.
Принимает ввод как массив символов и выводит объект с ключами, являющимися индексами
[
s, а их значения - индексами соответствующих им]
s.Попробуйте онлайн
источник
Haskell ,
9279 байтовПопробуйте онлайн!
объяснение
Мы создаем функцию,
g
которая принимает 3 аргумента.a
, который является местоположением всех непревзойденных[
с.n
, которое является количеством обработанных символовx
что символы необработанные.Если наш первый символ -
]
мы убираемu
спереди нашa
и возвращаем(u,n)
плюс все остальное.Если наш первый символ - нет
]
, то есть[
или что-то еще, мы увеличиваемn
и добавляем[n|s=='[']
в началоa
.[n|s=='[']
будет[n]
еслиs=='['
и[]
иначе.Если у нас нет символов, мы возвращаем пустой список.
источник
Java 10, 95 байт
Пустая лямбда, принимающая входную строку как
int[]
кодовые точки Юникода.Попробуйте онлайн
Ungolfed
Подтверждения
источник
r
иw
как часть кода, а не в качестве параметров:s->{int r=0,w=0;...}
.vim, 89 байт
аннотированный
<C-V>
0x16.<C-M>
0x0d.<C-X>
0x18.Попробуйте онлайн!
источник
QBasic (QB64),
137127112 байтовНам нужны
четыредвух байта, потому что задача требует 0-индексации. Мой первый пост QBasic, обратная связь приветствуется.\r\n
->\n
)Выглядит так при исполнении:
источник
?
вместоprint
(компилятор автоматически расширяет это доprint
), вам не нужны пробелы между строками в кавычках иTHEN
вIF
s, и вы можете удалитьi
послеNEXT
.0
иto
? Я в замешательстве ...if c$="["
может статьif"["=c$
,elseif c$="]"
может статьelseif"]"=c$
,end if
может статьendif
и, с небольшим изменением выходных данных,?b(n),i
может стать?b(n)i
(QBasic 1.1 - это то, что я использую, ваш случай может отличаться).?b(n)i
работаетPyth, 26 байт
Попробуй здесь
объяснение
источник
C,x"[" MQ #.e*qb\[t+lhfSI/LT"[]"._>Q
. Редактировать: я тоже немного преуспел в игре в гольф, сейчас мне меньше 30.R ,
141 133 115 112108 байтПопробуйте онлайн!
Ничего особенного. 1-индексированный, потому что я так сказал. У R на самом деле нет стеков, поэтому я изначально использовал
c
,head
иtail
получить тот же самый буквальный эффект. Развернутая оригинальная версия (обновляет, используя,utf8ToInt
чтобы удалить некоторые байты, используя начало вектора в качестве вершины стека, и злоупотребляяT
иF
встроенными, чтобы избежать инициализации стеков.):источник
T`` and
F`1:nchar(y)
короче чемseq_along(x)
. Очень хорошее решение, кстати :)gregexpr
это путь?22 28 22
вместо22 28 21
), вероятно, использование (ab) T / F не совсем безопасно: D. Это короче и похоже на работу -> Попробуйте онлайн!Forth (gforth) , 75 байтов
Попробуйте онлайн!
Злоупотребляет стеком с плавающей запятой, но позволяет использовать a,
do loop
поскольку код не (вручную) касается стека возврата.объяснение
[
, положить в стек с плавающей запятой]
pop из стека с плавающей точкой и выводится с текущей позициейКод Объяснение
источник
Сетчатка , 36 байт
Попробуйте онлайн! Объяснение:
Создайте список из результатов матча.
Используйте следующую замену для создания списка вместо совпадений.
Разрешить совпадения совпадений
Это приложение балансировочных групп .NET.
[
Подобран в буквальном смысле, то , как много символов , сколько возможно потребляется. При[
сопоставлении каждого последующего совпадение добавляется в$2
стек. Если этот стек не пустой, мы можем сопоставить]
, удалив совпадение из стека. В противном случае мы можем сопоставить все, что не является]
([
ранее уже было сопоставлено). Совпадение прекращается, когда оно встречает совпадение]
для[
, поскольку$2
стек (сейчас) пуст в этой точке.Подстановка состоит из двух переменных, разделенных запятой.
.
Указывает на то, что длина переменной, а не ее значение, можно использовать.>
Указывает на то, что переменная должна быть оценена с точки зрения правой сепаратора , а не матч.$`
Переменная относится к префиксу матча, что означает ,$.`
дает позицию[
; то>
модификатор изменяет к префиксу правого сепаратора матча, который дает положение соответствия]
.источник
Желе ,
22 21 2019 байтБез сомнения, в Jelly это возможно вдвое меньше: p ...
Монадическая ссылка, принимающая список символов, который возвращает список списков целых чисел.
Как полная программа, она принимает строку и печатает представление указанного списка.
Попробуйте онлайн!
Как?
источник
œ¿
и это родственники, но не смог найти решение. Это было ближе всего, что я получил.SWI-Пролог 254 байта
Пример:
источник
C (gcc) , 87 байт
Попробуйте онлайн!
объяснение
Чтобы отслеживать строковые индексы открывающей скобки, входная строка перезаписывается и используется в качестве стека.
Попробуйте онлайн!
источник
Желе , 20 байт
Попробуйте онлайн!
Это имеет побочный эффект на регистр, надеюсь, что это может быть функцией.
источник
Japt v1.4.5, 23 байта
Попробуйте онлайн!
Распаковано и как это работает
На выходе получается плоский массив
[closing index, opening index]
. Если обратный порядок нежелателен, добавлениеw
в конце делает работу (+1 байт).источник
Common Lisp, 95 байт
Длинная версия тестыпечатает:
источник
K (нгн / к) ,
3837 байтПопробуйте онлайн!
{
}
функция с аргументомx
"[]"=\:x
два логических списка для случаев"["
и"]"
a:
назначить наa
|/
логическое «или» из двух списков&
где (при каких показателях) скобки?b:
назначить наb
-/
список с 1 для"["
, -1 для"]"
и 0 везде+\
частичные суммы|':
попарные максимумы (каждый элемент максируется с предыдущим, исходный элемент остается тем же)Это представляет глубину скобки для каждого символа. Индексируем это
b
(сопоставление индексирует) и получаем глубину скобок только для скобок.=
«group by» - словарь, отображающий глубину на индексы, при которых они встречаются,/
объединить значения в словаре, игнорируя ключи0N 2#
преобразовать в матрицу из 2 столбцов (список списков)b@
индексb
с каждым элементом матрицыисточник
Желе ,
2018 байтСохраненный 1 байт благодаря @ user202729 сообщил мне , что
µ€
это)
Попробуйте онлайн!
После борьбы с этим в течение нескольких часов, чтобы заставить его работать ... Я честно удивлен, что это получилось так коротко :-)
объяснение
источник
CJam , 25 байтов
Удивительно конкурентоспособный - проигрывает только Джапту и Желе [ Править : и древесный уголь и Stax :(]
Попробуйте онлайн!
объяснение
источник
Python 2 , 109 байт
Попробуйте онлайн!
источник
Pyth ,
2826 байтовТестирование.
На данный момент это дольше, чем подход Mnemonic, но я чувствую, что могу немного поиграть в эту игру, и к счастью, она также не использует Python-императивные структуры, такие какV
. Начальная версия была 36 байтов и также имела многочисленные ошибки.Как это работает
источник
{I#.e,t+lhfSI/LT`Y._>Q
aaalmost работает для 22 байтов ...Perl 5, 53 байта
Запустить как
perl -nE '<above code snippet>'
. Принимает ввод через стандартный ввод.Как обычно, оптимальным Perl-решением проблемы является регулярное выражение. Мы пытаемся сопоставить любую пару скобок, в которой нет пар, используя довольно глупый класс символов (
s/\[[^][]*\]/.../
). Если совпадение прошло успешно, мы заменяем сопоставленный текст цифрой1
снова и снова, чтобы мы случайно не этими скобками, и распечатали индексы совпадения. Промыть и повторить.источник
Stax , 13 байт
Запустите и отладьте его
Он использует входной стек для отслеживания открытых пар скобок. Вот программа распакована, разархивирована и прокомментирована.
Запустите этот
источник
Древесный уголь , 20 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Цикл по неявному диапазону длины входной строки.
Включить текущий персонаж.
Если это,
[
то нажмите текущий индекс в предопределенную переменную массива.Если это,
]
тогда извлеките последний индекс из переменной массива и напечатайте его, а текущий индекс разделите запятой и начните новую строку. Альтернативные выходные форматы, если это приемлемо, будут сохранять несколько байтов:]I⟦⊟υιω
сохраняются 2 байта, но каждый индекс печатается на отдельной строке, с двойным интервалом между парами индексов;]I⟦⊟υι
просто печатает индексы на отдельных строках, что затрудняет их различение.источник