Algumas pessoas insistem em usar espaços para tabulação e recuo.
Para tabulação, isso é indiscutivelmente errado. Por definição, os tabuladores devem ser usados para tabulação.
Mesmo para indentação, os tabuladores são objetivamente superiores:
Existe um consenso claro na comunidade Stack Exchange.
Usar um único espaço para indentação é visualmente desagradável; usar mais de um é um desperdício.
Como todos os
golfistassabem, os programas devem ser o mais curtos possível. Além de economizar espaço no disco rígido, os tempos de compilação também são reduzidos se for necessário processar menos bytes.Ao ajustar a largura da guia 1 , o mesmo arquivo parece diferente em cada computador, para que todos possam usar sua largura de recuo favorita sem modificar o arquivo real.
Todos os bons editores de texto usam tabuladores por padrão (e definição).
Eu digo e estou sempre certa!
Infelizmente, nem todo mundo ouve a razão. Alguém enviou a você um arquivo que está fazendo algo errado na TM e você precisa corrigi-lo. Você poderia fazê-lo manualmente, mas haverá outros.
Já é ruim o suficiente que os espaçadores estejam desperdiçando seu precioso tempo, então você decide escrever o programa mais curto possível para resolver o problema.
Tarefa
Escreva um programa ou uma função que faça o seguinte:
Leia uma única sequência de caracteres de STDIN ou como um argumento de linha de comando ou função.
Identifique todos os locais em que os espaços foram usados para tabulação ou recuo.
Uma sequência de espaços é um recuo se ocorrer no início de uma linha.
Uma execução de dois ou mais espaços é tabulada se não for recuo.
Um único espaço que não é recuo pode ou não ter sido usado para tabulação. Como esperado, quando você usa o mesmo personagem para propósitos diferentes, não há uma maneira fácil de dizer. Portanto, diremos que o espaço foi usado para confusão .
Determine a maior largura possível de tabulação 1, para a qual todos os espaços usados para tabulação ou recuo podem ser substituídos por tabuladores, sem alterar a aparência do arquivo.
Se a entrada não contiver tabulação nem indentação, é impossível determinar a largura da tabulação. Nesse caso, pule a próxima etapa.
Usando a largura da guia previamente determinada, substitua todos os espaços usados para tabulação ou recuo pelos tabuladores.
Além disso, sempre que possível, sem alterar a aparência do arquivo, substitua todos os espaços usados para confusão pelos tabuladores. (Em caso de dúvida, livre-se dos espaços.)
Retorne a string modificada da sua função ou imprima-a em STDOUT.
Exemplos
Todos os espaços de
a bc def ghij
são tabulações.
Cada execução de espaços preenche a sequência anterior de caracteres não espaciais para uma largura de 5, portanto, a largura correta da guia é 5 e a saída correta 2 é
a--->bc-->def->ghij
Os dois primeiros espaços de
ab cde f ghi jk lm
são tabulações, os outros confusão.
A largura correta da guia é 4, portanto a saída correta 2 é
ab->cde>f ghi>jk lm
O último espaço permanece intocado, pois seria renderizado como dois espaços se substituído por um tabulador:
ab->cde>f ghi>jk->lm
Todos os espaços, exceto um
int main( ) { puts("TABS!"); }
são recuos, o outro é confusão.
Os níveis de indentação são 0, 4 e 8 espaços, portanto a largura correta da guia é 4 e a saída correta 2 é
int --->main( ) --->{ --->--->puts("TABS!"); --->}
O espaço em
( )
seria renderizado como três espaços se substituído por um tabulador, permanecendo intocado.Os dois primeiros espaços de
x yz w
são recuos, os outros confundem.
A largura da guia adequada é 2 e a saída correta 2 é
->x>yz w
O último espaço seria renderizado como dois espaços se substituído por um tabulador, permanecendo intocado.
Os dois primeiros espaços de
xy zw
são recuos, os outros três são tabulação.
Somente uma largura de guia de 1 permite eliminar todos os espaços; portanto, a saída correta 2 é
>>xy>>>zw
Todos os espaços de
a b c d
são confusão.
Não existe a maior largura possível da guia, portanto a saída correta 2 é
a b c d
Regras adicionais
A entrada consistirá inteiramente em caracteres ASCII imprimíveis e alimentações de linha.
Você pode supor que haja no máximo 100 linhas de texto e no máximo 100 caracteres por linha.
Se você escolher STDOUT para saída, poderá imprimir um único avanço de linha à direita.
Aplicam-se as regras padrão de código de golfe .
1 A largura da guia é definida como a distância em caracteres entre duas paradas consecutivas , usando uma fonte monoespaçada.
2 As setas de arte ASCII representam os tabuladores que o Stack Exchange se recusa a renderizar corretamente, para o qual enviei um relatório de erro. A saída real deve conter tabuladores reais.
programs should be as short as possible
Acredito ter encontrado o irmão há muito perdido de Arthur Whitney !!