Sha256: 3f579e28b4768de5706061cc23f5193451817c57b260d72b9afbee1ad2a9b806

Contents?: true

Size: 927 Bytes

Versions: 71

Compression:

Stored size: 927 Bytes

Contents

#include "bracket_push.h"
#include <stdio.h>

static bool is_matching(char a, char b)
{
   if (a == '{')
      return b == '}';
   if (a == '[')
      return b == ']';
   if (a == '(')
      return b == ')';

   return false;
}

static bool is_opening(const char c)
{
   return (c == '{') || (c == '[') || (c == '(');
}

static bool is_closing(const char c)
{
   return (c == '}') || (c == ']') || (c == ')');
}

/* https://stackoverflow.com/a/2718114/6049386 , MIT, Feb 2018 */
static const char *match(const char *str)
{
   if (*str == '\0' || is_closing(*str))
      return str;

   if (is_opening(*str)) {
      const char *closer = match(str + 1);

      if (is_matching(*str, *closer))
         return match(closer + 1);

      return str;
   }

   return match(++str);
}

bool is_paired(const char *input)
{
   if (input == NULL) {
      return true;
   }

   const char *res = match(input);
   return (*res == '\0');
}

Version data entries

71 entries across 71 versions & 1 rubygems

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