Introdução
A maioria dos jogadores de código aqui adiciona explicações aos envios, para que seja mais fácil entender o que está acontecendo. Normalmente, as linhas de código vão à esquerda e a explicação correspondente à direita com algum tipo de separador. Para torná-lo bonito, os separadores estão todos na mesma coluna. Além disso, o texto de explicação longo geralmente é agrupado na próxima linha, para que os leitores não precisem rolar horizontalmente para ler tudo.
No entanto, quando você deseja editar esta explicação porque criou alguns golfinhos malucos, muitas vezes acaba gastando tempo para torná-la bonita novamente. Como essa é uma tarefa muito repetitiva, você deseja escrever um programa para isso.
O desafio
Dadas várias linhas de código com explicação e um separador, imprima o código bem formatado com explicação.
Exemplo
Entrada
shM-crz1dc4. "ANDBYOROF # z = entrada rz1 # converte entrada para maiúscula cd # split input nos espaços c4. "ANDBYOROF # cria uma lista de palavras de uma sequência compactada que deve ser ignorada - # filtrar essas palavras hM # leva apenas a primeira letra de todas as palavras s # junte-os em uma sequência
Resultado
shM-crz1dc4. "ANDBYOROF # z = entrada rz1 # converte entrada para maiúscula cd # split input nos espaços c4. "ANDBYOROF # cria uma lista de palavras de uma string empacotada que deve ser # ignorado - # filtrar essas palavras hM # leva apenas a primeira letra de todas as palavras s # junte-os em uma sequência
Um cookie para o primeiro que pode descobrir o que esse código faz.
O algoritmo de formatação
- Encontre a linha de código mais longa (excluindo a explicação e os espaços entre o código e o separador).
- Adicione 5 espaços após essa linha de código e acrescente o separador correspondente com a explicação. Agora é a linha de referência.
- Ajuste todas as outras linhas a essa linha de referência, para que os separadores estejam todos na mesma coluna.
- Quebra todas as linhas com mais de 93 caracteres em uma nova linha da seguinte maneira:
- Encontre a última palavra cujo final está na coluna 93 ou inferior.
- Pegue todas as palavras após esta e envolva-as em uma nova linha com o separador à esquerda e o espaçamento correto. O espaço entre essas duas palavras deve ser excluído; portanto, a primeira linha termina com um caractere de palavra e a segunda linha inicia com uma após o separador.
- Se a linha resultante ainda tiver mais de 93 caracteres, faça o mesmo novamente até que cada linha esteja abaixo de 94 caracteres.
Notas
- Uma palavra consiste em caracteres que não são espaços em branco. As palavras são separadas por um único espaço.
- A quebra de linha é sempre possível. Isso significa que nenhuma palavra é tão longa que tornaria a embalagem impossível.
- A entrada conterá apenas ASCII imprimível e não terá espaços em branco à direita
- O separador aparecerá apenas uma vez por linha.
- Embora a explicação possa ter tamanho ilimitado, o separador e o código podem ter apenas um comprimento máximo combinado de
93 - 5 = 87
caracteres. Os 5 caracteres são os espaços entre o código e o separador. O código e o separador sempre terão pelo menos um caractere. - A entrada pode conter linhas vazias. Esses nunca conterão nenhum caractere (exceto uma nova linha se você receber a entrada como sequência de múltiplas linhas). Essas linhas vazias também devem estar presentes na saída.
- Cada linha terá algum código, um separador e uma explicação. Exceções são linhas vazias.
- Você pode receber a entrada em qualquer formato razoável, desde que não seja pré-processada. Deixe claro em sua resposta qual você usa.
- A saída pode ser uma sequência multilinha ou uma lista de sequências.
Regras
- Função ou programa completo permitido.
- Regras padrão para entrada / saída.
- Aplicam-se brechas padrão .
- Isso é código-golfe , portanto, a menor contagem de bytes vence. O desempate é uma submissão anterior.
Casos de teste
O formato de entrada aqui é uma lista de cadeias que representam as linhas e uma única cadeia para o separador. Ambos são separados por vírgula. Saída é uma lista de strings.
['shM-crz1dc4. "ANDBYOROF # z = entrada', '', 'rz1 # converte entrada em maiúscula', 'cd # entrada dividida em espaços', 'c4." ANDBYOROF # cria uma lista de palavras de um pacote string que deve ser ignorada ',' - # filtrar essas palavras ',' hM # pega apenas a primeira letra de todas as palavras ',' s # junta-as a uma string '], "#" -> [' shM-crz1dc4 . "ANDBYOROF # z = entrada ',' ',' rz1 # converte entrada em maiúscula ',' cd # entrada dividida em espaços ',' c4." ANDBYOROF # cria uma lista de palavras de uma sequência compactada que deve ser ' , '# ignorado', '- # filtra essas palavras ',' hM # pega apenas a primeira letra de todas as palavras ',' s # junta-as a uma sequência '] ['codecodecode e # Explanation', 'sdf dsf sdf e # A Explicação Muito, muito, muito muito muito muito muito muito muito longo longo longo longo longo longo longo longo longo longo longo explicação longa e cada vez mais longa' '' ',' alguns mais código # e mais algumas explicações '], "e #" -> [' codecodecode e # Explicação ',' sdf dsf sdf e # A Muito muito muito muito muito muito muito muito muito muito muito muito tempo muito tempo muito longo ',' e # long longo longo longo longo longo explicação e ele fica cada vez mais longo ',' e # e mais ',' ',' mais código e # e mais explicação ']
Feliz codificação!
length of the longest code-line + 5
. Isso também se aplicava a linhas que contêm apenas uma explicação, porque foram quebradas.