Desafio:
Algumas obras de arte são difíceis de fazer, mas tornam os comentários de código mais fáceis de ler, especialmente quando o código é denso. O desafio é criar uma ferramenta simples que converta comentários em arte ASCII simples com setas. Os comentários a serem modificados são delimitados por comentários vazios.
Por exemplo, supondo a sintaxe do comentário Haskell, converta isso:
--
-- Here's a thing
-- Here's another thing
-- The most important thing
-- * * *
--
f x=x+1*x*1*1*0
Para isso:
-- /------------< Here's a thing
-- | /-------< Here's another thing
-- | | /-< The most important thing
-- | | |
-- v v v
f x=x+1*x*1*1*0
Regras:
- Sua resposta pode ser uma função ou um programa completo
- Você pode escolher o idioma para o qual trabalha, substituindo o "-" por dois ou mais caracteres que delimitam um comentário em algum idioma
- Se estiver usando outro formato de comentário que exija delimitadores iniciais e finais, cada linha das seções reformatadas deverá ser um comentário adequado
- As seções a serem reformatadas são delimitadas pelo comentário vazio "\ n - \ n"
- Além de adicionar novas linhas, o programa não deve alterar nenhuma entrada, exceto as seções delimitadas
- Um comentário preenchido com um número arbitrário de espaços pode vir imediatamente antes de uma seção de saída adequadamente formatada
- As brechas padrão não são permitidas
Exemplos adicionais:
(input)
--
--
(output)
nothing
(input)
[Code Here]
--
-- important
-- *
--
(output)
[Code Here]
-- /-< important
-- |
-- v
(input)
--
-- Do
-- Re
-- Mi
-- Fa
-- So
-- *****
--
(output)
-- /-----< Do
-- |/----< Re
-- ||/---< Mi
-- |||/--< Fa
-- ||||/-< So
-- |||||
-- vvvvv
Pontuação:
- Menos bytes ganhos
- Submissões sem explicações ou exemplos não triviais de entrada / saída não serão consideradas (embora eu deixe um período de carência para permitir tempo para adicioná-las)
Respostas:
Ruby, 160 caracteres
Exemplo de execução:
Descrição breve:
fonte
JavaScript (ES6),
418,237,233, 236 bytesUfa, esta é minha primeira submissão no CG.
Tomou, acho, uma abordagem totalmente diferente de Washington Guedes. Acabou 54 bytes mais curto que seu primeiro passe. Minimizar tudo isso à mão era cansativo. Meu único arrependimento é não conseguir eliminar o loop while ainda, o que também me permitiria reduzir o retorno.Reescrita total, inspirando-se parcialmente em algumas das outras respostas. Eu consegui fechar a coisa toda nos mapas, tornando o retorno muito melhor. O trecho de código contém a versão comentada.
Tirou mais alguns bytes e fez o exemplo operar em si mesmo. (Você vai precisar de um monitor maior.) :)
Esqueceu uma carta inteira na especificação! Felizmente, adicionar o '<' principal foi uma correção minúscula e trivial.
Mostrar snippet de código
fonte
Python 2, 299 bytes
Espera uma nova linha à direita na entrada
Explicação / Exemplo
Entrada:
Divide a entrada por
--\n
. Cada segunda sequência é um bloco de comentários delimitado.Percorre cada sequência. Se a sequência não for um comentário, apenas imprima a sequência. De outra forma:
Divide cada linha no bloco de comentários.
Faz as duas linhas inferiores substituindo as linhas de
*
s porv
e|
.Para cada linha de comentários (para trás), remova a coluna mais à direita, adicione
/
, cole com-
e adicione comentário.Imprimir tudo
Menos golfe:
fonte
JavaScript (ES6), 253
Como uma função anônima, com o código para formatar como um parâmetro de sequência e retornando o código formatado.
Notas
Menos golfe
Teste
Mostrar snippet de código
fonte