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)
Instructions
- Once a letter on a block is used, that block cannot be used again.
- The function should be case-insensitive.
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;
}