Гольф A Пантези, що відповідають алгоритму


25

Вам дадуть рядок 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)]

Це , тому виграє найкоротший код у байтах для кожної мови програмування.


1
Чи має значення вихідний порядок?
wastl

1
ні, це не є.
Ветряні печива

21
"Примітка. Рядок індексовано нулем." - Дуже часто дозволити реалізаціям вибирати послідовну індексацію при подібних викликах (але, звичайно, це залежить від вас)
Джонатан Алан

1
Чи можемо ми взяти введення як масив символів?
Shaggy

7
Коштує один байт ...
dylnan

Відповіді:




5

JavaScript, 69 62 байт

Швидкий гольф у будинку поїзда. Можливо, можна покращити на.

Приймає введення як масив символів і виводить об'єкт, клавішами якого є індекси [s, а їх значення - індекси відповідних ]s.

a=>a.map((x,y)=>x==`]`?o[a.pop()]=y:x==`[`&&a.push(y),o={})&&o

Спробуйте в Інтернеті


Мені здається, що ви можете грати в гольф на мобільних пристроях. : P
Олівер

2
@Oliver, мені здається, що я взагалі можу (приблизно) набрати сенсорні екрани - повернути клавіатури!
Кудлатий

4

Haskell , 92 79 байт

g(u:a)n(']':x)=(u,n):g a(n+1)x
g a n(s:x)=g([n|s=='[']++a)(n+1)x
g[]_[]=[]
g[]0

Спробуйте в Інтернеті!

Пояснення

Ми створюємо функцію, gяка бере 3 аргументи.

  • a, що є місцями всіх невідповідних [s.

  • n, яка - кількість оброблених символів

  • x що символи необроблені.

Якщо наш перший персонаж - ]ми знімаємо uз фронту наше aі повертаємося (u,n)плюс усе, що ще залишається.

g(u:a)n(']':x)=(u,n):g a(n+1)x

Якщо наш перший персонаж не є ], це [або щось інше, ми збільшуємо nі додаємо [n|s=='[']на передню частину a. [n|s=='[']буде, [n]якщо s=='['і в []іншому випадку.

g a n(s:x)=g([n|s=='[']++a)(n+1)x

Якщо у нас немає символів, ми повертаємо порожній список.

g[]_[]=[]

1
вау, ось якийсь гарний фрагмент рекурсивних функцій. Я початківець в Haskell, це мене вразило :)
Ветряна печива

@ gnu-none Дякую! Ця відповідь, мабуть, не є оптимальною, тому я б закликав вас спробувати її побити, або зачекати, поки приїдуть серйозні гольфісти Хаскелл.
Пшеничний майстер

Я краще зачекаю, доки приїдуть серйозні гравці в гольф Haskell
Windmill Cookies

4

Java 10, 95 байт

Недійсна лямбда, що приймає рядок введення як int[]кодові точки Unicode.

s->{int r=0,w=0;for(var c:s){if(c==91)s[w++]=r;if(c==93)System.out.println(s[--w]+","+r);r++;}}

Спробуйте це в Інтернеті

Безумовно

s -> {
    int r = 0, w = 0;
    for (var c : s) {
        if (c == 91)
            s[w++] = r;
        if (c == 93)
            System.out.println(s[--w] + "," + r);
        r++;
    }
}

Подяка

  • дякую Джонатану Фреху за ідею використовувати вхідний рядок як стек ( тут )

Ви повинні визначити rі wяк частина коду, а НЕ в якості параметрів: s->{int r=0,w=0;...}.
Олів’є Грегоар

@ OlivierGrégoire Вигляд неоднозначний, але це виглядає так, що він повинен був охопити кілька порожніх входів.
Якоб

1
Відповідь, яку ви цитуєте, чітко відповідає на питання "Чи дозволяється нам брати порожній параметр, а ми ніде не будемо користуватися ?". Ви використовуєте ці входи. Я не бачу тут ніякої двозначності.
Олів'є Грегоар

Частина питання редагування робить абсолютно однозначною щодо змінної "без використання".
Олів'є Грегоар

Правильно, але тоді, як у верхній відповіді (1) не вказано, що входи не використовуються, (2) вказується, які є значення додаткових входів, і (3) згадується можливість зловживання додатковими входами? Незалежно, я переміщу змінні.
Якоб

4

vim, 89 байт

:s/\(.\)/\1<C-V><C-M>/g|g/^\[/ :norm %mm%:pu! =line('.').','.line(\"'m\")<C-V><C-M><C-X>$<C-X>J
:v/\[/d|%s/\[//g

Повідомлення

:s/\(.\)/\1<C-V><C-M>/g            " one character per line
|g/^\[/                            " for each opening square bracket:
  :norm %mm%                       "   mark the line with the matching bracket
  :pu! =line('.').','.line(\"'m\") "   write the line numbers to preceeding line
  <C-V><C-M><C-X>$<C-X>J           "   convert to 0-based counting and join lines
:v/\[/d                            " remove all non-opening bracket lines
|%s/\[//g                          " remove brackets

<C-V> дорівнює 0x16. <C-M>дорівнює 0x0d. <C-X>дорівнює 0x18.

Спробуйте в Інтернеті!


4

QBasic (QB64), 137 127 112 байт

INPUT a$
for i=0to len(a$)
c$=mid$(a$,i+1,1)
if"["=c$then
b(n)=i
n=n+1
elseif"]"=c$then
n=n-1
?b(n),i
endif
next

Нам потрібно чотири два байти, оскільки для виклику потрібна 0-індексація. Моє перше повідомлення QBasic, відгуки високо оцінені.

  • 10 байт завдяки Стінбергу
  • 3 байти завдяки Еріку Переможнику
  • 12 байт, зберігаючи у форматі файлу unix ( \r\n-> \n)

Виглядає так при виконанні:

How it looks


Хороший. Пара покажчиків: використовуйте ?замість print(компілятор автоматично розгортає це на print), вам не знадобляться пробіли між цитованими рядками та THENв IFs, і ви можете скинути iпісля NEXT.
steenbergh

@steenbergh Гм, здається, я забув видалити пробіл ... але я видалив один між 0і to? Я розгублений ...
wastl

1
Не впевнений у QB64, але я думаю, що if c$="["може стати if"["=c$, elseif c$="]"може стати elseif"]"=c$, end ifможе стати endif, і, з невеликою зміною результату, ?b(n),iможе стати ?b(n)i(QBasic 1.1 - це те, що я використовую, ваш випадок може бути іншим).
Ерік Аутгольфер

@EriktheOutgolfer все, але не ?b(n)iпрацювало
wastl

3

Pyth, 26 байт

VQIqN\[=+YZ)IqN\],.)YZ)=hZ

Спробуйте тут

Пояснення

VQIqN\[=+YZ)IqN\],.)YZ)=hZ
VQ                     =hZ   For each character in the input (indexed by Z)...
  IqN\[=+YZ)                 ... if the character is [, add the index to Y...
            IqN\],.)YZ)      ... if the character is ], output the previous index
                             and current index.

Приємно! Мій наївний підхід був 36 байт, C,x"[" MQ #.e*qb\[t+lhfSI/LT"[]"._>Q. Редагувати: Мені також вдалося трохи
вдатися до

3

R , 141 133 115 112 108 байт

function(y,x=utf8ToInt(y)){for(i in seq(x)){if(x[i]==91)F=c(i,F);if(x[i]==93){T=c(T,F[1],i);F=F[-1]}};T[-1]}

Спробуйте в Інтернеті!

Нічого особливого. 1-індексований, бо я так сказав. R на насправді не має стек, тому я спочатку використовував c, headі tailотримати той же самий буквальний ефект. Невикористана оригінальна версія (оновлення використовує utf8ToIntдля видалення деяких байтів, використовуючи початок вектора як верхню частину стека, а також зловживаючи Tта Fвбудовуючи, щоб уникнути ініціалізації стеків.):

f <- function(y, x=el(strsplit(y,""))) {
  p <- l <- NULL
  for(i in seq_along(x)) {
    if(x[[i]]=='[') {
      p <- c(p, i)
    }
    if(x[[i]]==']') {
      l <- c(l, tail(p, 1), i)
      p <- head(p, -1)
    }
  }
  l # Because I said so. Change to l-1 if you want to check the test cases.
}


і 1:nchar(y)коротше, ніж seq_along(x). Дуже приємне рішення btw :)
JayCe

Цікаво, чи gregexprце шлях.
ngm

Я спочатку намагався використовувати цей підхід, але не впевнений, чи правильно це тут.
JayCe

Рішення JayCe є хибним (перевірте результат, він повертається 22 28 22замість 22 28 21), ймовірно, (ab) використання T / F не дуже безпечне: D. Це коротше і, здається, працює -> Спробуйте в Інтернеті!
digEmAll

2

Четвертий (gforth) , 75 байт

: f 0 do dup i + c@ dup 91 = if i s>f then 93 = if f>s . i . cr then loop ;

Спробуйте в Інтернеті!

Зловживає стеком з плаваючою комою, але дозволяє використовувати, do loopоскільки код не вручну торкається стеку повернення.

Пояснення

  1. Проведіть цикл через символи в рядку
  2. Перевірте кожен символ
    1. Якщо дорівнює [, поставте на стек з плаваючою комою
    2. якщо дорівнює ]попсу зі стека з плаваючою комою та виводить із поточним положенням

Пояснення коду

0 do                 \ start a loop from 0 to string-length
  dup                \ duplicate the starting address to avoid losing it
  i + c@             \ get the address of the current position and retrieve the character
  dup                \ duplicate the character, to allow checking twice
  91 = if            \ if char = [
    i s>f            \ store the current address on the floating point stack
  then               \ end the if-statement
  93 = if            \ if char = ]
    f>s .            \ pop the starting position from the float-stack and print
    i .              \ print the current position
    cr               \ output a newline
  then               \ end the if-statement
loop                 \ end the loop

2

Сітківка , 36 байт

L$v`\[((\[)|(?<-2>])|[^]])*
$.`,$.>`

Спробуйте в Інтернеті! Пояснення:

L

Створіть список із результатів матчу.

$

Використовуйте наступну заміну, щоб генерувати список замість відповідностей.

v`

Дозвольте сірникам перекриватися.

\[((\[)|(?<-2>])|[^]])*

Це додаток балансуючих груп .NET. Значення [збігається буквально, тоді споживається якомога більше символів. Коли кожен наступний [збігається, збіг додається до $2стеку. Якщо цей стек не порожній, ми можемо зіставити а ], видаливши відповідність зі стека. В іншому випадку ми можемо зіставити все, що не є ](раніше [було вже відповідне). Збіг припиняється, коли він відповідає збігу ]для [, оскільки $2стек (зараз) порожній у цій точці.

$.`,$.>`

Підрозділ складається з двох змінних, розділених комою. .Вказує на те, що довжина змінної, а не її значення, можна використовувати. >Вказує на те, що змінна повинна бути оцінена з точки зору правої сепаратора , а не матч. $`Мінлива відноситься до префікса матчу, що означає , $.`дає позицію [; то >модифікатор змінює до префікса правого сепаратора матчу, який дає становище відповідності ].


2

Желе ,  22 21 20  19 байт

Без сумніву, в Jelly можливо навпіл цей байт: p ...

n€Ø[ḅ-µMịÄÐƤi€0ĖƊ’Ä

Монадічне посилання, що приймає список символів, який повертає список списків цілих чисел.
Як повна програма, вона приймає рядок і друкує подання згаданого списку.

Спробуйте в Інтернеті!

Як?

n€Ø[ḅ-µMịÄÐƤi€0ĖƊ’Ä - Link: list of characters    e.g. "[f[o]o!]"
  Ø[                - list of characters = ['[', ']']
n€                  - not equal? for €ach              [[0,1],[1,1],[0,1],[1,1],[1,0],[1,1],[1,1],[1,0]]
                    -     ...relating to the characters:  [     f     [     o     ]     o     !     ]
    ḅ-              - convert from base -1             [1,0,1,0,-1,0,0,-1]
                    -     ...i.e.: 1 where '['; -1 where ']'; and 0 elsewhere
      µ             - start a new monadic chain with that as the argument, say V
                Ɗ   - last 3 links as a monad (function of V):
          ÐƤ        -   for post-fixes:
         Ä          -     cumulative sum               [[1,1,2,2,1,1,1,0],[0,1,1,0,0,0,-1],[1,1,0,0,0,-1],[0,-1,-1,-1,-2],[-1,-1,-1,-2],[0,0,-1],[0,-1],-1]
            i€0     -   1st index of 0 in €ach (or 0)  [8,1,3,1,0,1,1,0]
               Ė    -   enumerate                      [[1,8],[2,1],[3,3],[4,1],[5,0],[6,1],[7,1],[8,0]]
       M            - maximal indices of V             [1,3]
        ị           - index into                       [[1,8],[3,3]]
                 ’  - decrement                        [[0,7],[2,2]]
                  Ä - cumulative sum (vectorises)      [[0,7],[2,4]]

Я намагався використовувати, œ¿і це родичі, але не змогли знайти рішення. Це було найближче у мене.
ділнан

Так, це може бути коротше, але я керував лише одним байстким байтом , а не половиною байтів. Це все ще відчувається занадто довго. :(
Ерік Аутгольфер

@EriktheOutgolfer і тут було легко врятувати 1 байт
Джонатан Аллан

2

SWI-Prolog 254 байти

d([']'|T],I,[S|Z],M,R):-J is I+1,d(T,J,Z,[',','(',S,',',I,')'|M],R).
d(['['|T],I,S,M,R):-J is I+1,d(T,J,[I|S],M,R).
d([_|T],I,S,M,R):-J is I+1,d(T,J,S,M,R).
d(_,_,_,R,R).
m(X):-atom_chars(X,A),d(A,0,[],[']'],[_|R]),atomic_list_concat(['['|R],S),print(S).

Приклад:

?- m('!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]').
'[(49,50),(42,48),(8,41),(36,39),(20,33),(21,27)]'
true 

1

C (gcc) , 87 байт

f(char*Z){for(char*z=Z,*q=z;*z;*z++-93||printf("%d,%d;",*--q,z-1-Z))*z-91||(*q++=z-Z);}

Спробуйте в Інтернеті!

Пояснення

Щоб відслідковувати рядкові індекси розкриття дужки, вхідний рядок перезаписується і використовується як стек.

f(char*Z){          // take mutable input string
 for(char*z=Z,*q=z; // copy pointer to current string index, current stack index
 *z;                // loop through the entire string
 *z++-93||          // if z == ']'
   printf("%d,%d;", // decrement stack pointer,
    *--q,z-1-Z))    //  write bracket pair position
  *z-91||           // if z == '['
   (*q++=z-Z);}     // write bracket position onto stack, increment stack pointer

Спробуйте в Інтернеті!



1

Japt v1.4.5, 23 байти

;Ë¥']?ApENo):D¥'[©NpE
A

Спробуйте в Інтернеті!

Розпаковано та як це працює

;UmDE{D==']?ApENo):D=='[&&NpE
A

;                              Use alternative set of initial variables
                               A = [] is used here
 UmDE{                         Map over each char of input string...
      D==']?                     If the char is closing bracket...
            ApENo)                 Push the current index and N.pop() to A
                  :D=='[&&       Otherwise, if the char is opening bracket...
                          NpE      Push the current index to N

A     Output A

Вихід - це сплющений масив [closing index, opening index]. Якщо зворотне замовлення не бажане, додавання wв кінці виконує завдання (+1 байт).


1

Лист звичайний, 95 байт

(lambda(u &aux s)(dotimes(p(length u))(case(elt u p)(#\[(push p s))(#\](print`(,(pop s),p))))))
Довга версія
(defun par (string &aux stack)
  (dotimes (pos (length string))
    (case (char string pos)
      (#\[ (push pos stack))
      (#\] (print (list (pop stack) pos))))))
Тести
((lambda(u &aux s)(dotimes(p(length u))(case(elt u p)(#\[(push p s))(#\](print`(,(pop s),p))))))
 "!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][] ")

відбитки:

(21 27) 
(20 33) 
(36 39) 
(8 41) 
(42 48) 
(49 50)

1

К (нг / к) , 38 37 байт

{b@0N 2#,/=(|':+\-/a)b:&|/a:"[]"=\:x}

Спробуйте в Інтернеті!

{ } функція з аргументом x

"[]"=\:xдва булеві списки для виникнення "["та"]"

a: призначити a

|/ булевий "або" з двох списків

& де (за якими індексами) дужки?

b: призначити b

-/список з 1 для "[", -1 для "]"та 0 скрізь

+\ часткові суми

|': парні максимуми (кожен елемент максимізований з попереднім, початковий елемент залишається тим самим)

Це відображає глибину дужки для кожного символу. Індексуємо його за допомогою b(супозиція - це індексація) і отримуємо глибину дужки лише для дужок.

= "групи по" - словник, який відображає глибини до показників, при яких вони відбуваються

,/ об'єднати значення у словнику, ігноруючи клавіші

0N 2# переформатуйте на матрицю з двома стовпцями (список списків)

b@індекс bз кожним елементом матриці


1

Желе , 20 18 байт

Збережено 1 байт завдяки @ user202729, який повідомив мені, що µ€це)

ẹⱮØ[µ³ḣċþØ[_/Ụị)Z’

Спробуйте в Інтернеті!

Після боротьби з цим протягом декількох годин просто для того, щоб він працював ... Я чесно здивований, що це стало таким коротким :-)

Пояснення

ẹⱮØ[µ³ḣċþØ[_/Ụị)Z’   Main link. Argument: s (string)  '[a[b]c[]][d]'
  Ø[                 Shortcut for the string "[]".
 Ɱ                   For each char in the "[]":
ẹ                      Find the indices of each occurrence in the input.
                     For our example, this gives the array [[1, 3, 7, 10], [5, 8, 9, 12]].

    µ                Begin a new monadic chain, with said array as its argument.
               )     For each of the two sub-arrays q within the array:
                         [[1, 3, 7, 10], [5, 8, 9, 12]]
     ³ḣ                For each item n in q, take the first n chars of the input.
                         [['[',     '[a[',      '[a[b]c[',   '[a[b]c[]]['],
                          ['[a[b]', '[a[b]c[]', '[a[b]c[]]', '[a[b]c[]][d]']]
        þØ[            For each string s in this, and each char c in "[]":
       ċ                 Count the occurrences of c in s.
                         [[[1, 0],  [2, 0],     [3, 1],      [4, 3]],
                          [[2, 1],  [3, 2],     [3, 3],      [4, 4]]]
           _/          Reduce each pair by subtraction. This is the number of open brackets
                         at each position.
                         [[1, 2, 2, 1], [1, 1, 0, 0]]
             U         Sort the indices by their values, using position as a tiebreaker.
                         [[1, 4, 2, 3], [3, 4, 1, 2]]
              ị        Index these values back into q.
                         [[1, 10, 3, 7], [9, 12, 5, 8]]

               )     Start a new monadic chain with the result as its argument.
                Z    Zip; transpose rows and columns.
                         [[1, 9], [10, 12], [3, 5], [7, 8]]
                 ’   Decrement; switch to 0-indexing.
                         [[0, 8], [9, 11], [2, 4], [6, 7]]

1

CJam , 25 байт

0q{"[]"#"_ \p_p "S/=~)}/;

Напрочуд конкурентоспроможний - програє лише Япту та Желе [ Редагувати : і Вугілля та Стакс :(]

Спробуйте в Інтернеті!

Пояснення

0                          Push 0.
 q                         Push the input.
  {                   }/   For each character in the input:
   "[]"#                     Find index of this character in the string "[]" (or -1 if not found).
                   =         Use this index to choose
        "       "S/            one of the following snippets
                    ~          and execute it:
         _                       If it was 0 ('['), duplicate the number on the stack.
           \p_p                  If it was 1 (']'), print the current number and the one under it.
                                 If it was -1, do nothing.
                     )       Increment the number on top of the stack.
                        ;  Delete the number.


0

Pyth ,  28  26 байт

{I#.e,t+lhfSI/LT`Y+._>Qk\]

Тестовий набір.

На даний момент це довше, ніж підхід Мнемоніка , але я відчуваю, що я можу трохи пограти вниз, і це, на щастя, також не використовує пітонічно-імперативних структур, якV . Початкова версія складала 36 байт, а також мала численні помилки.

Як це працює

{I # .e, t + lhfSI / LT`Y + ._> Qk \] - Повна програма. Бере цитований рядок Q від STDIN.
   .e - Перелічена карта. k = індекс ітерації, b = елемент струму.
                     > Qk - Отримайте елементи Q за показниками, більшими за k.
                   ._ - Створює всі префікси цього.
                  + \] - І додайте "]" (для обробки деяких кращих справ).
          f - Фільтр по цьому списку з T = поточним елементом.
              L `Y - для кожного символу в str ([])," [] "...
             / Т - ... Порахуйте випадки його в Т.
           SI - І перевірте, чи впорядковуються значення все більше.
         h - Голова. Отримайте перший елемент.
       + l - Отримайте довжину цього + k.
      t - зменшення (на 1).
     , - І з’єднайте це значення з k. Повертає [i, k], де я є
                             індекс відповідних] і k - індекс [.
  # - Фільтруйте цей список за:
{Я - Пара інваріантна щодо дедуплікації.

{I#.e,t+lhfSI/LT`Y._>Q aaalmost працює на 22 байти ...
Містер Xcoder

0

Perl 5, 53 байти

say"$-[0] ".($+[0]-1)while s/\[[^][]*\]/1x length$&/e

Виконати як perl -nE '<above code snippet>'. Вводиться через stdin.

Як завжди, оптимальне рішення проблеми Perl - це регулярний вираз. Ми намагаємось зіставити будь-яку пару дужок, яка не містить пар в ній, використовуючи досить нерозумний клас символів ( s/\[[^][]*\]/.../). Якщо збіг пройшов успішно, ми замінюємо зіставлений текст цифрою 1знову і знову, щоб ми не випадково повторили ці дужки знову, і роздруковуємо індекси відповідності. Промийте і повторіть.


0

Стакс , 13 байт

é√p(l▓1½\á²ë(

Запустіть і налагоджуйте його

Він використовує стек вводу для відстеження відкритих пар брекетів. Ось програму розпаковують, не розгортають і коментують.

F       iterate over input characters
 .][I   get the index of the character in the string "[]", or -1
 ^|cv   skip the rest of this iteration if index was -1
 i~     push the current iteration index to the input stack
 C      skip the rest of this iteration if index was 0
 \      form a pair with the top two items from the input stack
 JP     join with space, and print

Виконати цей


0

Вугілля деревне , 20 байт

FLθ≡§θι[⊞υι]«I⊟υ,Iι⸿

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

FLθ

Переведіть петлю над неявним діапазоном довжини вхідного рядка.

≡§θι

Увімкніть поточний символ.

[⊞υι

Якщо це [тоді, натисніть поточний індекс на заздалегідь задану змінну масиву.

]«I⊟υ,Iι⸿

Якщо це ]тоді, виведіть останній індекс зі змінної масиву та надрукуйте його та поточний індекс, відокремлений комою, і запустіть новий рядок. Альтернативні формати виводу, якщо прийнятні, дозволять зберегти деякі байти: ]I⟦⊟υιωзберігає 2 байти, але друкує кожен індекс в окремому рядку, подвійний інтервал між парами індексів; ]I⟦⊟υιпросто друкує індекси на окремих рядках, що ускладнює їх розрізнення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.