3.0 KiB
3.0 KiB
title | id | challengeType |
---|---|---|
ABC Problem | 594810f028c0303b75339acc | 5 |
Description
(B O) (X K) (D Q) (C P) (N A) (G T) (R E) (T G) (Q D) (F S) (J W) (H U) (V I) (A N) (O B) (E R) (F S) (L Y) (P C) (Z M)Some rules to keep in mind: Once a letter on a block is used, that block cannot be used again. The function should be case-insensitive. Implement a function that takes a string (word) and determines whether the word can be spelled with the given collection of blocks.
Instructions
Tests
tests:
- text: <code>canMakeWord</code> is a function.
testString: assert(typeof canMakeWord === 'function', '<code>canMakeWord</code> is a function.');
- text: <code>canMakeWord</code> should return a boolean.
testString: assert(typeof canMakeWord('hi') === 'boolean', '<code>canMakeWord</code> should return a boolean.');
- text: <code>canMakeWord("bark")</code> should return true.
testString: assert(canMakeWord(words[0]), '<code>canMakeWord("bark")</code> should return true.');
- text: <code>canMakeWord("BooK")</code> should return false.
testString: assert(!canMakeWord(words[1]), '<code>canMakeWord("BooK")</code> should return false.');
- text: <code>canMakeWord("TReAT")</code> should return true.
testString: assert(canMakeWord(words[2]), '<code>canMakeWord("TReAT")</code> should return true.');
- text: <code>canMakeWord("COMMON")</code> should return false.
testString: assert(!canMakeWord(words[3]), '<code>canMakeWord("COMMON")</code> should return false.');
- text: <code>canMakeWord("squAD")</code> should return true.
testString: assert(canMakeWord(words[4]), '<code>canMakeWord("squAD")</code> should return true.');
- text: <code>canMakeWord("conFUSE")</code> should return true.
testString: assert(canMakeWord(words[5]), '<code>canMakeWord("conFUSE")</code> should return true.');
Challenge Seed
function canMakeWord(word) {
// Good luck!
}
After Test
const words = ['bark', 'BooK', 'TReAT', 'COMMON', 'squAD', 'conFUSE'];
Solution
function canMakeWord(word) {
const characters = 'BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM';
const blocks = characters.split(' ').map(pair => pair.split(''));
const letters = [...word.toUpperCase()];
let length = letters.length;
const copy = new Set(blocks);
letters.forEach(letter => {
for (let block of copy) {
const index = block.indexOf(letter);
if (index !== -1) {
length--;
copy.delete(block);
break;
}
}
});
return !length;
}