< Zpět na seznam úloh

23 Správné závorky

var datasets = [
  {arg: "1-2", out: -1},
  {arg: "5+(3-2[)*3]", out: 7},
  {arg: "[2+3(a/4[+b]**3)]*{7/3}", out: -1},
  {arg: ":)", out: 1},
  {arg: "[]({})[(){}]{([]{()})}", out: -1},
  {arg: "(:", out: 1},
]
var names = ['vyraz'];

Dostáváme libovolně dlouhý aritmetický výraz. Nezajímá nás jeho výsledek ani, jestli ten výraz jde vůbec spočítat. Chceme jen vědět, jestli jsou v něm smysluplně uspořádané závorky.

Jako závorky počítáme ty kulaté (), hranaté [] a složené {}. Smějí být použité v libovolném pořadí, ale zavřít smíme vždycky jen tu závorku, kterou jsme posledně otevřeli.

Pokud je v uzávorkování chyba, program má vrátit index prvního znaku, kde je závorka použitá špatně. (Index prvního znaku je pochopitelně nula.) Pokud je chyba v tom, že výraz nesměl v danou chvíli končit, program má vrátit délku řetězce. Pokud je uzávorkování správně, program má vrátit hodnotu -1.

def main(vyraz):
  for i, znak in enumerate(vyraz):
    if znak == ")":
      return i
  return -1

Rada: řetězec textu se dá procházet for cyklem.