SEDOLs: Difference between revisions

1,066 bytes added ,  3 years ago
Added Wren
(Added Wren)
Line 3,995:
Output as in task description.
The last code is printed as BOO30A Vowels are not allowed.
</pre>
 
=={{header|Wren}}==
{{libheader|Wren-str}}
{{libheader|Wren-fmt}}
<lang ecmascript>import "/str" for Char
import "/fmt" for Conv
 
var sedol = Fn.new { |s|
if (!(s is String && s.count == 6)) return false
var weights = [1, 3, 1, 7, 3, 9]
var sum = 0
for (i in 0..5) {
var c = s[i]
if (!Char.isUpper(c) && !Char.isDigit(c)) return null
if ("AEIOU".contains(c)) return null
sum = sum + Conv.atoi(c, 36) * weights[i]
}
var cd = (10 - sum%10) % 10
return s + "%(cd)"
}
 
var tests = [
"710889",
"B0YBKJ",
"406566",
"B0YBLH",
"228276",
"B0YBKL",
"557910",
"B0YBKR",
"585284",
"B0YBKT",
"B00030",
"I23456"
]
 
for (test in tests) {
var a
var ans = (a = sedol.call(test)) ? a : "not valid"
System.print("%(test) -> %(ans)")
}</lang>
 
{{out}}
<pre>
B0YBKJ -> B0YBKJ7
406566 -> 4065663
B0YBLH -> B0YBLH2
228276 -> 2282765
B0YBKL -> B0YBKL9
557910 -> 5579107
B0YBKR -> B0YBKR5
585284 -> 5852842
B0YBKT -> B0YBKT7
B00030 -> B000300
I23456 -> not valid
</pre>
 
9,476

edits