Некоторые считают, что математические возможности кодировщика - это то, что отличает разработчиков от инженеров. Наверное, это правда. Я понимаю, что это моя слабость, но я не позволяю этому сдерживать меня или мешать мне пытаться. Я могу справиться с этим, просто это займет у меня дополнительное время, потому что математика - не моя сильная сторона. Создание уравнения, которое решает проблему, - самая сложная часть. Попросите меня создать Spotify, Tinder или OkCupid, и я, вероятно, смогу это сделать, но попросите меня написать алгоритм, как будто я программирую сборку - мне потребуется гораздо больше, чтобы заставить винтики крутиться.

В техническом задании меня попросили запрограммировать алгоритм, который мог бы проверять, сбалансированы ли фигурные скобки ({, (, и [) (],),}). Код, который я написал, не самый красивый, но он работает и на 100% принадлежит мне. Я предпочитаю не использовать чужой исходный код, если я не могу понять их процесс или точно понять, что делает код. Какой смысл им пользоваться, если я не учусь? Многое из того, что я искал по поводу соответствия фигурных скобок (к черту регулярное выражение), было немного выше того, что я мог бы решить без небольшой помощи, но, сумев выяснить шаги для решения этой проблемы, я был могу написать собственное решение.

Это заняло около 5 часов, и это было первое, что я решил сделать в течение дня после того, как проснулся со свежим мозгом.

Вот пошаговое руководство по моему процессу:

  1. Есть только 3 типа подтяжек, о которых я должен беспокоиться, поэтому я разбил их на 2 стопки, чтобы их можно было сравнить друг с другом.
  2. Каждый цикл проверяет, является ли это открывающей скобкой, если да, то переходит в open_array. Если это закрывающая фигурная скобка, она переходит в close_array. Если нет ни того, ни другого, это не то, что можно сбалансировать, поэтому он остановится на этом и вернет «Нет» для несбалансированного.
  3. Затем я перебираю open_array с индексами, чтобы увидеть, соответствует ли открытая скобка каждого индекса соответствующему обратному индексу закрывающей скобки close_array.
  4. Если предыдущий шаг немного неясен, например, у меня может быть array1, который равен [«(«, »(«, »{«, »}», »)», »)»]. Индекс 0 равен «(», поэтому он ищет индекс (o + 1) * -1, который будет индексом -1, и извлекает последний индекс. -2 извлекает предпоследний индекс, а скоро.
  5. Если этот индекс open_array совпадает с определенной скобкой, а обратный индекс close_array совпадает с соответствующей закрывающей скобкой, измените значение баланса на «да», чтобы оно было истинным. .
  6. Продолжайте перебирать оба массива, убедившись, что все совпадают. Если да, то он сбалансирован, в противном случае для сбалансированного установлено значение «Нет».

Вот и все! Я знаю, что этот код может потребовать серьезного рефакторинга. Я знаю, что есть метод сопоставления, который можно использовать с этим, а также определение хэша, который содержит открытые фигурные скобки с соответствующими закрывающими фигурными скобками. Однако я не знал, как заставить эти решения работать без использования чужого кода, поэтому сделал кое-что, что имело для меня смысл. Надеюсь, это было полезно, так как это был вопрос хакерского ранга. Для меня это определенно была хорошая практика.