A couple of months ago I wrote this blog post Data analysis and visualization in Perl. Then last month I released a 0.0003 version. And today I made a new 0.0005 release to CPAN. Some of the notable improvements in the recent releases are,
Compute the Equal Point in the Fahrenheit and Celsius Scales
I used a simple numerical method to find the equal point: Start randomly, move in one direction, if the difference is greater, change the direction, otherwise decrease the step, until there’s no difference.
Spoiler Alert: This weekly challenge deadline is due in several days from now (June 9, 2019). This blog post offers some solutions to this challenge, please don't read on if you intend to complete the challenge on your own.
Challenge # 1: Fahrenheit and Celsius Scales Intersection
Write a script that computes the equal point in the Fahrenheit and Celsius scales, knowing that the freezing point of water is 32 °F and 0 °C, and that the boiling point of water is 212 °F and 100 °C. This challenge was proposed by Laurent Rosenfeld.
There is a new blog post on my Ocean of Awareness blog:
"Infinite Lookahead and Ruby Slippers"
. It is a relatively simple example that packs in a lot about the various parsing strategies available in Marpa. The context is comment conventions in the Hoon language.
It was the month of Ramadan (Fasting) for us. As always, I was low in energy through out the month. Having said that "Perl Weekly Challenge" kept me going. However there was one low point when my daily CPAN game got discontinued after 621 days of daily CPAN upload. This time, it wasn't my fault. PAUSE site was down for some maintenance work. By the time it came back, it was too late. I really had to motivate myself hard to start again. I must say it wasn't easy to convince myself to start the journey again. I would like to thank everyone for the moral support. As of today, I have done 27 days of daily CPAN upload. With all these happenings, my other pet project "London Hack Day" is being delayed further.
Let's take a quick look through last month main activities.
It has been about 25 years since the release of 5.000 (1994), we (The Perl Shop) are thinking about creating an infographic for the Perl 5.30.0 release. This infographic would be an advocacy item aimed at casual Perl users and people outside the community, rather than day-to-day users who would largely be familiar with Perl trivia.
The idea would be to highlight not just some of the stats from that specific release, but to draw attention to the history of 5.x releases by showing how many releases there have been, their frequency, the odd/even dev/prod pattern, and generally that Perl is still being regularly updated with new capabilities, despite the constant 5.x release number.
It might also be good to include a timeline showing notable 5.x releases, indicating when they happened and why they were notable.
What would you include? Post your suggestions below, and cite references, if possible.
Which 5.x releases do you consider notable, and why?
Some known reference material
perlhist is a good source for the date of releases, and it seems to indicate the odd/even scheme was introduced in 2000 with 5.6.
Spoiler Alert: This weekly challenge deadline is due in several days from now (June 2, 2019). This blog post offers some solutions to this challenge, please don't read on if you intend to complete the challenge on your own.
Challenge # 1: Roman Numerals
Write a script to encode/decode Roman numerals. For example, given Roman numeral CCXLVI, it should return 246. Similarly, for decimal number 39, it should return XXXIX. Checkout Wikipedia page for more information.
Of course, there are some Perl modules on the CPAN to convert from and to Roman numerals, but there wouldn't be any challenge if the idea were to use an existing module.
Most people know more or less how Roman numerals work. They use Latin letters to represent numbers:
It's been quite a while in the making, but berrybrew version 1.23 now has the ability to "clone" modules from one Perl instance into another.
It's currently a two-step process.
First, berrybrew switch into the Perl instance you want to export the module list from, then...
berrybrew modules export
This will create a text document in a newly created modules directory within your Perl installation directory (by default, C:\berrybrew), named after the version of Perl you exported the module list from (eg: 5.20.3_64). This file has a single distribution name per line.
You can go ahead and edit this file (remove or add as many distribution names as you like), then when you're ready to import into a different Perl instance, simply berrybrew switch to it (note that as always, when switching Perls, you must close the command window and open a new one), then:
Here, I want to use the opportunity of this challenge to illustrate some possibilities of functional programming in Perl (both Perl 5 and Perl 6) using the example of the first challenge of this week..
Challenge: Square Number With At Least 5 Distinct Digits
Write a script that finds the first square number that has at least 5 distinct digits.
A Data Pipeline in Perl 5
One of the solutions I suggested in my above-mentionned blog post was this script:
I've been quietly playing along at home with the Weekly Challenge,
and this week's first task was:
Write a script that finds the first square number that has at least 5 distinct digits.
The solution to that is (obviously!) to lazily square every number from 1 to infinity,
then comb through each square's digits looking for five or more unique numerals,
and immediately output the first such square you find.
But the elegance of that solution is not why I love Raku.
I love Raku because, if that solution seems too scary to you
(too infinite, too lazy, too concurrent, too pipelined, too Unicoded,
too declarative, too functional, too much like something that
an Erlang guru would code), then Raku will equally allow you
to write a plain and simple version: one that's imperative, iterative,
block structured, variable-driven, pure ASCII, and more-or-less
exactly what you'd write in Perl, or even in C:
Find the fist square number with at least five distinct digits.
The word “distinct” is translated to “hash” in Perl. Just iterate over the square numbers and count the distinct digits (thanks holli for pointing out starting from 1 makes little sense):
Challenge # 1: Square Number With At Least 5 Distinct Digits
Write a script that finds the first square number that has at least 5 distinct digits. This was proposed by Laurent Rosenfeld.
Again a challenge suggested by me. I swear that I did not try to solve any of the challenge proposals I sent to Mohammad before submitting these proposals to him. Even the special case of the perfect number challenge of last week is no exception, since, as I explained in my blog post on it, while it stemmed from a CS course assignment of 28 years ago that I solved at the time, the requirement I suggested was markedly different and significantly more difficult.