Inspirado por esta pergunta da electronics.SE , aqui está um desafio para você:
Escreva um programa ou sub-rotina que pegue uma sequência de dígitos decimais (0 a 9) e fale-os em voz alta, sem usar uma ferramenta de síntese de fala existente.
Entrada:
Você pode solicitar que os dígitos da entrada sejam fornecidos em qualquer formato razoável, por exemplo, como uma sequência de dígitos ASCII, uma matriz de números inteiros, um número codificado em BCD, etc. Se a sua solução for um programa executável, você poderá considerar a entrada como um parâmetro da linha de comandos, leia-o da entrada padrão ou obtenha-o de qualquer outra maneira razoável.
Seu programa deve ser capaz de falar pelo menos oito dígitos por chamada. Você pode assumir que o primeiro dígito não é zero, a menos que seja o único dígito.
Resultado:
Seu programa pode falar os números diretamente usando um dispositivo de áudio ou pode gerar um arquivo de som reproduzível. O arquivo de saída, se houver, pode estar em qualquer formato de áudio padrão ou pode consistir em dados de amostra brutos. Se você fornecer dados de amostra brutos, observe os parâmetros apropriados para a reprodução (taxa de amostragem, bits por amostra, endianness, assinado / não assinado, número de canais). Formatos suportados pelo aplay são preferidos.
Você é livre para decidir os detalhes de como os números serão falados, mas sua saída deve consistir em dígitos do idioma inglês falados de maneira compreensível para um falante típico de inglês e deve ser suficientemente claro para que o ouvinte possa transcrever com precisão um número aleatório falado de oito dígitos. Não, apenas apitar n vezes não conta. Não se esqueça de incluir pausas entre os dígitos.
Pontuação:
Aplicam-se as regras padrão de pontuação de código-golfe : Sua pontuação é o tamanho do seu código em bytes ou, se o seu código estiver escrito em texto Unicode, em caracteres Unicode. Menor pontuação ganha. Qualquer idioma vai.
Como a pergunta original sobre a eletrônica. E se tratava de programação incorporada, achei que seria apropriado lançar um osso para os autores usando linguagens de baixo nível: se a sua solução estiver escrita em uma linguagem compilada, você poderá contar a duração da arquivo executável compilado em bytes como sua pontuação. (Sim, .class
o código de código pré-compilado, como um arquivo Java , também é bom.) Se você optar por fazer uso dessa opção, inclua uma cópia do executável compilado em sua resposta (por exemplo, como um hex dump) junto com seu código-fonte e a versão do compilador e as opções usadas para gerá-lo.
Uma menção honrosa , juntamente com uma recompensa de +50 representantes, será concedida à primeira resposta que também atenda aos critérios da pergunta original , ou seja, é capaz de rodar em um MCU incorporado com 4 kb de flash e 1 kb de SRAM.
Restrições:
Você não pode usar arquivos ou recursos de rede que não façam parte do ambiente de tempo de execução padrão do idioma escolhido, a menos que conte a duração desses arquivos ou recursos como parte de sua pontuação. (Isso é para não permitir, por exemplo, carregar amostras de áudio da Web.)
Você também não pode usar nenhuma ferramenta de síntese de fala, biblioteca ou compilação de dados de áudio preexistentes (a menos que você também conte o tamanho como parte da sua pontuação), mesmo que elas estejam incluídas no ambiente de tempo de execução padrão do idioma escolhido.