DEV Community

dev.to staff
dev.to staff

Posted on

5 2

Daily Challenge #102 - Pentabonacci

Given the following sequence, what is the number of total values for the odd terms of the sequence, up to the n-th term. The number n will be given as a positive integer.

f(0) = 0
f(1) = 1
f(2) = 1
f(3) = 2
f(4) = 4;
f(n) = f(n-1) + f(n-2) + f(n-3) + f(n-4) + f(n-5);

1 is the only value that will be duplicated in the sequence, it should only be counted once.

Examples:

countPentafib(5) => 1
because the terms up to 5 are: [0, 1, 1, 2, 4, 8], 1 is the only odd and is only counted once.

countPentafib(10) => 3
[1, 1, 31, 61] are each odd and should be counted.

countPentafib(15) => 5
[1, 1, 31, 61, 1793, 3525] are all odd and 1 is only counted once.

Good luck!


This challenge comes from raulbc777 on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (3)

Collapse
 
aminnairi profile image
Amin • Edited

Haskell

countPentaFibonacci :: Int -> Int
countPentaFibonacci limit 
    | limit < 1 = 0
    | limit == 1 = 1
    | otherwise = length $ filter odd $ map f [2..limit]
    where
        f 0 = 0
        f 1 = 1
        f 2 = 1
        f 3 = 2
        f 4 = 4
        f x = f (x - 1) + f (x - 2) + f (x - 3) + f (x - 4) + f (x - 5)

Online playground

Hosted on Repl.it.

Collapse
 
colorfusion profile image
Melvin Yeo

In Golang, assuming input is a valid integer.

package main

var fibMap = map[int]int{
    0: 0,
    1: 1,
    2: 1,
    3: 2,
    4: 4,
}

func f(n int) int {
    if n <= 4 {
        return fibMap[n]
    }

    result := f(n-1) + f(n-2) + f(n-3) + f(n-4) + f(n-5)
    fibMap[n] = result
    return result
}

func countPentafib(n int) int {
    odds := make(map[int]bool)
    for i := 0; i < n; i++ {
        result := f(i)
        if result%2 == 1 {
            odds[result] = true
        }
    }

    return len(odds)
}

func main() {
}

Tests

package main

import "testing"

func TestPentaFib(t *testing.T) {
    params := map[int]int{
        5:  1,
        10: 3,
        15: 5,
    }
    for key, value := range params {
        result := countPentafib(key)

        if result != value {
            t.Errorf("Incorrect answer for %d, expected: %d, got: %d", key, value, result)
        }
    }
}
Collapse
 
erezwanderman profile image
erezwanderman

Javascript:

Pentabonacci = n => n < 2 ? n : Math.floor((n - 1) / 6) + Math.floor((n - 2) / 6) + 1

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay