RosettaCodeData/Task/CUSIP/Langur/cusip-2.langur

36 lines
748 B
Text
Raw Permalink Normal View History

2024-04-19 16:56:29 -07:00
val .isCusip = fn(.s) {
if .s is not string or len(.s) != 9 {
2023-07-01 11:58:00 -04:00
return false
}
val .sum = for[=0] .i of 8 {
val .c = .s[.i]
var .v = 0
2024-03-06 22:25:12 -08:00
switch[and] .c {
2023-07-01 11:58:00 -04:00
case >= '0', <= '9':
.v = .c-'0'
case >= 'A', <= 'Z':
.v = .c-55 # .c-'A'+10
case '*': .v = 36
case '@': .v = 37
case '#': .v = 38
default: return false
}
2024-04-19 16:56:29 -07:00
if .i div 2: .v *= 2
2023-07-01 11:58:00 -04:00
_for += .v \ 10 + .v rem 10
}
.s[9]-'0' == (10-(.sum rem 10)) rem 10
}
val .candidates = w/037833100 17275R102 38259P508 594918104 68389X106 68389X105/
for .c in .candidates {
writeln .c, ": ", if(.isCusip(.c): "good" ; "bad")
}