diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-01-11 09:33:42 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-11 09:33:42 +0000 |
| commit | e017529000f00977b2e35019ff7aa5a7a4ce8b2b (patch) | |
| tree | 2b68c24287a94857a9b16b04af0ec9f83ab67b99 | |
| parent | fc65bf4bdd1eae919a0f6990a91492e15f8e92e5 (diff) | |
| parent | 888461dd14f7c29adbc0a49f1cb964504bd3929d (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-042/burkhard-nickels/perl5/ch-1.html | 170 | ||||
| -rwxr-xr-x | challenge-042/burkhard-nickels/perl5/ch-1.pl | 15 | ||||
| -rwxr-xr-x | challenge-042/burkhard-nickels/perl5/ch-1.pod | 165 | ||||
| -rwxr-xr-x | challenge-042/burkhard-nickels/perl5/ch-1.py | 19 | ||||
| -rw-r--r-- | challenge-042/burkhard-nickels/perl5/ch-2.html | 335 | ||||
| -rwxr-xr-x | challenge-042/burkhard-nickels/perl5/ch-2.pl | 41 | ||||
| -rwxr-xr-x | challenge-042/burkhard-nickels/perl5/ch-2.pod | 317 | ||||
| -rwxr-xr-x | challenge-042/burkhard-nickels/perl5/ch-2.py | 38 | ||||
| -rwxr-xr-x | challenge-042/burkhard-nickels/perl6/ch-1.p6 | 14 | ||||
| -rwxr-xr-x | challenge-042/burkhard-nickels/perl6/ch-2.p6 | 40 |
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_"> 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 "%o" 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("0%o %d", $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">"ch-1.pl (Version 1.0) PWC #42 Task #1: Octal Numbers</span><span class="synSpecial">\n</span><span class="synConstant">"</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">"Decimal: %d - Octal: %o</span><span class="synSpecial">\n</span><span class="synConstant">"</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">"Dec %d - Oct %o</span><span class="synSpecial">\n</span><span class="synConstant">"</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">"</span><span class="synConstant">ch-1.p6 (Version 1.0) PWC #42 Task #1: Octal Numbers</span><span class="synSpecial">\n"</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">"</span><span class="synConstant">Decimal: %d - Octal: %o</span><span class="synSpecial">\n"</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">"</span><span class="synConstant">Dec %d - Oct %o</span><span class="synSpecial">\n"</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">"ch-1.py (Version 1.0) PWC #42 Task #1: Octal numbers."</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">"Decimal: "</span>, i, <span class="synConstant">" - Octal: "</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">"Decimal: %d, Octal: %o"</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_"> 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">"ch-1.pl (Version 1.0) PWC #42 Task #1: Octal Numbers</span><span class="synSpecial">\n</span><span class="synConstant">"</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">"Decimal: %d - Octal: %o</span><span class="synSpecial">\n</span><span class="synConstant">"</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">"Dec %d - Oct %o</span><span class="synSpecial">\n</span><span class="synConstant">"</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">"</span><span class="synConstant">ch-1.p6 (Version 1.0) PWC #42 Task #1: Octal Numbers</span><span class="synSpecial">\n"</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">"</span><span class="synConstant">Decimal: %d - Octal: %o</span><span class="synSpecial">\n"</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">"</span><span class="synConstant">Dec %d - Oct %o</span><span class="synSpecial">\n"</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">"ch-1.py (Version 1.0) PWC #42 Task #1: Octal numbers."</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">"Decimal: "</span>, i, <span class="synConstant">" - Octal: "</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">"Decimal: %d, Octal: %o"</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_"> 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 "Balanced Brackets" 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">"ch-2.pl (Version 1.0) PWC #42 Task #2: Balanced Brackets</span><span class="synSpecial">\n</span><span class="synConstant">"</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><=<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">")"</span>; } <span class="synStatement">else</span> { <span class="synIdentifier">$s</span> .= <span class="synConstant">"("</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">"NOT OK"</span>; + 24 <span class="synIdentifier">$rs</span> = <span class="synConstant">"OK"</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">" - "</span>, <span class="synIdentifier">$rs</span>, <span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</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">"</span><span class="synConstant">ch-2.p6 (Version 1.0) PWC #42 Task #2: Balanced Brackets</span><span class="synSpecial">\n"</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"><=</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">"</span><span class="synConstant">)</span><span class="synSpecial">"</span><span class="synStatement">;</span> } <span class="synStatement">else</span> { <span class="synIdentifier">$s</span> <span class="synStatement">~=</span> <span class="synSpecial">"</span><span class="synConstant">(</span><span class="synSpecial">"</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">"</span><span class="synConstant">NOT OK</span><span class="synSpecial">"</span><span class="synStatement">;</span> + 23 <span class="synIdentifier">$rs</span> <span class="synStatement">=</span> <span class="synSpecial">"</span><span class="synConstant">OK</span><span class="synSpecial">"</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">"</span><span class="synConstant"> - </span><span class="synSpecial">"</span><span class="synStatement">,</span> <span class="synIdentifier">$rs</span><span class="synStatement">,</span> <span class="synSpecial">"\n"</span><span class="synStatement">;</span> + 25 } <span class="synStatement">while</span> ( < |
