CUSIP: Difference between revisions
Content added Content deleted
(→{{header|Vlang}}: Rename "Vlang" in "V (Vlang)") |
|||
Line 2,526: | Line 2,526: | ||
68389X106 -> false |
68389X106 -> false |
||
68389X105 -> true</pre> |
68389X105 -> true</pre> |
||
=={{header|jq}}== |
|||
''Adapted from [[#Wren|Wren]]'' |
|||
{{works with|jq}} |
|||
'''Also works with gojq, the Go implementation of jq, and with jackson-jq and fq.''' |
|||
<syntaxhighlight lang=jq> |
|||
def isCusip: |
|||
length == 9 and |
|||
explode as $s |
|||
| {sum: 0, i: 0} |
|||
| until(. == false or .i == 8; |
|||
$s[.i] as $c |
|||
| (if ($c >= 48 and $c <= 57) # '0' to '9' |
|||
then $c - 48 |
|||
elif ($c >= 65 and $c <= 90) # 'A' to 'Z' |
|||
then $c - 55 |
|||
elif $c == 42 # '*' |
|||
then 36 |
|||
elif $c == 64 # '@' |
|||
then 37 |
|||
elif $c == 35 # '#' |
|||
then 38 |
|||
else false # return false |
|||
end ) as $v |
|||
| if $v == false then false |
|||
else # check if odd as using 0-based indexing |
|||
(if (.i%2 == 1) then 2 * $v else $v end) as $v |
|||
| .sum += (($v/10)|floor) + $v%10 |
|||
| .i += 1 |
|||
end ) |
|||
| if . == false then false |
|||
else $s[8] - 48 == (10 - (.sum%10)) % 10 |
|||
end; |
|||
def candidates: [ |
|||
"037833100", |
|||
"17275R102", |
|||
"38259P508", |
|||
"594918104", |
|||
"68389X106", |
|||
"68389X105" |
|||
]; |
|||
candidates[] |
|||
| "\(.) -> \(if isCusip then "correct" else "incorrect" end)" |
|||
</syntaxhighlight> |
|||
{{output}} |
|||
<pre> |
|||
037833100 -> correct |
|||
17275R102 -> correct |
|||
38259P508 -> correct |
|||
594918104 -> correct |
|||
68389X106 -> incorrect |
|||
68389X105 -> correct |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |