Sha256: 778a5c16656f59357ddaf428123384c034fcf237035ed67d0937f73ede5a6fbb

Contents?: true

Size: 1.23 KB

Versions: 396

Compression:

Stored size: 1.23 KB

Contents

<?php

function brackets_match(string $input) : bool
{
    $characters = str_split($input);

    $bracketsStack = array_reduce(
        $characters,
        function (array $stack, string $char) : array {
            $isOpeningBracket = function ($char) {
                return in_array($char, ['[', '{', '(']);
            };

            $isClosingBracket = function ($char) {
                return in_array($char, [']', '}', ')']);
            };

            $matchesLastOpenBracket = function ($char, $stack) {
                $prev = array_pop($stack);

                $lookupOpeningBracket = [
                    ']' => '[',
                    '}' => '{',
                    ')' => '(',
                ];

                return $lookupOpeningBracket[$char] == $prev;
            };

            if ($isOpeningBracket($char)) {
                array_push($stack, $char);
            }

            if ($isClosingBracket($char)) {
                if ($matchesLastOpenBracket($char, $stack)) {
                    array_pop($stack);
                } else {
                    array_push($stack, $char); // unopened bracket
                }
            }
            return $stack;
        },
        []
    );

    return empty($bracketsStack);
}

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.179 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.178 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.177 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.176 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.175 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.174 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.173 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.172 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.171 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.170 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.169 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.167 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.166 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.165 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.164 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.163 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.162 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.161 tracks/php/exercises/bracket-push/example.php
trackler-2.2.1.160 tracks/php/exercises/bracket-push/example.php