telgif: figlet inverso

20

figleté um utilitário que converte texto sem formatação em uma representação ascii-art para uso em banners e similares. Por exemplo:

$ figlet "CODE GOLF"
  ____ ___  ____  _____    ____  ___  _     _____ 
 / ___/ _ \|  _ \| ____|  / ___|/ _ \| |   |  ___|
| |  | | | | | | |  _|   | |  _| | | | |   | |_   
| |__| |_| | |_| | |___  | |_| | |_| | |___|  _|  
 \____\___/|____/|_____|  \____|\___/|_____|_|    

$

Escreva um programa ou função que retire a saída ascii-art figlete a retorne ao texto sem formatação original.

Pode ser útil para você instalar figlet. Eu tenho a versão 2.2.5, que é o que você obtém se você estiver sudo apt-get install figletno Ubuntu 14.04. Na verdade, este folheto possui várias "fontes". Para os propósitos deste contexto, estaremos apenas lidando com a standardfonte padrão .

O texto de entrada não terá mais do que 80 caracteres de largura e será gerado a partir de texto sem formatação contendo apenas os caracteres maiúsculos e o espaço.

Seu programa não pode ligar figletou seu código fonte de forma alguma.

Exemplo

Entrada:

    _    ____   ____ ____  _____ _____ ____ _   _ ___ 
   / \  | __ ) / ___|  _ \| ____|  ___/ ___| | | |_ _|
  / _ \ |  _ \| |   | | | |  _| | |_ | |  _| |_| || | 
 / ___ \| |_) | |___| |_| | |___|  _|| |_| |  _  || | 
/_/   \_\____/ \____|____/|_____|_|   \____|_| |_|___|

     _ _  ___     __  __ _   _  ___  ____   ___  ____  
    | | |/ / |   |  \/  | \ | |/ _ \|  _ \ / _ \|  _ \ 
 _  | | ' /| |   | |\/| |  \| | | | | |_) | | | | |_) |
| |_| | . \| |___| |  | | |\  | |_| |  __/| |_| |  _ < 
 \___/|_|\_\_____|_|  |_|_| \_|\___/|_|    \__\_\_| \_\

 ____ _____ _   ___     ____        ____  ____   _______
/ ___|_   _| | | \ \   / /\ \      / /\ \/ /\ \ / /__  /
\___ \ | | | | | |\ \ / /  \ \ /\ / /  \  /  \ V /  / / 
 ___) || | | |_| | \ V /    \ V  V /   /  \   | |  / /_ 
|____/ |_|  \___/   \_/      \_/\_/   /_/\_\  |_| /____|

Saída:

ABCDEFGHI
JKLMNOPQR
STUVWXYZ

Entrada:

 ____ _____  _    ____   __        ___    ____  ____  
/ ___|_   _|/ \  |  _ \  \ \      / / \  |  _ \/ ___| 
\___ \ | | / _ \ | |_) |  \ \ /\ / / _ \ | |_) \___ \ 
 ___) || |/ ___ \|  _ <    \ V  V / ___ \|  _ < ___) |
|____/ |_/_/   \_\_| \_\    \_/\_/_/   \_\_| \_\____/ 

Saída:

STAR WARS

Observe que uma edição anterior desta pergunta permitiu entradas contendo letras maiúsculas e minúsculas e números. Foi apontado que isso causou vários pontos de ambiguidade com certas combinações de caracteres adjacentes. Tornou-se óbvio que eu precisava encontrar rigorosamente um conjunto de caracteres sem essas colisões para que o concurso fosse realmente possível. No começo, tentei todas as letras minúsculas e numerais com este liner de shell:

for t in {0..9}{a..z} {a..z}{a..z} {a..z}{0..9} {0..9}{0..9} ; do figlet $t | tr '\n' ':'; echo ; done | sort | uniq -d | tr ':' '\n'

Isso produziu { j1, jl} e { i1, il} como pares ambíguos. Portanto, com todas as letras maiúsculas (como sugerido por @AlexA.), Não há pares ambíguos:

for t in {A-Z} ; do figlet $t | tr '\n' ':'; echo ; done | sort | uniq -d | tr ':' '\n'
Trauma Digital
fonte
5
Eu sugeriria uma cláusula 'você não pode chamar figlet', porque, de outra forma, certamente o programa mais curto irá percorrer todas as strings possíveis, chamando figlet nelas e comparando a igualdade.
orlp 30/07/2015
1
O código fonte do figlet pode ser encontrado no seguinte repositório git: git://git.debian.org/git/collab-maint/figlet.git(faça o download com git clone).
Maçaneta
4
Nota: este desafio é muito difícil de codificar, muito menos codificar golfe.
Lynn
4
1e lnão são idênticos, mas V1e Vlsão.
Lynn
2
Para pessoas que não possuem um sistema capaz de executar o figlet, existem várias versões online. Procure por "figlet online". Por exemplo, este parece bastante direto e sem anúncios: network-science.de/ascii . Certifique-se de escolher a fonte "padrão".
Reto Koradi 30/07/2015

Respostas:

3

CJam, 147 bytes, ligeiramente quebrado

qN/6/{z{:i:+165%91%' +}%"e 3 VG rr A>Q V) rP r4 />/ F> [> C >> 9$ j8 fQrQ rG rN rD VV $>$ ;$ 859 98 ff = BB"S/eeWf%$W%{~@@/\a*}/{`''#},'@f+'@/S*N}%

Ele passa CODE GOLF e AZ, mas não STAR WARS (como se lê SAR WARS). Eu desisto, mas talvez alguém seja inspirado.

Lynn
fonte
1
Se sua solução não funcionar, você provavelmente não deve publicá-la ...
Alex A.