|
思路差不多
with mv as(
select l,substr(s,2,1)e,substr(s,-2,1)x,substr(s,-1)y from(
select level l,regexp_substr(moves,';[WB]\[[a-z]{2}',1,level)s from goes connect by level<=200)),
m as(select mv.*,row_number()over( partition by x,y order by l desc)rn from mv ),
t as(select chr(96+level) l from dual connect by level<=19)
select yl,
case yl when 'a' then listagg(decode(e,'W','○','B','●',decode(xl,'a','┌','s','┐','┬'))) within group(order by xl)
when 's' then listagg(decode(e,'W','○','B','●',decode(xl,'a','└','s','┘','┴'))) within group(order by xl)
else listagg(decode(e,'W','○','B','●',decode(xl,'a','├','s','┤','┼'))) within group(order by xl)
end a from
(select x.l xl,y.l yl from
t x,t y)n,m where rn(+)=1 and m.x(+)=xl and m.y(+)=yl
group by yl order by 1; |
|