SEDOLs: Difference between revisions
Content added Content deleted
Drkameleon (talk | contribs) (Added Arturo implementation) |
(→{{header|Excel}}: Added a variant for Excel LAMBDA) |
||
Line 1,162: | Line 1,162: | ||
</pre> |
</pre> |
||
=={{header|Excel |
=={{header|Excel}}== |
||
===VBA=== |
|||
<lang lb> |
|||
Function getSedolCheckDigit(Input1) |
<lang lb>Function getSedolCheckDigit(Input1) |
||
Dim mult(6) As Integer |
Dim mult(6) As Integer |
||
mult(1) = 1: mult(2) = 3: mult(3) = 1 |
mult(1) = 1: mult(2) = 3: mult(3) = 1 |
||
Line 1,189: | Line 1,189: | ||
getSedolCheckDigit = Input1 + CStr((10 - (Total Mod 10)) Mod 10) |
getSedolCheckDigit = Input1 + CStr((10 - (Total Mod 10)) Mod 10) |
||
End Function |
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#}}== |
=={{header|F Sharp|F#}}== |