diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-05-24 07:28:28 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-05-24 07:28:28 +0100 |
| commit | c61ba475fd263546925b47f264825a44477622e0 (patch) | |
| tree | 2c8c5232bcc472cc7cca7e8120db0985fa90f81a /challenge-114/andinus/README.org | |
| parent | 9935922655bac199d45cc90f0aa883d008366d3d (diff) | |
| download | perlweeklychallenge-club-c61ba475fd263546925b47f264825a44477622e0.tar.gz perlweeklychallenge-club-c61ba475fd263546925b47f264825a44477622e0.tar.bz2 perlweeklychallenge-club-c61ba475fd263546925b47f264825a44477622e0.zip | |
- Added template for week 114.
Diffstat (limited to 'challenge-114/andinus/README.org')
| -rw-r--r-- | challenge-114/andinus/README.org | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/challenge-114/andinus/README.org b/challenge-114/andinus/README.org new file mode 100644 index 0000000000..221092d3f0 --- /dev/null +++ b/challenge-114/andinus/README.org @@ -0,0 +1,102 @@ +#+title: Challenge 110 +#+date: 2021-04-29 +#+html_link_up: ../index.html +#+export_file_name: index +#+setupfile: ~/.emacs.d/org-templates/level-2.org + +* Task 1 - Valid Phone Numbers + +You are given a text file. + +Write a script to display all valid phone numbers in the given text file. + +Acceptable Phone Number Formats: +#+begin_src ++nn nnnnnnnnnn +(nn) nnnnnnnnnn +nnnn nnnnnnnnnn +#+end_src + +Input File: +#+begin_src +0044 1148820341 + +44 1148820341 + 44-11-4882-0341 +(44) 1148820341 + 00 1148820341 +#+end_src + +Output: +#+begin_src +0044 1148820341 + +44 1148820341 +(44) 1148820341 +#+end_src + +** Raku + +- Program: [[file:raku/ch-1.raku]] + +~PhoneNumber~ grammar parses each entry one by one. ~country-code~ handles +the 3 cases for country codes & ~number~ handles the other part. + +We just loop over every entry & print it if it's a valid phone number. + +#+begin_src raku +grammar PhoneNumber { + token TOP { \s* <country-code> \s+ <number> } + token country-code { '+' \d \d | '(' \d \d ')' | \d ** 4 } + token number { \d ** 10 } +} + +for $file.IO.lines -> $entry { + say $entry if PhoneNumber.parse($entry); +} +#+end_src + +* Task 2 - Transpose File + +You are given a text file. + +Write a script to transpose the contents of the given file. + +Input File: +#+begin_src +name,age,sex +Mohammad,45,m +Joe,20,m +Julie,35,f +Cristina,10,f +#+end_src + +Output: +#+begin_src +name,Mohammad,Joe,Julie,Cristina +age,45,20,35,10 +sex,m,m,f,f +#+end_src + +** Raku + +- Program: [[file:raku/ch-2.raku]] + +~.IO.lines~ part creates a list of lines in the files, then we split it at +",". ~zip~ then returns a list which is formatted the way we want it to +be. + +From the documentation: https://docs.raku.org/routine/zip +#+begin_quote +Creates a supply that emits combined values as soon as there is a new +value seen on all of the supplies. + +zip iterates through each of the input lists synchronously, 'Zipping' +them together, so that elements are grouped according to their input +list index, in the order that the lists are provided. +#+end_quote + +We then join the entries with ",", loop over the formatted lines & print +them. + +#+begin_src raku +.say for zip($file.IO.lines.map(*.split(","))).map(*.join(",")); +#+end_src |
