--reich_jesse_tsqlchallenge_20.sql
WITH Fibo AS (
SELECT
1 AS Id,
CONVERT(bigint, 0) AS PrevFibo,
CONVERT(bigint, 1) AS Fibo,
0 AS NumRepeats
UNION ALL
SELECT
Id + 1,
Fibo,
PrevFibo + Fibo,
CASE WHEN PATINDEX('%00%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%11%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%22%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%33%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%44%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%55%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%66%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%77%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%88%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%99%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END AS NumRepeats
FROM Fibo
WHERE Id < 92
),
FiboRanked AS (
SELECT
NumRepeats,
Fibo AS FiboNumber,
ROW_NUMBER() OVER (PARTITION BY NumRepeats ORDER BY Fibo) AS Ranking
FROM Fibo
WHERE NumRepeats > 0
)
SELECT
NumRepeats,
FiboNumber
FROM FiboRanked
WHERE Ranking <= 5
Did you find something incorrect/wrong with this solution? Take a few seconds to Report It.
Did you understand how this solution work? If you find it difficult to understand, you can Request an Explanation or you can Write an explanation to help others better understand this solution.