Terinspirasi oleh pertanyaan ini dari electronics.SE , inilah tantangan untuk Anda:
Tulis program atau subrutin yang menggunakan urutan angka desimal (0 hingga 9) dan ucapkan dengan keras, tanpa menggunakan alat sintesis bicara yang ada.
Memasukkan:
Anda dapat meminta digit input disediakan dalam format apa pun yang masuk akal, misalnya sebagai string digit ASCII, array bilangan bulat, angka berkode BCD, dll. Jika solusi Anda adalah program yang dapat dieksekusi, Anda dapat mengambil input tersebut sebagai parameter baris perintah, membacanya dari input standar, atau mendapatkannya dengan cara lain yang masuk akal.
Program Anda harus dapat berbicara setidaknya delapan digit per doa. Anda dapat mengasumsikan bahwa digit pertama bukan nol, kecuali itu satu-satunya digit.
Keluaran:
Program Anda dapat berbicara angka-angka secara langsung menggunakan perangkat audio, atau dapat menghasilkan file suara yang dapat diputar. File output, jika ada, mungkin dalam format audio standar apa pun, atau mungkin terdiri dari data sampel mentah. Jika Anda menampilkan data sampel mentah, harap perhatikan parameter yang sesuai untuk pemutaran (laju sampel, bit per sampel, endianness, bertanda / tidak ditandai, # saluran). Format yang didukung oleh aplay lebih disukai.
Anda bebas untuk memutuskan rincian tentang bagaimana angka-angka akan diucapkan, tetapi output Anda harus terdiri dari angka bahasa Inggris yang diucapkan dengan cara yang dapat dimengerti oleh penutur bahasa Inggris yang khas , dan itu harus cukup jelas bagi pendengar untuk dapat secara akurat menyalin nomor acak delapan digit yang diucapkan. Tidak, hanya berbunyi n kali dan tidak masuk hitungan. Jangan lupa untuk memasukkan jeda di antara digit.
Mencetak:
Aturan penilaian kode-golf standar berlaku: Skor Anda adalah panjang kode Anda dalam byte atau, jika kode Anda ditulis dalam teks Unicode, dalam karakter Unicode. Skor terendah menang. Bahasa apa saja.
Karena pertanyaan awal tentang elektronik. SE adalah tentang pemrograman tertanam, saya merasa akan lebih tepat untuk melemparkan tulang ke penulis menggunakan bahasa tingkat rendah: jika solusi Anda ditulis dalam bahasa yang dikompilasi, Anda dapat memilih untuk menghitung panjang mengkompilasi file yang dapat dieksekusi dalam byte sebagai skor Anda. (Ya, bytecode yang dikompilasi, seperti .class
file Java , juga OK.) Jika Anda memilih untuk menggunakan opsi ini, harap sertakan salinan dari executable yang dikompilasi dalam jawaban Anda (misalnya sebagai dump hex) bersama dengan kode sumber Anda dan versi kompiler dan opsi yang Anda gunakan untuk menghasilkannya.
Sebuah menyebutkan terhormat , bersama dengan karunia 50 rep, akan diberikan kepada jawaban pertama yang juga memenuhi kriteria dari pertanyaan awal , yaitu mampu berjalan pada MCU tertanam dengan 4 kb flash dan 1 kb dari SRAM.
Pembatasan:
Anda tidak boleh menggunakan file atau sumber daya jaringan apa pun yang bukan bagian dari lingkungan runtime standar bahasa yang Anda pilih, kecuali jika Anda menghitung panjang file atau sumber daya yang disebutkan sebagai bagian dari skor Anda. (Ini untuk melarang mis. Memuat sampel audio dari web.)
Anda juga tidak boleh menggunakan alat sintesis pidato atau pustaka atau kompilasi data audio yang sudah ada sebelumnya (kecuali Anda juga menghitung ukurannya sebagai bagian dari skor Anda), bahkan jika mereka termasuk dalam lingkungan runtime standar bahasa yang Anda pilih.
Jawaban:
ruby - 3710 = 90 karakter kode + 3620 byte data
input: argumen baris perintah tunggal, nomor yang harus dibaca
output: data suara mentah, PCM 8bit / 8kHz
Ini dapat membaca string input apa saja, selama
5e3
mengkodekan jeda antara dua kata. Di sini, 5 contoh ~ = 0,6s. Tweak sesuai keinginan.Sekarang, bagian yang sulit adalah untuk mendapatkan file sampel dalam 4K dan belum dapat mendekompresnya dengan mudah dan dalam kualitas yang cukup. Inilah cara saya mendapatkannya:
Sekarang, kita harus memilih tingkat sampel dan jumlah penipisan. Terlalu banyak, dan suaranya tidak akan bisa dimengerti. Terlalu sedikit, dan Anda tidak cocok. Saya telah membayar 8kHz / 3b. Itu mereka: https://github.com/honnza/drops/raw/master/digits.zip
Berikut skrip penipisan:
Adapun tantangan aslinya: ada 476 byte ruang untuk kode dan tabel file. Ini mungkin sedikit terlalu tergantung pada seberapa kecil kita bisa dapatkan dengan perpustakaan DEFLATE. Jika perlu, kita dapat memotong beberapa sudut di sana-sini dengan memotong sampel audio sedikit lebih agresif.
[fo:r]
atau[o:]
tidak terlalu penting tetapi menghemat byte. Saya agak baik hati ketika memotong angka. Juga, skema penipisan yang berbeda atau mengorbankan penipisan untuk downsampling mungkin membantu - saya akan mempermainkannya nanti. Juga, menjatuhkan header DEFLATE mungkin menghemat sedikit ruang.Menggabungkan sampel suara cukup mudah, tetapi 4K sedikit sempit. Jika Anda tidak terikat oleh ruang 4k, saya sarankan mengurangi penipisan. 4 bit per sampel sebenarnya tarifnya cukup baik dan hanya sedikit lebih besar.
sumber