Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- drop table if exists #z;
- select item, item as parsed into #z from dbo.D10_staging_table
- DECLARE @loop int=0
- while @loop<50
- BEGIN
- update #z set parsed=replace(parsed, '<>','') where parsed like '%<>%'
- update #z set parsed=replace(parsed, '{}','') where parsed like '%{}%'
- update #z set parsed=replace(parsed, '()','') where parsed like '%()%'
- update #z set parsed=replace(parsed, '[]','')
- set @loop=@loop+1
- END;
- -- Part 1 Answer
- with cte as (
- select
- case when patindex('%[[,<,(]}%', parsed)>0 then 1197 else 0 end as c1 -- bad closing } --1197 pts
- ,case when patindex('%[[,{,(]>%', parsed)>0 then 25137 else 0 end as c2 -- bad closing > -- 25137 pts
- ,case when patindex('%[[,{,<])%', parsed)>0 then 3 else 0 end as c3 -- bad closing ) -- 3pts
- ,case when patindex('%[(,{,<]]%', parsed)>0 then 57 else 0 end as c4 -- bad closing ] --57 points.
- from #z
- where patindex('%[[,<,(]}%', parsed)>0 or patindex('%[[,{,(]>%', parsed)>0 or patindex('%[[,{,<])%', parsed) >0 or patindex('%[(,{,<]]%', parsed)>0
- ) select sum(c1)+sum(c2)+sum(c3)+sum(c4) from cte
- -- Part 2.
- drop table if exists #argh;
- with cte as (
- select item, parsed,
- case when patindex('%[[,<,(]}%', parsed)>0 then 1197 else 0 end as c1
- ,case when patindex('%[[,{,(]>%', parsed)>0 then 25137 else 0 end as c2
- ,case when patindex('%[[,{,<])%', parsed)>0 then 3 else 0 end as c3
- ,case when patindex('%[(,{,<]]%', parsed)>0 then 57 else 0 end as c4
- from #z
- where patindex('%[[,<,(]}%', parsed)=0 and patindex('%[[,{,(]>%', parsed)=0 and patindex('%[[,{,<])%', parsed) =0 and patindex('%[(,{,<]]%', parsed)=0
- ),cte2 as( select item, parsed,replace(replace(replace(replace(reverse(parsed),'<','>'),'{','}'), '[',']'),'(',')')as reversed, len(parsed) as length_,
- replace(replace(replace(replace(reverse(parsed),'<','4'),'{','3'), '[','2'),'(','1') as reversed2
- from cte) select *, convert(bigint, 0) as result into #argh from cte2
- DECLARE @loop2 Int=0
- while @loop2<30
- BEGIN
- update #argh set result=(result*5)+convert(int, substring(reversed2, 1,1)) where len(reversed2)>0
- update #argh set reversed2='' where len(reversed2)=1
- update #argh set reversed2=right(reversed2, len(reversed2)-1) where len(reversed2)>1
- set @loop2=@loop2+1
- END
- with cte as(
- select row_number() over (order by result) as row#, result from #argh)
- select result from cte where row#=((select count(*) from cte)/2)+1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement