curriculum/challenges/english/blocks/daily-coding-challenges-javascript/69b1028d6e265413d0198a2e.md
Given a string, return a new string where each letter is capitalized if its index is a Fibonacci number, and lowercased otherwise.
The Fibonacci sequence is a series of numbers where each number is the sum of the two preceding ones. The first 10 numbers in the sequence are 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.
0.capitalizeFibonacci("hello world") should return "HELLo woRld".
assert.equal(capitalizeFibonacci("hello world"), "HELLo woRld");
capitalizeFibonacci("HELLO WORLD") should return "HELLo woRld".
assert.equal(capitalizeFibonacci("HELLO WORLD"), "HELLo woRld");
capitalizeFibonacci("hello, world!") should return "HELLo, wOrld!".
assert.equal(capitalizeFibonacci("hello, world!"), "HELLo, wOrld!");
capitalizeFibonacci("The quick brown fox jumped over the lazy dog.") should return "THE qUicK broWn fox jUmped over thE lazy dog.".
assert.equal(capitalizeFibonacci("The quick brown fox jumped over the lazy dog."), "THE qUicK broWn fox jUmped over thE lazy dog.");
capitalizeFibonacci("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin pulvinar ex nibh, vel ullamcorper ligula egestas quis. Integer tincidunt fringilla accumsan. Integer et metus placerat, gravida felis at, pellentesque nisl.") should return "LOREm ipSum dOlor sit amet, consecTetur adipiscing elit. proin pulvinar ex nibh, vel ullaMcorper ligula egestas quis. integer tincidunt fringillA accumsan. integer et metus placerat, gravida felis at, pellentesque nisl.".
assert.equal(capitalizeFibonacci("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin pulvinar ex nibh, vel ullamcorper ligula egestas quis. Integer tincidunt fringilla accumsan. Integer et metus placerat, gravida felis at, pellentesque nisl."), "LOREm ipSum dOlor sit amet, consecTetur adipiscing elit. proin pulvinar ex nibh, vel ullaMcorper ligula egestas quis. integer tincidunt fringillA accumsan. integer et metus placerat, gravida felis at, pellentesque nisl.");
function capitalizeFibonacci(str) {
return str;
}
function capitalizeFibonacci(str) {
const fibs = new Set([0, 1]);
let a = 0, b = 1;
while (b < str.length) {
[a, b] = [b, a + b];
fibs.add(b);
}
return str
.split("")
.map((char, i) => {
if (!/[a-zA-Z]/.test(char)) return char;
return fibs.has(i) ? char.toUpperCase() : char.toLowerCase();
})
.join("");
}