Communities

tag:snake search within a tag
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
created:<1w created < 1 week ago
post_type:xxxx type of post
Challenges

Fibonacci without consecutive digits

+2
−1

Output the Nth number in the list of Fibonacci numbers that have no consecutive digits.

Input

• A non-negative integer.

Output

• The Nth number in the list of Fibonacci numbers whose base 10 (decimal) representation has no adjacent digits that are consecutive.
• The Fibonacci numbers start with 0 and 1, then each subsequent Fibonacci number is the sum of the previous two Fibonacci numbers.
• The Fibonacci numbers are zero indexed:
• For input 0, the output is 0.
• For input 1, the output is 1.
• Two digits are consecutive if their absolute difference is 1.
• The consecutive digits can be in either ascending or descending order - either will lead to exclusion from the list.

Examples

Single digit Fibonacci numbers

• A single digit number has no adjacent digits, so all single digit Fibonacci numbers are included.

Two digit Fibonacci numbers

• 34 and 89 are excluded because their digits are consecutive.
• 21 is also excluded due to consecutive digits in descending order.

• 46368 contains the digits 4 and 3, which are consecutive digits. However, they are not adjacent (being separated by a 6) so 46368 is included.

Test cases

Test cases are in the format input : output.

0 : 0
1 : 1
2 : 1
3 : 2
4 : 3
5 : 5
6 : 8
7 : 13
8 : 55
9 : 144
10 : 377
11 : 1597
12 : 2584
13 : 4181
14 : 17711
15 : 46368
16 : 75025
17 : 196418
18 : 514229
19 : 14930352
20 : 39088169


Scoring

This is a code golf challenge. Your score is the number of bytes in your code. Lowest score for each language wins.

Explanations are optional, but I'm more likely to upvote answers that have one.

Why does this post require moderator attention?
Why should this post be closed?

+1
−0

Pyth, 25 23 bytes

@f-1aM.:jT;2u+Gs>2GyQU2


Try it online!

First, we generate the Fibonacci numbers:

u+Gs>2GyQU2
U2    range(2), the list [0, 1]
u              Apply the following function iteratively,
returning the final result.
+G            Add to the end of the current list
s>2G        The sum of the last two elements of the current list
yQ      Repeat for twice the input number of repetitions


Next, we check for consecutive digits.

@f-1aM.:jT;2
f              Filter on the following function
jT;     Take the base ten representation of the number.
; accesses T's value in the external scope.
.:   2    Take all pairs of digits.
aM          Map pairs to their absolute difference.
-1            Check if 1 is not among the differences.
@               Index the filter result at the input position.

Why does this post require moderator attention?

+1
−0

Python 3, 149 bytes

g=lambda r:r>1and g(r-1)+g(r-2)or r
lambda n:[i for(i)in map(g,range(2*n+2))if(lambda*l:all(abs(n-i)!=1for(n,i)in zip(l,l[1:])))(*map(int,str(i)))][n]


Try it online!

Based on @isaacg‭'s idea of mapping to twice the input, I had a similar thought, but I wasn't sure about the growth rate of the non-adjacent sequence...

Here's a mashed up version of my previous attempt:

j=n
while len(l:=[*filter(lambda*l:all(abs(n-i)!=1for(n,i)in zip(l,l[1:])),[*map(lambda i:[*map(int,str(i))],map(g,range(j:=j+1)))])])<n+1:0
print(l[:-1])

Why does this post require moderator attention?