aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-10-05 12:44:19 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-10-05 12:44:19 +0100
commitdfc0b71eb6c46c8f48c1f9e4fc68f1f927ddb574 (patch)
tree2fe154026f6c2ad60b53ae0bd5249d26cd56b22e
parent094c94073e190dd28504ffccfc49b5a6a80f83cc (diff)
downloadperlweeklychallenge-club-dfc0b71eb6c46c8f48c1f9e4fc68f1f927ddb574.tar.gz
perlweeklychallenge-club-dfc0b71eb6c46c8f48c1f9e4fc68f1f927ddb574.tar.bz2
perlweeklychallenge-club-dfc0b71eb6c46c8f48c1f9e4fc68f1f927ddb574.zip
- Added guest contributions by Eric Cheung.
-rwxr-xr-xchallenge-133/eric-cheung/excel-vba/Challenge_133.xlsmbin0 -> 34523 bytes
-rwxr-xr-xchallenge-133/eric-cheung/excel-vba/ch-1.bas50
-rwxr-xr-xchallenge-133/eric-cheung/excel-vba/ch-2.bas103
3 files changed, 153 insertions, 0 deletions
diff --git a/challenge-133/eric-cheung/excel-vba/Challenge_133.xlsm b/challenge-133/eric-cheung/excel-vba/Challenge_133.xlsm
new file mode 100755
index 0000000000..cbd7ff6fab
--- /dev/null
+++ b/challenge-133/eric-cheung/excel-vba/Challenge_133.xlsm
Binary files differ
diff --git a/challenge-133/eric-cheung/excel-vba/ch-1.bas b/challenge-133/eric-cheung/excel-vba/ch-1.bas
new file mode 100755
index 0000000000..afb640a377
--- /dev/null
+++ b/challenge-133/eric-cheung/excel-vba/ch-1.bas
@@ -0,0 +1,50 @@
+Attribute VB_Name = "ModTask_01"
+Option Explicit
+Public Const strMyTitle As String = "Eric Cheung"
+
+Function FindIntDivTwo(nNum As Double) As Long
+
+ FindIntDivTwo = Int(nNum / 2)
+
+End Function
+
+Function FindIntSqrRoot(nInput As Long) As Long
+
+ Dim nTemp As Long
+
+ nTemp = FindIntDivTwo(CDbl(nInput))
+
+ If nTemp = 0 Then
+ FindIntSqrRoot = nInput
+ Exit Function
+ End If
+
+ FindIntSqrRoot = FindIntDivTwo(CDbl(nTemp + nInput / nTemp))
+
+ Do While FindIntSqrRoot < nTemp
+ nTemp = FindIntSqrRoot
+ FindIntSqrRoot = FindIntDivTwo(CDbl(nTemp + nInput / nTemp))
+ Loop
+
+End Function
+
+Sub Task_01()
+
+ ''Remarks
+ ''https://theweeklychallenge.org/blog/perl-weekly-challenge-133/
+ ''https://en.wikipedia.org/wiki/Integer_square_root
+ ''https://www.geeksforgeeks.org/left-shift-right-shift-operators-c-cpp/
+
+ Dim strMsg As String
+ Dim nIntSqr As Long
+
+ '' nIntSqr = 10 '' Example: 1
+ '' nIntSqr = 27 '' Example: 2
+ '' nIntSqr = 85 '' Example: 3
+ nIntSqr = 101 '' Example: 4
+
+ strMsg = "Integer Square Root of " & nIntSqr & " is: " + CStr(FindIntSqrRoot(nIntSqr))
+
+ MsgBox strMsg, vbOKOnly, strMyTitle
+
+End Sub
diff --git a/challenge-133/eric-cheung/excel-vba/ch-2.bas b/challenge-133/eric-cheung/excel-vba/ch-2.bas
new file mode 100755
index 0000000000..554bbdbc6d
--- /dev/null
+++ b/challenge-133/eric-cheung/excel-vba/ch-2.bas
@@ -0,0 +1,103 @@
+Attribute VB_Name = "ModTask_02"
+Option Explicit
+Option Base 1
+Public nPrimeArr() As Long
+Public nPrimePow() As Long
+
+Function IsPrime(nInput As Long) As Boolean
+
+ Dim nNumLoop As Integer, nTempInt As Long
+ Dim bFlag As Boolean
+
+ bFlag = False
+
+ For nNumLoop = LBound(nPrimeArr) To UBound(nPrimeArr)
+ nPrimePow(nNumLoop) = 0
+ Next nNumLoop
+
+ nNumLoop = LBound(nPrimeArr)
+ nTempInt = nInput
+
+ Do While nNumLoop <= UBound(nPrimeArr)
+ If nTempInt Mod nPrimeArr(nNumLoop) = 0 Then
+ nTempInt = nTempInt / nPrimeArr(nNumLoop)
+ nPrimePow(nNumLoop) = nPrimePow(nNumLoop) + 1
+ bFlag = True
+ Else
+ nNumLoop = nNumLoop + 1
+ End If
+ Loop
+
+ If bFlag Then
+ IsPrime = False
+ Else
+ IsPrime = True
+ End If
+
+End Function
+
+Function SumOfDigits(nInput As Long) As Integer
+
+ Dim nTempNum As Long
+
+ nTempNum = nInput
+ Do While nTempNum > 0
+ SumOfDigits = SumOfDigits + nTempNum Mod 10
+ nTempNum = Int(nTempNum / 10)
+ Loop
+
+End Function
+
+Function IsSmith(nInput As Long) As Boolean
+
+ Dim nNum_01 As Integer, nNum_02 As Integer, nNumLoop As Integer
+
+ nNum_01 = SumOfDigits(nInput)
+
+ For nNumLoop = LBound(nPrimeArr) To UBound(nPrimeArr)
+ nNum_02 = nNum_02 + SumOfDigits(nPrimeArr(nNumLoop)) * nPrimePow(nNumLoop)
+ Next nNumLoop
+
+ If nNum_01 = nNum_02 Then
+ IsSmith = True
+ Else
+ IsSmith = False
+ End If
+
+End Function
+
+Sub Task_02()
+
+ Dim strMsg As String
+ Dim nLoop As Long, nCnt As Integer, nPrimeCnt As Long
+
+ ReDim nPrimeArr(1 To 1)
+ ReDim nPrimePow(1 To 1)
+
+ nPrimeCnt = 1
+ nPrimeArr(1) = 2
+
+ nLoop = 3
+ nCnt = 0
+
+ strMsg = "First 10 Smith Numbers in base 10 are "
+
+ Do While (nCnt < 10)
+ If Not IsPrime(nLoop) Then
+ If IsSmith(nLoop) Then
+ strMsg = strMsg & ", " & nLoop
+ nCnt = nCnt + 1
+ End If
+ Else
+ nPrimeCnt = nPrimeCnt + 1
+ ReDim Preserve nPrimeArr(1 To nPrimeCnt)
+ ReDim nPrimePow(1 To nPrimeCnt)
+ nPrimeArr(nPrimeCnt) = nLoop
+ End If
+ nLoop = nLoop + 1
+ Loop
+
+ MsgBox strMsg, vbOKOnly, strMyTitle
+
+End Sub
+