SEDOLs: Difference between revisions

5,483 bytes added ,  3 years ago
→‎{{header|Excel}}: Added a variant for Excel LAMBDA
(Added Arturo implementation)
(→‎{{header|Excel}}: Added a variant for Excel LAMBDA)
Line 1,162:
</pre>
 
=={{header|Excel VBA}}==
===VBA===
<lang lb>
<lang lb>Function getSedolCheckDigit(Input1)
Dim mult(6) As Integer
mult(1) = 1: mult(2) = 3: mult(3) = 1
Line 1,189:
getSedolCheckDigit = Input1 + CStr((10 - (Total Mod 10)) Mod 10)
End Function</lang>
 
</lang>
===LAMBDA===
 
Binding the name SEDOLCHECKSUM to a lambda expression in the Name Manager of the Excel worksheet:
 
(See [https://www.microsoft.com/en-us/research/blog/lambda-the-ultimatae-excel-worksheet-function/ LAMBDA: The ultimate Excel worksheet function])
 
{{Works with|Office 365 Betas 2021}}
 
<lang lisp>SEDOLCHECKSUM
=LAMBDA(s,
LET(
lng, LEN(s),
IF(6 = lng,
LET(
cs, MID(s, SEQUENCE(1, 6, 1, 1), 1),
isVowel, LAMBDA(c,
ELEM(c)({"A","E","I","O","U"})
),
sedolValue, LAMBDA(c,
LET(
ic, CODE(c),
IF(65 > ic,
ic - 48,
(ic + 10) - 65
)
)
),
IF(OR(isVowel(cs)),
" -> Invalid vowel in SEDOL string",
MOD(
10 - MOD(
SUM(
MUL({1,3,1,7,3,9})(
sedolValue(cs)
)
), 10
), 10
)
)
),
"Expected a 6-character SEDOL"
)
)
)</lang>
 
and also assuming that the names ELEM and MUL are also bound to the following reusable lambdas in Name Manager:
 
<lang lisp>ELEM
=LAMBDA(x,
LAMBDA(xs,
ISNUMBER(MATCH(x, xs, 0))
)
)
 
 
MUL
=LAMBDA(a, LAMBDA(b, a * b))</lang>
{{Out}}
{| class="wikitable"
|-
|||style="text-align:right; font-family:serif; font-style:italic; font-size:120%;"|fx
! colspan="4" style="text-align:left; vertical-align: bottom; font-family:Arial, Helvetica, sans-serif !important;"|=SEDOLCHECKSUM(A2)
|- style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff;"
|
| A
| B
| C
| D
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 1
| style="text-align:right; font-weight:bold" | Sedols
| style="font-weight:bold" | Checksums
| style="text-align:left; font-weight:bold" | Appended
| style="font-weight:bold" |
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 2
| style="text-align:right; font-weight:bold" | 710889
| style="background-color:#cbcefb;" | 9
| style="text-align:left;" | 7108899
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 3
| style="text-align:right; font-weight:bold" | B0YBKJ
| 7
| style="text-align:left;" | B0YBKJ7
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 4
| style="text-align:right; font-weight:bold" | 406566
| 3
| style="text-align:left;" | 4065663
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 5
| style="text-align:right; font-weight:bold" | B0YBLH
| 2
| style="text-align:left;" | B0YBLH2
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 6
| style="text-align:right; font-weight:bold" | 228276
| 5
| style="text-align:left;" | 2282765
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 7
| style="text-align:right; font-weight:bold" | B0YBKL
| 9
| style="text-align:left;" | B0YBKL9
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 8
| style="text-align:right; font-weight:bold" | 557910
| 7
| style="text-align:left;" | 5579107
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 9
| style="text-align:right; font-weight:bold" | B0YBKR
| 5
| style="text-align:left;" | B0YBKR5
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 10
| style="text-align:right; font-weight:bold" | 585284
| 2
| style="text-align:left;" | 5852842
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 11
| style="text-align:right; font-weight:bold" | B0YBKT
| 7
| style="text-align:left;" | B0YBKT7
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 12
| style="text-align:right; font-weight:bold" | B00030
| 0
| style="text-align:left;" | B000300
|
|- style="text-align:right;"
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 13
| style="text-align:right; font-weight:bold" | BOYBKT
| -> Invalid vowel in SEDOL string
| style="text-align:left;" | BOYBKT -> Invalid vowel in SEDOL string
|
|}
 
=={{header|F Sharp|F#}}==
9,655

edits