Back to Freecodecamp

Challenge 235: Capitalized Fibonacci

curriculum/challenges/english/blocks/daily-coding-challenges-javascript/69b1028d6e265413d0198a2e.md

latest2.6 KB
Original Source

--description--

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.

  • The first character is at index 0.
  • If the index of non-letter characters is a Fibonacci number, leave it unchanged.

--hints--

capitalizeFibonacci("hello world") should return "HELLo woRld".

js
assert.equal(capitalizeFibonacci("hello world"), "HELLo woRld");

capitalizeFibonacci("HELLO WORLD") should return "HELLo woRld".

js
assert.equal(capitalizeFibonacci("HELLO WORLD"), "HELLo woRld");

capitalizeFibonacci("hello, world!") should return "HELLo, wOrld!".

js
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.".

js
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.".

js
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.");

--seed--

--seed-contents--

js
function capitalizeFibonacci(str) {

  return str;
}

--solutions--

js
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("");
}