aboutsummaryrefslogtreecommitdiff
path: root/challenge-114/andinus/README.org
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-05-24 07:28:28 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-05-24 07:28:28 +0100
commitc61ba475fd263546925b47f264825a44477622e0 (patch)
tree2c8c5232bcc472cc7cca7e8120db0985fa90f81a /challenge-114/andinus/README.org
parent9935922655bac199d45cc90f0aa883d008366d3d (diff)
downloadperlweeklychallenge-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.org102
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