SEDOLs: Difference between revisions

90 bytes removed ,  1 month ago
→‎{{header|Kotlin}}: Make Kotlin solution more succinct using modern library features
(Added Easylang)
(→‎{{header|Kotlin}}: Make Kotlin solution more succinct using modern library features)
Line 2,368:
 
=={{header|Kotlin}}==
<syntaxhighlight lang="scalakotlin">// version 1.1.0
val weights = listOfarrayOf(1, 3, 1, 7, 3, 9, 1)
 
val validChars = (('0'..'9') + ('A'..'Z')).toSet() - "AEIOU".toSet()
val weights = listOf(1, 3, 1, 7, 3, 9, 1)
 
fun sedol7(sedol6: String): String {
if (sedol6.length != 6) throw IllegalArgumentException("Length of argument string must be 6")
else -> throw IllegalArgumentException("ArgumentLength of argument string contains anmust invalidbe character6")
var sum = 0
forif (isedol6.any { it !in 0..5)validChars {})
throw IllegalArgumentException("Argument string contains an invalid character")
val c = sedol6[i]
 
val v = when (c) {
val sum = sedol6.map { it.digitToInt(36) }.zip(weights, Int::times).sum()
in '0'..'9' -> c.toInt() - 48
val check = in 'A'..'Z' (-> csum).toIntmod(10) - 55
return sedol6 + (check'0' + 48).toChar(check)
else -> throw IllegalArgumentException("Argument string contains an invalid character")
}
sum += v * weights[i]
}
val check = (10 - (sum % 10)) % 10
return sedol6 + (check + 48).toChar()
}
 
fun main(args: Array<String>) {
val sedol6s = listOf("710889", "B0YBKJ", "406566", "B0YBLH", "228276", "B0YBKL",
"710889", "557910B0YBKJ", "B0YBKR406566", "585284B0YBLH", "B0YBKT228276", "B00030B0YBKL"),
"557910", "B0YBKR", "585284", "B0YBKT", "B00030"
for (sedol6 in sedol6s) println("$sedol6 -> ${sedol7(sedol6)}")
})
}</syntaxhighlight>
for (sedol6 in sedol6s)
for (sedol6 in sedol6s) println("$sedol6 -> ${sedol7(sedol6)}")
}
}</syntaxhighlight>
 
{{out}}
44

edits