aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-01-11 09:33:42 +0000
committerGitHub <noreply@github.com>2020-01-11 09:33:42 +0000
commite017529000f00977b2e35019ff7aa5a7a4ce8b2b (patch)
tree2b68c24287a94857a9b16b04af0ec9f83ab67b99
parentfc65bf4bdd1eae919a0f6990a91492e15f8e92e5 (diff)
parent888461dd14f7c29adbc0a49f1cb964504bd3929d (diff)
downloadperlweeklychallenge-club-e017529000f00977b2e35019ff7aa5a7a4ce8b2b.tar.gz
perlweeklychallenge-club-e017529000f00977b2e35019ff7aa5a7a4ce8b2b.tar.bz2
perlweeklychallenge-club-e017529000f00977b2e35019ff7aa5a7a4ce8b2b.zip
Merge pull request #1127 from burkhard-nickels/new-branch
Solution for PWC 42 from Burkhard Nickels.
-rw-r--r--challenge-042/burkhard-nickels/blogs.txt1
-rw-r--r--challenge-042/burkhard-nickels/perl5/ch-1.html170
-rwxr-xr-xchallenge-042/burkhard-nickels/perl5/ch-1.pl15
-rwxr-xr-xchallenge-042/burkhard-nickels/perl5/ch-1.pod165
-rwxr-xr-xchallenge-042/burkhard-nickels/perl5/ch-1.py19
-rw-r--r--challenge-042/burkhard-nickels/perl5/ch-2.html335
-rwxr-xr-xchallenge-042/burkhard-nickels/perl5/ch-2.pl41
-rwxr-xr-xchallenge-042/burkhard-nickels/perl5/ch-2.pod317
-rwxr-xr-xchallenge-042/burkhard-nickels/perl5/ch-2.py38
-rwxr-xr-xchallenge-042/burkhard-nickels/perl6/ch-1.p614
-rwxr-xr-xchallenge-042/burkhard-nickels/perl6/ch-2.p640
11 files changed, 1155 insertions, 0 deletions
diff --git a/challenge-042/burkhard-nickels/blogs.txt b/challenge-042/burkhard-nickels/blogs.txt
new file mode 100644
index 0000000000..9cb0ea99b5
--- /dev/null
+++ b/challenge-042/burkhard-nickels/blogs.txt
@@ -0,0 +1 @@
+http://pearls.dyndnss.net
diff --git a/challenge-042/burkhard-nickels/perl5/ch-1.html b/challenge-042/burkhard-nickels/perl5/ch-1.html
new file mode 100644
index 0000000000..ea1c43b93a
--- /dev/null
+++ b/challenge-042/burkhard-nickels/perl5/ch-1.html
@@ -0,0 +1,170 @@
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Perl Weekly Challenge #42 Task #1, Octal Numbers</title>
+<link rel="stylesheet" href="pwc_coloured.css" type="text/css" />
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+<table border="0" width="100%" cellspacing="0" cellpadding="3">
+<tr><td class="_podblock_" valign="middle">
+<big><strong><span class="_podblock_">&nbsp;Perl Weekly Challenge #42 Task #1, Octal Numbers</span></strong></big>
+</td></tr>
+</table>
+
+
+
+<ul id="index">
+ <li><a href="#Perl-Weekly-Challenge-42-Task-1:-Octal-Numbers">Perl Weekly Challenge #42 Task #1: Octal Numbers</a></li>
+ <li><a href="#SYNOPSIS">SYNOPSIS</a></li>
+ <li><a href="#Definition-Task-1:-Octal-Number-System">Definition Task #1: Octal Number System</a></li>
+ <li><a href="#Sourcecode-for-Perl5-and-Perl6">Sourcecode for Perl5 and Perl6</a></li>
+ <li><a href="#Sourcecode-for-Python">Sourcecode for Python</a></li>
+ <li><a href="#AUTHOR">AUTHOR</a></li>
+</ul>
+
+<h1 id="Perl-Weekly-Challenge-42-Task-1:-Octal-Numbers">Perl Weekly Challenge #42 Task #1: Octal Numbers</h1>
+
+<p>The octal number is printed with <code>printf</code> or <code>sprintf</code> and the format string <code>%o</code>. I provided two solutions, first with a <code>foreach</code> loop (Perl5) or <code>for</code> loop (Perl6), second with a <code>map</code> on one line.</p>
+
+<p>Following are some possibilities to deal with Octal numbers:</p>
+
+<ul>
+
+<li><p>printf, sprintf and &quot;%o&quot; Print with format string used in this solution.</p>
+
+</li>
+<li><p>foreach(0 .. 50) / for (0 .. 50) (Perl5/Perl6) Loop over values from 1 to 50 in Perl5 and Perl6.</p>
+
+</li>
+<li><p>@result = map { ... } (0 .. 50) Loop over values from 1 to 50 with map function.</p>
+
+</li>
+<li><p>my $number = 0644; Assignment of octal number.</p>
+
+</li>
+<li><p>my $octal = oct(644); Convert scalar to octal number.</p>
+
+</li>
+<li><p>(s)printf(&quot;0%o %d&quot;, $number, $number); Print number as octal and decimal.</p>
+
+</li>
+</ul>
+
+<h2> Download and References </h2>
+<b>Download File:</b><a href="ch-1.pl" download> Perl5 Solution PWC #42 Task #1 ch-1.pl</a><br>
+<b>Download File:</b><a href="ch-1.p6" download> Perl6 Solution PWC #42 Task #1 ch-1.p6</a><br>
+<b>Download File:</b><a href="ch-1.py" download> Python Solution PWC #42 Task #1 ch-1.py</a><br>
+<br>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code> # ./ch-1.pl - Program execution
+ # ./ch-1.p6 - Program execution
+ # perldoc ch-1.pod - POD</code></pre>
+
+<h1 id="Definition-Task-1:-Octal-Number-System">Definition Task #1: Octal Number System</h1>
+
+<p>Write a script to print decimal number 0 to 50 in Octal Number System.</p>
+
+<pre><code> For example:
+ Decimal 0 = Octal 0
+ Decimal 1 = Octal 1
+ Decimal 2 = Octal 2
+ Decimal 3 = Octal 3
+ Decimal 4 = Octal 4
+ Decimal 5 = Octal 5
+ Decimal 6 = Octal 6
+ Decimal 7 = Octal 7
+ Decimal 8 = Octal 10</code></pre>
+
+<p>and so on.</p>
+
+<h1 id="Sourcecode-for-Perl5-and-Perl6">Sourcecode for Perl5 and Perl6</h1>
+
+<p>Most important difference between Perl5 and Perl6 in this code is the loop statement <code>foreach(1 .. 50)</code> in Perl5 and <code>for (1 .. 50)</code> in Perl6. Not only that foreach becomes for, but also the important blank behind the <b>for</b> keyword.</p>
+
+<p>The <code>printf() / sprintf()</code> calls are the same. the <code>map {}, (1 .. 50)</code> is different in the comma behind the block in the Perl6 part.</p>
+
+<table class=code><tr><td class=code>
+<pre class=code><div class=t> Perl5 </div>
+ 1 <span class="synPreProc">#!/usr/bin/perl</span>
+ 2
+ 3 <span class="synStatement">use strict</span>;
+ 4 <span class="synStatement">use warnings</span>;
+ 5
+ 6 <span class="synStatement">print</span> <span class="synConstant">&quot;ch-1.pl (Version 1.0) PWC #42 Task #1: Octal Numbers</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
+ 7
+ 8 <span class="synComment"># Version 1: foreach loop with printf</span>
+ 9 <span class="synStatement">foreach</span> (<span class="synConstant">0</span> .. <span class="synConstant">50</span>) {
+ 10 <span class="synStatement">printf</span>(<span class="synConstant">&quot;Decimal: %d - Octal: %o</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>,<span class="synIdentifier">$_</span>,<span class="synIdentifier">$_</span>);
+ 11 }
+ 12
+ 13 <span class="synComment"># Version 2: map with sprintf</span>
+ 14 <span class="synStatement">print</span> <span class="synStatement">my</span> <span class="synIdentifier">@res</span> = <span class="synStatement">map {</span> <span class="synStatement">sprintf</span>(<span class="synConstant">&quot;Dec %d - Oct %o</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>,<span class="synIdentifier">$_</span>,<span class="synIdentifier">$_</span>) <span class="synStatement">}</span> (<span class="synConstant">0</span> .. <span class="synConstant">50</span>);
+</pre>
+</td><td class=code>
+<pre class=code><div class=t> Perl6 </div>
+ 1 <span class="synComment">#!/home/chuck/rakudo/bin/perl6</span>
+ 2
+ 3 <span class="synPreProc">use</span> strict<span class="synStatement">;</span>
+ 4
+ 5 <span class="synIdentifier">print</span> <span class="synSpecial">&quot;</span><span class="synConstant">ch-1.p6 (Version 1.0) PWC #42 Task #1: Octal Numbers</span><span class="synSpecial">\n&quot;</span><span class="synStatement">;</span>
+ 6
+ 7 <span class="synComment"># Version 1: foreach loop with printf</span>
+ 8 <span class="synStatement">for</span> (<span class="synConstant">0</span> <span class="synStatement">..</span> <span class="synConstant">50</span>) {
+ 9 <span class="synIdentifier">printf</span>(<span class="synSpecial">&quot;</span><span class="synConstant">Decimal: %d - Octal: %o</span><span class="synSpecial">\n&quot;</span><span class="synStatement">,</span><span class="synIdentifier">$_</span><span class="synStatement">,</span><span class="synIdentifier">$_</span>)<span class="synStatement">;</span>
+ 10 }
+ 11
+ 12 <span class="synComment"># Version 2: map with sprintf</span>
+ 13 <span class="synIdentifier">print</span> <span class="synSpecial">my</span> <span class="synIdentifier">@res</span> <span class="synStatement">=</span> <span class="synIdentifier">map</span> { <span class="synIdentifier">sprintf</span>(<span class="synSpecial">&quot;</span><span class="synConstant">Dec %d - Oct %o</span><span class="synSpecial">\n&quot;</span><span class="synStatement">,</span><span class="synIdentifier">$_</span><span class="synStatement">,</span><span class="synIdentifier">$_</span>) }<span class="synStatement">,</span> (<span class="synConstant">0</span> <span class="synStatement">..</span> <span class="synConstant">50</span>)<span class="synStatement">;</span>
+ 14
+</pre>
+</td></tr></table>
+
+<h1 id="Sourcecode-for-Python">Sourcecode for Python</h1>
+
+<p>In Python I tried to implement the loop and the map way I did in Perl. So below you can see these trials. The <code>for</code> loop is very easy and similar. The <code>map()</code> way seems to be a little bit more complicated than in Perl.</p>
+
+<table class=code><tr><td class=code>
+<pre class=code><div class=t> Python </div>
+ 1 <span class="synComment">#!/usr/bin/python</span>
+ 2
+ 3 <span class="synPreProc">import</span> array <span class="synStatement">as</span> arr
+ 4
+ 5 <span class="synIdentifier">print</span> <span class="synConstant">&quot;ch-1.py (Version 1.0) PWC #42 Task #1: Octal numbers.&quot;</span>
+ 6
+ 7 <span class="synStatement">for</span> i <span class="synStatement">in</span> <span class="synIdentifier">range</span>(<span class="synConstant">0</span>,<span class="synConstant">50</span>):
+ 8 <span class="synIdentifier">print</span> <span class="synConstant">&quot;Decimal: &quot;</span>, i, <span class="synConstant">&quot; - Octal: &quot;</span>, <span class="synIdentifier">oct</span>(i)
+ 9
+ 10
+ 11 <span class="synStatement">def</span> <span class="synIdentifier">print_string</span>(n):
+ 12 buf = <span class="synConstant">&quot;Decimal: %d, Octal: %o&quot;</span> % (n, n)
+ 13 <span class="synStatement">return</span> buf
+ 14
+ 15 a = <span class="synIdentifier">list</span>(<span class="synIdentifier">range</span>(<span class="synConstant">0</span>,<span class="synConstant">50</span>))
+ 16 x = <span class="synIdentifier">map</span>(print_string, a)
+ 17 <span class="synComment"># print(list(x)) </span>
+ 18 <span class="synStatement">for</span> e <span class="synStatement">in</span> x: <span class="synIdentifier">print</span> e
+ 19
+</pre>
+</td></tr></table>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p>Chuck</p>
+
+<table border="0" width="100%" cellspacing="0" cellpadding="3">
+<tr><td class="_podblock_" valign="middle">
+<big><strong><span class="_podblock_">&nbsp;Perl Weekly Challenge #42 Task #1, Octal Numbers</span></strong></big>
+</td></tr>
+</table>
+
+</body>
+
+</html>
+
+
diff --git a/challenge-042/burkhard-nickels/perl5/ch-1.pl b/challenge-042/burkhard-nickels/perl5/ch-1.pl
new file mode 100755
index 0000000000..d908c529b5
--- /dev/null
+++ b/challenge-042/burkhard-nickels/perl5/ch-1.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+print "ch-1.pl (Version 1.0) PWC #42 Task #1: Octal Numbers\n";
+
+# Version 1: foreach loop with printf
+foreach (0 .. 50) {
+ printf("Decimal: %d - Octal: %o\n",$_,$_);
+}
+
+# Version 2: map with sprintf
+print my @res = map { sprintf("Dec %d - Oct %o\n",$_,$_) } (0 .. 50);
+
diff --git a/challenge-042/burkhard-nickels/perl5/ch-1.pod b/challenge-042/burkhard-nickels/perl5/ch-1.pod
new file mode 100755
index 0000000000..1a37383fc2
--- /dev/null
+++ b/challenge-042/burkhard-nickels/perl5/ch-1.pod
@@ -0,0 +1,165 @@
+#!/usr/bin/perldoc
+
+=head1 Perl Weekly Challenge #42 Task #1: Octal Numbers
+
+The octal number is printed with C<printf> or C<sprintf> and the format string
+C<%o>. I provided two solutions, first with a C<foreach> loop (Perl5) or C<for> loop
+(Perl6), second with a C<map> on one line.
+
+Following are some possibilities to deal with Octal numbers:
+
+=over 3
+
+=item * printf, sprintf and "%o"
+ Print with format string used in this solution.
+
+=item * foreach(0 .. 50) / for (0 .. 50) (Perl5/Perl6)
+ Loop over values from 1 to 50 in Perl5 and Perl6.
+
+=item * @result = map { ... } (0 .. 50)
+ Loop over values from 1 to 50 with map function.
+
+=item * my $number = 0644;
+ Assignment of octal number.
+
+=item * my $octal = oct(644);
+ Convert scalar to octal number.
+
+=item * (s)printf("0%o %d", $number, $number);
+ Print number as octal and decimal.
+
+=back
+
+=begin html
+
+<h2> Download and References </h2>
+<b>Download File:</b><a href="ch-1.pl" download> Perl5 Solution PWC #42 Task #1 ch-1.pl</a><br>
+<b>Download File:</b><a href="ch-1.p6" download> Perl6 Solution PWC #42 Task #1 ch-1.p6</a><br>
+<b>Download File:</b><a href="ch-1.py" download> Python Solution PWC #42 Task #1 ch-1.py</a><br>
+<br>
+
+=end html
+
+=head1 SYNOPSIS
+
+ # ./ch-1.pl - Program execution
+ # ./ch-1.p6 - Program execution
+ # perldoc ch-1.pod - POD
+
+=cut
+
+# ====================== TASK 1 ==============================
+
+=head1 Definition Task #1: Octal Number System
+
+Write a script to print decimal number 0 to 50 in Octal Number System.
+
+ For example:
+ Decimal 0 = Octal 0
+ Decimal 1 = Octal 1
+ Decimal 2 = Octal 2
+ Decimal 3 = Octal 3
+ Decimal 4 = Octal 4
+ Decimal 5 = Octal 5
+ Decimal 6 = Octal 6
+ Decimal 7 = Octal 7
+ Decimal 8 = Octal 10
+
+and so on.
+
+
+=head1 Sourcecode for Perl5 and Perl6
+
+Most important difference between Perl5 and Perl6 in this code is the loop statement
+C<foreach(1 .. 50)> in Perl5 and C<for (1 .. 50)> in Perl6. Not only that foreach
+becomes for, but also the important blank behind the B<for> keyword.
+
+The C<printf() / sprintf()> calls are the same. the C<map {}, (1 .. 50)> is different
+in the comma behind the block in the Perl6 part.
+
+=begin html
+
+<table class=code><tr><td class=code>
+<pre class=code><div class=t> Perl5 </div>
+ 1 <span class="synPreProc">#!/usr/bin/perl</span>
+ 2
+ 3 <span class="synStatement">use strict</span>;
+ 4 <span class="synStatement">use warnings</span>;
+ 5
+ 6 <span class="synStatement">print</span> <span class="synConstant">&quot;ch-1.pl (Version 1.0) PWC #42 Task #1: Octal Numbers</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
+ 7
+ 8 <span class="synComment"># Version 1: foreach loop with printf</span>
+ 9 <span class="synStatement">foreach</span> (<span class="synConstant">0</span> .. <span class="synConstant">50</span>) {
+ 10 <span class="synStatement">printf</span>(<span class="synConstant">&quot;Decimal: %d - Octal: %o</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>,<span class="synIdentifier">$_</span>,<span class="synIdentifier">$_</span>);
+ 11 }
+ 12
+ 13 <span class="synComment"># Version 2: map with sprintf</span>
+ 14 <span class="synStatement">print</span> <span class="synStatement">my</span> <span class="synIdentifier">@res</span> = <span class="synStatement">map {</span> <span class="synStatement">sprintf</span>(<span class="synConstant">&quot;Dec %d - Oct %o</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>,<span class="synIdentifier">$_</span>,<span class="synIdentifier">$_</span>) <span class="synStatement">}</span> (<span class="synConstant">0</span> .. <span class="synConstant">50</span>);
+</pre>
+</td><td class=code>
+<pre class=code><div class=t> Perl6 </div>
+ 1 <span class="synComment">#!/home/chuck/rakudo/bin/perl6</span>
+ 2
+ 3 <span class="synPreProc">use</span> strict<span class="synStatement">;</span>
+ 4
+ 5 <span class="synIdentifier">print</span> <span class="synSpecial">&quot;</span><span class="synConstant">ch-1.p6 (Version 1.0) PWC #42 Task #1: Octal Numbers</span><span class="synSpecial">\n&quot;</span><span class="synStatement">;</span>
+ 6
+ 7 <span class="synComment"># Version 1: foreach loop with printf</span>
+ 8 <span class="synStatement">for</span> (<span class="synConstant">0</span> <span class="synStatement">..</span> <span class="synConstant">50</span>) {
+ 9 <span class="synIdentifier">printf</span>(<span class="synSpecial">&quot;</span><span class="synConstant">Decimal: %d - Octal: %o</span><span class="synSpecial">\n&quot;</span><span class="synStatement">,</span><span class="synIdentifier">$_</span><span class="synStatement">,</span><span class="synIdentifier">$_</span>)<span class="synStatement">;</span>
+ 10 }
+ 11
+ 12 <span class="synComment"># Version 2: map with sprintf</span>
+ 13 <span class="synIdentifier">print</span> <span class="synSpecial">my</span> <span class="synIdentifier">@res</span> <span class="synStatement">=</span> <span class="synIdentifier">map</span> { <span class="synIdentifier">sprintf</span>(<span class="synSpecial">&quot;</span><span class="synConstant">Dec %d - Oct %o</span><span class="synSpecial">\n&quot;</span><span class="synStatement">,</span><span class="synIdentifier">$_</span><span class="synStatement">,</span><span class="synIdentifier">$_</span>) }<span class="synStatement">,</span> (<span class="synConstant">0</span> <span class="synStatement">..</span> <span class="synConstant">50</span>)<span class="synStatement">;</span>
+ 14
+</pre>
+</td></tr></table>
+
+=end html
+
+
+=head1 Sourcecode for Python
+
+In Python I tried to implement the loop and the map way I did in Perl. So below
+you can see these trials. The C<for> loop is very easy and similar. The C<map()>
+way seems to be a little bit more complicated than in Perl.
+
+=begin html
+
+<table class=code><tr><td class=code>
+<pre class=code><div class=t> Python </div>
+ 1 <span class="synComment">#!/usr/bin/python</span>
+ 2
+ 3 <span class="synPreProc">import</span> array <span class="synStatement">as</span> arr
+ 4
+ 5 <span class="synIdentifier">print</span> <span class="synConstant">&quot;ch-1.py (Version 1.0) PWC #42 Task #1: Octal numbers.&quot;</span>
+ 6
+ 7 <span class="synStatement">for</span> i <span class="synStatement">in</span> <span class="synIdentifier">range</span>(<span class="synConstant">0</span>,<span class="synConstant">50</span>):
+ 8 <span class="synIdentifier">print</span> <span class="synConstant">&quot;Decimal: &quot;</span>, i, <span class="synConstant">&quot; - Octal: &quot;</span>, <span class="synIdentifier">oct</span>(i)
+ 9
+ 10
+ 11 <span class="synStatement">def</span> <span class="synIdentifier">print_string</span>(n):
+ 12 buf = <span class="synConstant">&quot;Decimal: %d, Octal: %o&quot;</span> % (n, n)
+ 13 <span class="synStatement">return</span> buf
+ 14
+ 15 a = <span class="synIdentifier">list</span>(<span class="synIdentifier">range</span>(<span class="synConstant">0</span>,<span class="synConstant">50</span>))
+ 16 x = <span class="synIdentifier">map</span>(print_string, a)
+ 17 <span class="synComment"># print(list(x)) </span>
+ 18 <span class="synStatement">for</span> e <span class="synStatement">in</span> x: <span class="synIdentifier">print</span> e
+ 19
+</pre>
+</td></tr></table>
+
+=end html
+
+
+=cut
+
+=head1 AUTHOR
+
+Chuck
+
+=cut
+
+# ############################## END #############################################
+
diff --git a/challenge-042/burkhard-nickels/perl5/ch-1.py b/challenge-042/burkhard-nickels/perl5/ch-1.py
new file mode 100755
index 0000000000..40388def78
--- /dev/null
+++ b/challenge-042/burkhard-nickels/perl5/ch-1.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+
+import array as arr
+
+print "ch-1.py (Version 1.0) PWC #42 Task #1: Octal numbers."
+
+for i in range(0,50):
+ print "Decimal: ", i, " - Octal: ", oct(i)
+
+
+def print_string(n):
+ buf = "Decimal: %d, Octal: %o" % (n, n)
+ return buf
+
+a = list(range(0,50))
+x = map(print_string, a)
+# print(list(x))
+for e in x: print e
+
diff --git a/challenge-042/burkhard-nickels/perl5/ch-2.html b/challenge-042/burkhard-nickels/perl5/ch-2.html
new file mode 100644
index 0000000000..65f20b4cd6
--- /dev/null
+++ b/challenge-042/burkhard-nickels/perl5/ch-2.html
@@ -0,0 +1,335 @@
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Perl Weekly Challenge #42 Task #2, Balanced Brackets</title>
+<link rel="stylesheet" href="pwc_coloured.css" type="text/css" />
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+<table border="0" width="100%" cellspacing="0" cellpadding="3">
+<tr><td class="_podblock_" valign="middle">
+<big><strong><span class="_podblock_">&nbsp;Perl Weekly Challenge #42 Task #2, Balanced Brackets</span></strong></big>
+</td></tr>
+</table>
+
+
+
+<ul id="index">
+ <li><a href="#Perl-Weekly-Challenge-42-Task-2:-Balanced-Brackets">Perl Weekly Challenge #42 Task #2: Balanced Brackets</a></li>
+ <li><a href="#SYNOPSIS">SYNOPSIS</a></li>
+ <li><a href="#Definition-Task-2:-Balanced-Brackets">Definition Task #2: Balanced Brackets</a></li>
+ <li><a href="#Perl5-and-Perl6">Perl5 and Perl6</a>
+ <ul>
+ <li><a href="#Perl-Example-Execution">Perl Example Execution</a></li>
+ <li><a href="#Source-Code">Source Code</a></li>
+ </ul>
+ </li>
+ <li><a href="#Python">Python</a>
+ <ul>
+ <li><a href="#Python-Example-Execution">Python Example Execution</a></li>
+ <li><a href="#Source-Code-Python">Source Code Python</a></li>
+ <li><a href="#Python-help">Python help</a></li>
+ </ul>
+ </li>
+ <li><a href="#AUTHOR">AUTHOR</a></li>
+</ul>
+
+<h1 id="Perl-Weekly-Challenge-42-Task-2:-Balanced-Brackets">Perl Weekly Challenge #42 Task #2: Balanced Brackets</h1>
+
+<p>This Task &quot;Balanced Brackets&quot; I solved in 3 languages: Perl5, Perl6 and Python. My personal aim here is also to learn Perl6 and Python beside the eager in solving the Tasks in Perl5.</p>
+
+<p>Some highlights:</p>
+
+<ul>
+
+<li><p>Perl5, Perl6 and Python solution.</p>
+
+</li>
+<li><p>Recursive function call.</p>
+
+</li>
+<li><p>do-while, do-repeat or while-if-break as DO-WHILE loop.</p>
+
+</li>
+<li><p>random integer number generation.</p>
+
+</li>
+</ul>
+
+<h2> Download and References </h2>
+<b>Download File:</b><a href="ch-2.pl" download> Perl5 Solution PWC #42 Task #2 ch-2.pl</a><br>
+<b>Download File:</b><a href="ch-2.p6" download> Perl6 Solution PWC #42 Task #2 ch-2.p6</a><br>
+<b>Download File:</b><a href="ch-2.py" download> Python Solution PWC #42 Task #2 ch-2.py</a><br>
+<br>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code> # ./ch-2.pl - Execution of program
+ # ./ch-2.p6 - Execution of program
+ # ./ch-2.py - Execution of program
+ # perldoc ch-2.pod - POD</code></pre>
+
+<h1 id="Definition-Task-2:-Balanced-Brackets">Definition Task #2: Balanced Brackets</h1>
+
+<p>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.</p>
+
+<pre><code> For example:
+ () - OK
+ (()) - OK
+ )( - NOT OK
+ ())() - NOT OK</code></pre>
+
+<h1 id="Perl5-and-Perl6">Perl5 and Perl6</h1>
+
+<p>How does the program work? Within a loop, that is left when some <b>Balanced Brackets</b> are found, a random number of brackets is created with the function <code>create_brackets()</code>. Than the bracket string is verified if it is <b>Balanced Brackets</b> in the function <code>balanced_brackets()</code>. The function <code>balanced_brackets()</code> is called recursively as long as a pair of brackets can be found with search/replace.</p>
+
+<h2 id="Perl-Example-Execution">Perl Example Execution</h2>
+
+<pre><code> # ./ch-2.pl
+ ch-2.pl (Version 1.0) PWC #42 Task #2: Balanced Brackets
+ (()))()))) - NOT OK
+ () - OK</code></pre>
+
+<h2 id="Source-Code">Source Code</h2>
+
+<p>The code for Perl5 and Perl6 are similar, only the differences in the language. Let me mention some of the differences between <b>Perl5 / Perl6</b>:</p>
+
+<ul>
+
+<li><p>for() / loop (), Remember the blank in Perl6.</p>
+
+</li>
+<li><p>.= / ~=, Assignment of a String.</p>
+
+</li>
+<li><p>int(rand(2)) / Int(2.rand), Create a random integer.</p>
+
+</li>
+<li><p>if() / if (), Again the blank after the statement, in Perl6 brackets directly after the keyword means to call a function.</p>
+
+</li>
+<li><p>sub balanced_brackets { my $str = shift; ... } sub balanced_brackets ($arg) { ... } Different function call syntax.</p>
+
+</li>
+<li><p>=~ / ~~, for applying the search/replace on a scalar.</p>
+
+</li>
+<li><p>do {} while() / repeat {} while (), A do-while loop becomes repeat-while.</p>
+
+</li>
+</ul>
+
+<table class=code><tr><td class=code>
+<pre class=code><div class=t> Perl5 </div>
+ 1 <span class="synPreProc">#!/usr/bin/perl</span>
+ 2
+ 3 <span class="synStatement">use strict</span>;
+ 4 <span class="synStatement">use warnings</span>;
+ 5
+ 6 <span class="synStatement">print</span> <span class="synConstant">&quot;ch-2.pl (Version 1.0) PWC #42 Task #2: Balanced Brackets</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
+ 7
+ 8 <span class="synStatement">sub </span><span class="synIdentifier">create_brackets </span>{
+ 9 <span class="synStatement">my</span> (<span class="synIdentifier">$nr</span>) = <span class="synIdentifier">@_</span>;
+ 10 <span class="synStatement">my</span> <span class="synIdentifier">$s</span>;
+ 11 <span class="synStatement">for</span>( <span class="synStatement">my</span> <span class="synIdentifier">$i</span>=<span class="synConstant">0</span>; <span class="synIdentifier">$i</span>&lt;=<span class="synIdentifier">$nr</span>; <span class="synIdentifier">$i</span>++ ) {
+ 12 <span class="synStatement">my</span> <span class="synIdentifier">$br</span> = <span class="synStatement">int</span>(<span class="synStatement">rand</span>(<span class="synConstant">2</span>));
+ 13 <span class="synStatement">if</span>(<span class="synIdentifier">$br</span>) { <span class="synIdentifier">$s</span> .= <span class="synConstant">&quot;)&quot;</span>; } <span class="synStatement">else</span> { <span class="synIdentifier">$s</span> .= <span class="synConstant">&quot;(&quot;</span>; }
+ 14 }
+ 15 <span class="synStatement">return</span> <span class="synIdentifier">$s</span>;
+ 16 }
+ 17
+ 18 <span class="synStatement">my</span> <span class="synIdentifier">$ok</span>;
+ 19 <span class="synStatement">do</span> {
+ 20 <span class="synStatement">my</span> <span class="synIdentifier">$nr</span> = <span class="synStatement">int</span>(<span class="synStatement">rand</span>(<span class="synConstant">10</span>));
+ 21 <span class="synStatement">my</span> <span class="synIdentifier">$str</span> = create_brackets(<span class="synIdentifier">$nr</span>);
+ 22 <span class="synIdentifier">$ok</span> = balanced_brackets(<span class="synIdentifier">$str</span>);
+ 23 <span class="synStatement">my</span> <span class="synIdentifier">$rs</span> = <span class="synConstant">&quot;NOT OK&quot;</span>;
+ 24 <span class="synIdentifier">$rs</span> = <span class="synConstant">&quot;OK&quot;</span> <span class="synStatement">if</span> <span class="synIdentifier">$ok</span>;
+ 25 <span class="synStatement">print</span> <span class="synIdentifier">$str</span>, <span class="synConstant">&quot; - &quot;</span>, <span class="synIdentifier">$rs</span>, <span class="synConstant">&quot;</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
+ 26 } <span class="synStatement">while</span>( ! <span class="synIdentifier">$ok</span> );
+ 27
+ 28 <span class="synStatement">sub </span><span class="synIdentifier">balanced_brackets </span>{
+ 29 <span class="synStatement">my</span> <span class="synIdentifier">$str</span> = <span class="synStatement">shift</span>;
+ 30 <span class="synStatement">my</span> <span class="synIdentifier">$found</span> = <span class="synIdentifier">$str</span> =~ <span class="synStatement">s/</span><span class="synSpecial">\(\)</span><span class="synStatement">//</span>;
+ 31 <span class="synStatement">my</span> <span class="synIdentifier">$ok</span>;
+ 32 <span class="synStatement">if</span>(<span class="synIdentifier">$found</span>) {
+ 33 <span class="synIdentifier">$ok</span> = balanced_brackets(<span class="synIdentifier">$str</span>);
+ 34 <span class="synStatement">return</span> <span class="synIdentifier">$ok</span>;
+ 35 }
+ 36 <span class="synStatement">else</span> {
+ 37 <span class="synStatement">if</span>( <span class="synIdentifier">$str</span>=~<span class="synStatement">/</span><span class="synSpecial">\(</span><span class="synConstant">|</span><span class="synSpecial">\)</span><span class="synStatement">/</span> ) { <span class="synStatement">return</span> <span class="synConstant">0</span>; }
+ 38 <span class="synStatement">else</span> { <span class="synStatement">return</span> <span class="synConstant">1</span>; }
+ 39 }
+ 40 }
+</pre>
+</td><td class=code>
+<pre class=code><div class=t> Perl6 </div>
+ 1 <span class="synComment">#!/home/chuck/rakudo/bin/perl6</span>
+ 2
+ 3 <span class="synPreProc">use</span> strict<span class="synStatement">;</span>
+ 4
+ 5 <span class="synIdentifier">print</span> <span class="synSpecial">&quot;</span><span class="synConstant">ch-2.p6 (Version 1.0) PWC #42 Task #2: Balanced Brackets</span><span class="synSpecial">\n&quot;</span><span class="synStatement">;</span>
+ 6
+ 7 <span class="synStatement">sub</span> create_brackets {
+ 8 <span class="synSpecial">my</span> (<span class="synIdentifier">$nr</span>) <span class="synStatement">=</span> <span class="synIdentifier">@_</span><span class="synStatement">;</span>
+ 9 <span class="synSpecial">my</span> <span class="synIdentifier">$s</span><span class="synStatement">;</span>
+ 10 <span class="synStatement">loop</span> ( <span class="synSpecial">my</span> <span class="synIdentifier">$i</span><span class="synStatement">=</span><span class="synConstant">0</span><span class="synStatement">;</span> <span class="synIdentifier">$i</span> <span class="synStatement">&lt;=</span> <span class="synIdentifier">$nr</span><span class="synStatement">;</span> <span class="synIdentifier">$i</span><span class="synStatement">++</span> ) {
+ 11 <span class="synSpecial">my</span> <span class="synIdentifier">$br</span> <span class="synStatement">=</span> Int(<span class="synConstant">2</span><span class="synStatement">.</span><span class="synIdentifier">rand</span>)<span class="synStatement">;</span>
+ 12 <span class="synStatement">if</span> (<span class="synIdentifier">$br</span>) { <span class="synIdentifier">$s</span> <span class="synStatement">~=</span> <span class="synSpecial">&quot;</span><span class="synConstant">)</span><span class="synSpecial">&quot;</span><span class="synStatement">;</span> } <span class="synStatement">else</span> { <span class="synIdentifier">$s</span> <span class="synStatement">~=</span> <span class="synSpecial">&quot;</span><span class="synConstant">(</span><span class="synSpecial">&quot;</span><span class="synStatement">;</span> }
+ 13 }
+ 14 <span class="synSpecial">return</span> <span class="synIdentifier">$s</span><span class="synStatement">;</span>
+ 15 }
+ 16
+ 17 <span class="synSpecial">my</span> <span class="synIdentifier">$ok</span><span class="synStatement">;</span>
+ 18 <span class="synStatement">repeat</span> {
+ 19 <span class="synSpecial">my</span> <span class="synIdentifier">$nr</span> <span class="synStatement">=</span> Int(<span class="synConstant">10</span><span class="synStatement">.</span><span class="synIdentifier">rand</span>)<span class="synStatement">;</span>
+ 20 <span class="synSpecial">my</span> <span class="synIdentifier">$str</span> <span class="synStatement">=</span> create_brackets(<span class="synIdentifier">$nr</span>)<span class="synStatement">;</span>
+ 21 <span class="synIdentifier">$ok</span> <span class="synStatement">=</span> balanced_brackets(<span class="synIdentifier">$str</span>)<span class="synStatement">;</span>
+ 22 <span class="synSpecial">my</span> <span class="synIdentifier">$rs</span> <span class="synStatement">=</span> <span class="synSpecial">&quot;</span><span class="synConstant">NOT OK</span><span class="synSpecial">&quot;</span><span class="synStatement">;</span>
+ 23 <span class="synIdentifier">$rs</span> <span class="synStatement">=</span> <span class="synSpecial">&quot;</span><span class="synConstant">OK</span><span class="synSpecial">&quot;</span> <span class="synStatement">if</span> <span class="synIdentifier">$ok</span><span class="synStatement">;</span>
+ 24 <span class="synIdentifier">print</span> <span class="synIdentifier">$str</span><span class="synStatement">,</span> <span class="synSpecial">&quot;</span><span class="synConstant"> - </span><span class="synSpecial">&quot;</span><span class="synStatement">,</span> <span class="synIdentifier">$rs</span><span class="synStatement">,</span> <span class="synSpecial">&quot;\n&quot;</span><span class="synStatement">;</span>
+ 25 } <span class="synStatement">while</span> ( <