TSQL Challenge 20 - Solution By Adán Bucio



--Adán_Bucio_tsqlchallenge_20_v4.sql
WITH FibSerie AS (
	SELECT	CAST(0 AS BIGINT) AS Pre,
			CAST(1 AS BIGINT) AS FiboNumbers,
			0 AS NumRepeats,
			1 AS n
	UNION ALL
	SELECT	f.FiboNumbers,
			f.Pre + f.FiboNumbers,
			CAST(CAST(PATINDEX('%00%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
			CAST(CAST(PATINDEX('%11%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
			CAST(CAST(PATINDEX('%22%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
			CAST(CAST(PATINDEX('%33%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
			CAST(CAST(PATINDEX('%44%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
			CAST(CAST(PATINDEX('%55%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
			CAST(CAST(PATINDEX('%66%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
			CAST(CAST(PATINDEX('%77%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
			CAST(CAST(PATINDEX('%88%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
			CAST(CAST(PATINDEX('%99%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT),
			f.n + 1
	FROM	FibSerie AS f
	WHERE	f.n < 92
)
SELECT		NumRepeats, FiboNumbers
FROM		(
				SELECT		NumRepeats, 
							FiboNumbers,
							ROW_NUMBER() OVER(PARTITION BY NumRepeats ORDER BY FiboNumbers) AS rn
				FROM		FibSerie AS f
				WHERE		NumRepeats > 0
			) AS seq
WHERE		seq.rn <= 5
ORDER BY	seq.NumRepeats, seq.FiboNumbers

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.