patternMinor
Substring in a infinite sequence of numbers
Viewed 0 times
numberssubstringinfinitesequence
Problem
I have an infinite sequence of numbers, starting from 1 and need to find position of begin of some given substring of numbers.
Example:
1234567891011121314151617181920 ...
S = 141
Result: 18
All i think about is convert sequence to string and find substring using Rabin-Karp or KMP. But i feel that i can use it as numbers and there is some O(1) solution using math.
Another thought is split S on pieces:
141 = [(1, 4, 1), (1, 41), (14, 1), (141)]
And i have (1-9)(10-99)(100-999)(1000-9999)... which represents infinite sequence.
Than i can use this algo:
For (1, 41): try to find 1 from (1-9) and what goes next, if 41 is not next number, than try next tuple.
For (14, 1): try to find 14 from (10-99) and and what goes next, if 1 than find position of '14'.
But i'm not sure that this is correct solution.
Maybe some advices?
Example:
1234567891011121314151617181920 ...
S = 141
Result: 18
All i think about is convert sequence to string and find substring using Rabin-Karp or KMP. But i feel that i can use it as numbers and there is some O(1) solution using math.
Another thought is split S on pieces:
141 = [(1, 4, 1), (1, 41), (14, 1), (141)]
And i have (1-9)(10-99)(100-999)(1000-9999)... which represents infinite sequence.
Than i can use this algo:
For (1, 41): try to find 1 from (1-9) and what goes next, if 41 is not next number, than try next tuple.
For (14, 1): try to find 14 from (10-99) and and what goes next, if 1 than find position of '14'.
But i'm not sure that this is correct solution.
Maybe some advices?
Solution
Your algorithm is not correct. Consider 21:
21 = [(2, 1), (21)]
First we find 2 in (1-9): 123456789. However, a 3 follows, so it's not a solution.
Then we try to find 21 in (10-99). This finds a solution, but it's 21. However there is an earlier solution:
123456789101112131415161718192021
So the solution is not correct.
The sequence you're after is A229186, but no simple formula is posted there.
21 = [(2, 1), (21)]
First we find 2 in (1-9): 123456789. However, a 3 follows, so it's not a solution.
Then we try to find 21 in (10-99). This finds a solution, but it's 21. However there is an earlier solution:
123456789101112131415161718192021
So the solution is not correct.
The sequence you're after is A229186, but no simple formula is posted there.
Context
StackExchange Computer Science Q#64212, answer score: 2
Revisions (0)
No revisions yet.