18 lines
492 B
Plaintext
18 lines
492 B
Plaintext
func can_make_word(word, blocks) {
|
|
|
|
blocks.map! { |b| b.uc.chars.sort.join }.freq!
|
|
|
|
func(word, blocks) {
|
|
var char = word.shift
|
|
var candidates = blocks.keys.grep { |k| 0 <= k.index(char) }
|
|
|
|
for candidate in candidates {
|
|
blocks{candidate} <= 0 && next;
|
|
local blocks{candidate} = (blocks{candidate} - 1);
|
|
return true if (word.is_empty || __FUNC__(word, blocks));
|
|
}
|
|
|
|
return false;
|
|
}(word.uc.chars, blocks)
|
|
}
|