m`^ *
$&├──
{4}
|
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
^
.¶
Experimente online!
Suponho que eu poderia tecnicamente contar isso como um byte por caractere trocando alguns caracteres, lendo a fonte como ISO 8859-1 e encontrando uma codificação de byte único para a saída que contém ├e └, mas não posso me dar ao trabalho de trabalhar os detalhes agora. (Para o registro, isso seria 72 bytes.)
Explicação
Etapa 1: Substituição
m`^ *
$&├──
Começamos combinando o recuo em cada linha e inserindo ├──.
Etapa 2: Substituição
{4}
|
Em seguida, combinamos todos os grupos de 4 espaços e substituímos o primeiro por a |. Agora, tudo o que precisa ser corrigido é o |que vai para a parte inferior da saída e ├deve ser └. Ambos os casos podem ser reconhecidos observando o caractere diretamente abaixo do que potencialmente queremos alterar.
Etapa 3: Transliteração
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
As (?<=(.)*)contagens de quantos caracteres precedem o jogo na linha atual para medi-la da posição horizontal. Em seguida, o lookahead pula para a próxima linha com .+¶, corresponde a quantos caracteres capturamos em grupo 1com (?>(?<-1>.)*)(para avançar para a mesma posição horizontal) e, em seguida, verifica se o próximo caractere (ou seja, abaixo da correspondência real) é um dos |├└. Se for esse o caso, a correspondência falha e, em todos os outros casos, ela é bem-sucedida e o estágio substitui os espaços por |e └para ├.
Isso não corrigirá todos os caracteres em uma única execução; portanto, aplicamos esse estágio repetidamente com a +opção até que a saída pare de mudar.
Etapa 4: Substituição
^
.¶
Tudo o que resta é a primeira linha; portanto, simplesmente combinamos o início da string e acrescentamos um .e um avanço de linha.