Inspirado por esta pregunta de electronics.SE , aquí hay un desafío para ti:
Escriba un programa o subrutina que tome una secuencia de dígitos decimales (0 a 9) y los hable en voz alta, sin usar una herramienta de síntesis de voz existente.
Entrada:
Puede solicitar que los dígitos de entrada se proporcionen en cualquier formato razonable, por ejemplo, como una cadena de dígitos ASCII, una matriz de enteros, un número codificado en BCD, etc. Si su solución es un programa ejecutable, puede tomar la entrada como un parámetro de línea de comando, léalo desde la entrada estándar u obténgalo de cualquier otra manera razonable.
Su programa debe poder hablar al menos ocho dígitos por invocación. Usted puede asumir que el primer dígito no es cero, a menos que sea el único dígito.
Salida:
Su programa puede decir los números directamente usando un dispositivo de audio o puede generar un archivo de sonido reproducible. El archivo de salida, si lo hay, puede estar en cualquier formato de audio estándar o puede consistir en datos de muestra sin procesar. Si emite datos de muestra sin procesar, tenga en cuenta los parámetros apropiados para la reproducción (frecuencia de muestreo, bits por muestra, endianness, con signo / sin signo, número de canales). Se prefieren los formatos admitidos por aplay .
Usted es libre de decidir los detalles sobre cómo se hablarán los números, pero su salida debe consistir en dígitos del idioma inglés hablados de manera comprensible para un hablante típico de inglés , y debe ser lo suficientemente claro para que el oyente pueda transcribir con precisión un número aleatorio hablado de ocho dígitos. No, solo pitar n veces no cuenta. No olvide incluir pausas entre los dígitos.
Puntuación:
Se aplican reglas estándar de puntuación de código de golf : su puntuación es la longitud de su código en bytes o, si su código está escrito en texto Unicode, en caracteres Unicode. La puntuación más baja gana. Cualquier idioma vale.
Como la pregunta original sobre electrónica.SE era sobre programación incrustada, sentí que sería apropiado lanzar un hueso a los autores que usan lenguajes de bajo nivel: si su solución está escrita en un lenguaje compilado, puede elegir contar la longitud del archivo ejecutable compilado en bytes como su puntaje. (Sí, el código de bytes precompilado, como un .class
archivo Java , también está bien.) Si elige hacer uso de esta opción, incluya una copia del ejecutable compilado en su respuesta (por ejemplo, como un volcado hexadecimal) junto con su código fuente y la versión del compilador y las opciones que usó para generarlo.
Se otorgará una mención de honor , junto con una recompensa de +50 repeticiones, a la primera respuesta que también cumpla con los criterios de la pregunta original , es decir, es capaz de ejecutarse en una MCU integrada con 4 kb de flash y 1 kb de SRAM.
Restricciones:
No puede hacer uso de ningún archivo o recurso de red que no forme parte del entorno de tiempo de ejecución estándar de su idioma elegido, a menos que cuente la longitud de dichos archivos o recursos como parte de su puntaje. (Esto es para no permitir, por ejemplo, cargar muestras de audio desde la web).
Tampoco puede usar ninguna herramienta de síntesis de voz o bibliotecas preexistentes o compilaciones de datos de audio (a menos que también cuente su tamaño como parte de su puntaje), incluso si están incluidos en el entorno de tiempo de ejecución estándar del idioma elegido.