RosettaCodeData/Task/ABC-problem/Ballerina/abc-problem.ballerina

33 lines
975 B
Plaintext

import ballerina/io;
function r(string word, string[] bl) returns boolean {
if word == "" { return true; }
int c = word[0].toBytes()[0] | 32;
foreach int i in 0..<bl.length() {
var b = bl[i];
if c == (b.toBytes()[0] | 32) || c == (b.toBytes()[1] | 32) {
bl[i] = bl[0];
bl[0] = b;
if r(word.substring(1), bl.slice(1)) { return true; }
var t = bl[i];
bl[i] = bl[0];
bl[0] = t;
}
}
return false;
}
function newSpeller(string blocks) returns (function(string) returns boolean) {
string[] bl = re ` `.split(blocks);
return function(string word) returns boolean {
return r(word, bl);
};
}
public function main() {
var sp = newSpeller("BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM");
foreach string word in ["A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSE"] {
io:println(word.padEnd(7), " ", sp(word));
}
}