aboutsummaryrefslogtreecommitdiff
path: root/challenge-042/ndelucca/perl/ch-2.pl
blob: 630f22bc2821bb89266cce7d00a607e2a8761f1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/perl

# TASK #2
# Balanced Brackets

# Write a script to generate a string with random number of ( and ) brackets. Then make the script validate the string if it has balanced brackets.

# For example:
# () - OK
# (()) - OK
# )( - NOT OK
# ())() - NOT OK

use strict;
use warnings;

# We get random length for the string, but we leave it to the user to explore a fixed length
my $range = shift @ARGV || rand(24);

# String Length
my $len = rand($range);

# String Generator
my $lisp = '';
$lisp .= rand() < 0.5 ? '(' : ')' for 0 .. $len;

print "Generated: $lisp\n";

my $paired_matches = $lisp =~ s/\(\)//g;
$paired_matches = $lisp =~ s/\(\)//g while $paired_matches;

print "Un-paired brackets: $lisp\n";
print length ($lisp) > 0 ? "It's NOT balanced\n" : "It's balanced!\n";

# Turns out it's very difficult to get balanced strings
# I used 2 and 4 for demonstration

# $ perl ch-2.pl 2
# Generated: ()
# Un-paired brackets:
# It's balanced!

# $ perl ch-2.pl 2
# Generated: )(
# Un-paired brackets: )(
# It's NOT balanced

# $ perl ch-2.pl 4
# Generated: ()()
# Un-paired brackets:
# It's balanced!

# $ perl ch-2.pl 4
# Generated: (((
# Un-paired brackets: (((
# It's NOT balanced

# $ perl ch-2.pl 4
# Generated: (()
# Un-paired brackets: (
# It's NOT balanced

# $ perl ch-2.pl 4
# Generated: ))((
# Un-paired brackets: ))((
# It's NOT balanced

# $ perl ch-2.pl 4
# Generated: ))()
# Un-paired brackets: ))
# It's NOT balanced

# $ perl ch-2.pl 4
# Generated: (())
# Un-paired brackets:
# It's balanced!