ed, 35 caracteres
s/[a-zA-Z]*\([a-zA-Z]\)\|./\1/g
p
Q
Então, o mundo termina em ed. Como gosto de ser literal demais, decidi escrever para escrever a solução com ed - e, aparentemente, é realmente uma linguagem de programação . É surpreendentemente curto, mesmo considerando que muitas soluções mais curtas já existem neste segmento. Seria melhor se eu pudesse usar algo diferente [a-zA-Z]
, mas considerando que ed não é uma linguagem de programação, é realmente bom o suficiente.
Primeiro, eu gostaria de dizer que isso apenas analisa a última linha do arquivo. Seria possível analisar mais, basta digitar ,
no início das duas primeiras linhas (isso especificou o intervalo "tudo", em oposição ao intervalo padrão da última linha), mas isso aumentaria o tamanho do código para 37 caracteres.
Agora, para explicações. A primeira linha faz exatamente o que a solução Perl faz (exceto sem suporte para caracteres Unicode). Não copiei a solução Perl, apenas inventei algo semelhante por coincidência.
A segunda linha imprime a última linha, para que você possa ver a saída. As forças da terceira linha são encerradas - eu tenho que fazer isso, caso contrário, ed
seria impresso ?
para lembrá-lo de que você não salvou o arquivo.
Agora, como executá-lo. Bem, é muito simples. Basta executar ed
com o arquivo que contém o caso de teste, enquanto canaliza meu programa, assim.
ed -s testcase < program
-s
é silencioso. Isso impede a ed
saída de um tamanho de arquivo feio no início. Afinal, eu o uso como um script, não como editor, portanto não preciso de metadados. Se eu não fizesse isso, ed mostraria o tamanho do arquivo que não poderia impedir de outra forma.