Preparando a cena:
É uma tarde normal, enquanto você relaxa após um longo dia participando de seu passatempo favorito: respondendo à infinidade de perguntas cativantes no PPCG. Não foi um bom dia para você; esses malditos programadores Pyth continuam recebendo a melhor resposta e isso está matando sua vibe. De repente, você percebe que uma nova pergunta foi publicada! Você decide; não desta vez CJammers. Furiosamente, você começa a digitar, criando um fluxo de caracteres; um feto do glorioso loop BrainFuck que seu produto final será. Você digita e digita. Mais rápido! Mais rápido, ainda! Você está tão concentrado que nem percebe que as luzes na tela começam a piscar. De repente, o monitor brilha em verde, um símbolo alienígena marcado na área de trabalho. Usando suas habilidades impecáveis vocêcat ~/Desktop/aliensymbol
e receba um monte de números, uma mensagem! Sendo o programador astuto de PPCG que você é, você percebe que ele se parece com ASCII. Não importa para você, você print(chr(i) for i in file)
e decifra a mensagem. Seu primeiro pensamento: "Eu preciso compartilhar isso com a comunidade!".
...
Quem teria pensado isso? Que as primeiras pessoas a fazer contato com alienígenas seriam os humildes programadores do PPCG. Por que nós? Talvez seja porque somos o epítome da inteligência humana. Ou talvez porque o BrainFuck seja tão próximo quanto o de uma língua estrangeira. No entanto, os alienígenas - sendo as formas de vida ultra-inteligentes que são - querem testar se devem classificar a raça humana como inteligente ou não. Como teste de nossas proezas mentais, os alienígenas nos pediram para enviar-lhes alguns programas de computador para demonstrar que somos tecnologicamente cultivados. A questão é que a única linguagem humana que eles entendem é ASCII numérica!
Ajude a humanidade a mostrar às criaturas quem é o verdadeiro alfa intelectual. Precisamos enviar a eles um script que converta nossos códigos-fonte baseados em texto em suas versões numéricas ASCII. Infelizmente, devido à nossa tecnologia subdesenvolvida (obrigado Obama), devemos enviar o menor programa de tradução possível. Ainda bem que eles escolheram entrar em contato com a PPCG!
O desafio:
A premissa deste desafio é simples: você deve escrever um programa que utilize o código-fonte de qualquer programa (ou qualquer arquivo de texto geral) e produza uma versão separada por espaço com uma tradução ASCII abaixo de cada linha. Ou seja, dada a entrada de um arquivo de texto, você precisa gerar cada linha desse arquivo seguida por uma linha que contenha a representação ASCII de cada caractere na linha acima (com cada número alinhado com o caractere que representa).
Um exemplo vai esclarecer muito isso. Tomando o código fonte do infame hello world
como a entrada:
#include <stdio.h>
int main() {
printf("hello, world\n");
return 0;
}
seu programa deve gerar:
# i n c l u d e < s t d i o . h >
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 104 62 10
10
i n t m a i n ( ) {
105 110 116 32 109 97 105 110 40 41 32 123 10
p r i n t f ( " h e l l o , w o r l d \ n " ) ;
32 32 32 32 112 114 105 110 116 102 40 34 104 101 108 108 111 44 32 119 111 114 108 100 92 110 34 41 59 10
r e t u r n 0 ;
32 32 32 32 114 101 116 117 114 110 32 48 59 10
}
125 10
Detalhes da implementação:
Você pode optar por receber a entrada da forma que desejar (arquivo de abertura, canal de linha de comando, parâmetro de função etc.) e deve enviar para stdout ou retornar a saída de uma função.
Coisas a observar
- Cada caractere na saída é separado por um '\ t' para permitir o espaço de 3 dígitos na linha abaixo para alinhar (vamos assumir que sua guia está configurada para 4 espaços ou mais).
- As novas linhas são exibidas na linha em que a tecla de retorno foi pressionada (observe os 10's no exemplo)
- Os requisitos de impressão '\ t' e '\ n' são pouco flexíveis. Sua produção deve, no sentido geral, parecer agradável aos olhos (é preciso mostrar aos alienígenas que também temos senso estético) e, se você puder dobrar os dois pontos anteriores, mantendo a integridade visual, será perdoado.
- Você pode optar por assumir se há ou não uma nova linha no final da última linha.
Pontuação
Este é o código-golfe, e o programa mais curto vence. Observe que, mesmo que seu programa não seja o mais curto, mas use truques realmente legais em relação ao idioma que você está usando, muitos +1 para você!
Boa sorte. O ranking de inteligência intergaláctica da humanidade repousa sobre seus ombros.
Nota: perdoe os orifícios da plotagem. Eu não sou um escritor : D