aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPok <pok@goyangi>2025-11-10 16:43:02 +0700
committerPok <pok@goyangi>2025-11-10 16:43:02 +0700
commit39b0bd20275bad3f28550ce098b8c1e5d13d5540 (patch)
tree3a4a33e5061643b74131a0e55991e9f0213f8ab5
parent85642e99a531e28cc549b9e61184969ed8cc429b (diff)
downloadperlweeklychallenge-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.lua80
-rw-r--r--challenge-347/pokgopun/lua/ch-2.lua85
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()