CUSIP: Difference between revisions
Content deleted Content added
Added Dyalect programming language |
Langurmonkey (talk | contribs) added langur language example |
||
Line 1,329: | Line 1,329: | ||
68389X105 -> correct |
68389X105 -> correct |
||
</pre> |
</pre> |
||
=={{header|Langur}}== |
|||
<lang Langur>val .isCusip = f(.s) { |
|||
if not isString(.s) or len(.s) != 9 { |
|||
return false |
|||
} |
|||
var .sum = 0 |
|||
for .i = 1; .i < 9; .i+=1 { |
|||
val .c = stringToCp .s, .i |
|||
var .v = 0 |
|||
given .c, .c { |
|||
case >= '0', <= '9': |
|||
.v = .c - '0' |
|||
case >= 'A', <= 'Z': |
|||
val .p = .c - 'A' + 1 |
|||
.v = .p + 9 |
|||
case '*', _: .v = 36 |
|||
case '@', _: .v = 37 |
|||
case '#', _: .v = 38 |
|||
default: return false |
|||
} |
|||
if .i // 2 == 0 { |
|||
.v x= 2 |
|||
} |
|||
.sum += .v \ 10 + .v mod 10 |
|||
} |
|||
stringToCp(.s, 9) - 48 == (10 - (.sum mod 10)) mod 10 |
|||
} |
|||
val .candidates = [ |
|||
"037833100", |
|||
"17275R102", |
|||
"38259P508", |
|||
"594918104", |
|||
"68389X106", |
|||
"68389X105", |
|||
] |
|||
for .c in .candidates { |
|||
writeln .c, ": ", if(.isCusip(.c): "good" ; "bad") |
|||
}</lang> |
|||
{{out}} |
|||
<pre>037833100: good |
|||
17275R102: good |
|||
38259P508: good |
|||
594918104: good |
|||
68389X106: bad |
|||
68389X105: good</pre> |
|||
=={{header|Lua}}== |
=={{header|Lua}}== |