String Calculator en Ceylon
Ya otros miembros de la comunidad pusieron aquí su solución a la kata de String Calculator, en Groovy y Kawa y creo que hay otras también.
Aquí está mi solución en Ceylon:
if (numbers.empty) {
return 0;
}
{String*} parts;
if (numbers.startsWith("//")) {
doc "Para indicar delimitador propio, debe haber al menos dos lineas"
assert(exists firstNewline = numbers.firstOccurrence("\n"));
value delim = numbers[2..firstNewline-1];
if (delim.startsWith("[") && delim.endsWith("]")) {
value delims = StringBuilder();
for (d in delim.split("[]")) {
delims.append(d);
}
parts = numbers[firstNewline+1:numbers.size].split(delims.string);
} else {
parts = numbers[firstNewline+1:numbers.size].split(delim);
}
} else {
parts = numbers.split(",\n");
}
value nums = { for (s in parts) if (exists i=parseInteger(s.trimmed)) i>1000 then 0 else i };
if (nonempty n=nums.filter((Integer i) => i<0).sequence) {
throw Exception("Negatives not allowed: ``n``");
} else if (nonempty n=nums.sequence) {
return sum(n);
}
return 0;
}
void run() {
assert(add("")==0);
assert(add("1")==1);
assert(add("1,2")==3);
assert(add("1
2")==3);
assert(add("//;
1;2")==3);
try {
add("-1,2,-3,4");
doc "Negative numbers shouldn't be allowed"
assert(false);
} catch (Exception e) {
print(e.message);
}
assert(add("2,1001")==2);
assert(add("2,1000")==1002);
assert(add("//[AB][cd]
1cd2AB3")==6);
print("ok");
}
El módulo de lenguaje no incluye expresiones regulares, pero para los requerimientos de la kata realmente no se necesitan.
- Inicie sesión o regístrese para enviar comentarios



Comentarios recientes
hace 41 mins 44 segs
hace 7 horas 40 mins
hace 1 día 9 mins
hace 1 día 8 horas
hace 1 día 23 horas
hace 1 día 23 horas
hace 2 días 2 mins
hace 2 días 3 horas
hace 2 días 5 horas
hace 2 días 7 horas