diff options
| author | Pok <pok@goyangi> | 2025-11-10 16:43:02 +0700 |
|---|---|---|
| committer | Pok <pok@goyangi> | 2025-11-10 16:43:02 +0700 |
| commit | 39b0bd20275bad3f28550ce098b8c1e5d13d5540 (patch) | |
| tree | 3a4a33e5061643b74131a0e55991e9f0213f8ab5 | |
| parent | 85642e99a531e28cc549b9e61184969ed8cc429b (diff) | |
| download | perlweeklychallenge-club-39b0bd20275bad3f28550ce098b8c1e5d13d5540.tar.gz perlweeklychallenge-club-39b0bd20275bad3f28550ce098b8c1e5d13d5540.tar.bz2 perlweeklychallenge-club-39b0bd20275bad3f28550ce098b8c1e5d13d5540.zip | |
pwc347 solution in lua
| -rw-r--r-- | challenge-347/pokgopun/lua/ch-1.lua | 80 | ||||
| -rw-r--r-- | challenge-347/pokgopun/lua/ch-2.lua | 85 |
2 files changed, 165 insertions, 0 deletions
diff --git a/challenge-347/pokgopun/lua/ch-1.lua b/challenge-347/pokgopun/lua/ch-1.lua new file mode 100644 index 0000000000..35a7066807 --- /dev/null +++ b/challenge-347/pokgopun/lua/ch-1.lua @@ -0,0 +1,80 @@ +--# https://theweeklychallenge.org/blog/perl-weekly-challenge-347/ +--[[ + +Task 1: Format Date + +Submitted by: [44]Mohammad Sajid Anwar + __________________________________________________________________ + + You are given a date in the form: 10th Nov 2025. + + Write a script to format the given date in the form: 2025-11-10 using + the set below. +@DAYS = ("1st", "2nd", "3rd", ....., "30th", "31st") +@MONTHS = ("Jan", "Feb", "Mar", ....., "Nov", "Dec") +@YEARS = (1900..2100) + +Example 1 + +Input: $str = "1st Jan 2025" +Output: "2025-01-01" + +Example 2 + +Input: $str = "22nd Feb 2025" +Output: "2025-02-22" + +Example 3 + +Input: $str = "15th Apr 2025" +Output: "2025-04-15" + +Example 4 + +Input: $str = "23rd Oct 2025" +Output: "2025-10-23" + +Example 5 + +Input: $str = "31st Dec 2025" +Output: "2025-12-31" + +Task 2: Format Phone Number +--]] +--# solution by pokgopun@gmail.com + + +function fd(str) + local m = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} + local date = "" + local idx = 0 + for d in string.gmatch(str, "%S+") do + idx = idx + 1 + if idx == 1 then + d = "-"..string.format("%02d", tonumber(string.sub(d, 1, #d-2))) + elseif idx == 2 then + for i, v in ipairs(m) do + if d == v then + d = "-"..string.format("%02d", i) + end + end + end + date = d .. date + end + return date +end + +local lu = require("luaunit") + +function TestFd() + for inpt, otpt in pairs({ + ["1st Jan 2025"] = "2025-01-01", + ["22nd Feb 2025"] = "2025-02-22", + ["15th Apr 2025"] = "2025-04-15", + ["23rd Oct 2025"]= "2025-10-23", + ["31st Dec 2025"]= "2025-12-31"}) do + lu.assertEquals(fd(inpt), otpt) + end +end + +lu.run() diff --git a/challenge-347/pokgopun/lua/ch-2.lua b/challenge-347/pokgopun/lua/ch-2.lua new file mode 100644 index 0000000000..cc8c9f67ad --- /dev/null +++ b/challenge-347/pokgopun/lua/ch-2.lua @@ -0,0 +1,85 @@ +--# https://theweeklychallenge.org/blog/perl-weekly-challenge-347/ +--[[ + +Task 2: Format Phone Number + +Submitted by: [45]Mohammad Sajid Anwar + __________________________________________________________________ + + You are given a phone number as a string containing digits, space and + dash only. + + Write a script to format the given phone number using the below rules: +1. Removing all spaces and dashes +2. Grouping digits into blocks of length 3 from left to right +3. Handling the final digits (4 or fewer) specially: + - 2 digits: one block of length 2 + - 3 digits: one block of length 3 + - 4 digits: two blocks of length 2 +4. Joining all blocks with dashes + +Example 1 + +Input: $phone = "1-23-45-6" +Output: "123-456" + +Example 2 + +Input: $phone = "1234" +Output: "12-34" + +Example 3 + +Input: $phone = "12 345-6789" +Output: "123-456-789" + +Example 4 + +Input: $phone = "123 4567" +Output: "123-45-67" + +Example 5 + +Input: $phone = "123 456-78" +Output: "123-456-78" + __________________________________________________________________ + + Last date to submit the solution 23:59 (UK Time) Sunday 16th November + 2025. + __________________________________________________________________ + +SO WHAT DO YOU THINK ? +--]] +--# solution by pokgopun@gmail.com + +function fpn(phone) + local dgt = {} + for v in string.gmatch(phone,"%d") do + table.insert(dgt,v) + end + local l = #dgt + local i = 4 + while i <= l do + if i == l then + i = i - 1 + end + dgt[i] = "-"..dgt[i] + i = i + 3 + end + return table.concat(dgt,"") +end + +local lu = require("luaunit") + +function TestFpn() + for inpt, otpt in pairs({ + ["1-23-45-6"]= "123-456", + ["1234"]= "12-34", + ["12 345-6789"]= "123-456-789", + ["123 4567"] = "123-45-67", + ["123 456-78"] = "123-456-78"}) do + lu.assertEquals(fpn(inpt), otpt) + end +end + +lu.run() |
