Teka-teki
Sebuah teka-teki kecil yang saya dengar ketika saya masih di sekolah menengah terjadi seperti ini ...
- Penanya akan meminta saya untuk memberinya nomor;
- Saat mendengar nomor tersebut, penanya akan melakukan semacam transformasi berulang kali (misalnya, ia mungkin mengatakan sepuluh adalah tiga ) hingga akhirnya tiba di nomor 4 (di mana ia akan menyelesaikannya dengan empat adalah sihir ).
- Setiap nomor tampaknya dapat diubah menjadi empat pada akhirnya, tidak peduli apa.
Tujuannya adalah untuk mencoba mencari tahu fungsi transformasi dan kemudian dapat menjalankan sendiri teka-teki ini dengan andal.
Solusinya
Fungsi transformasi pada setiap langkah adalah untuk
- Catat nomor yang dimaksud,
- Hitung jumlah huruf dalam representasi kata bahasa Inggrisnya, abaikan tanda hubung atau spasi atau "dan" (misalnya, "sepuluh" memiliki 3 huruf di dalamnya, "tiga puluh empat" memiliki 10 huruf di dalamnya, "seratus empat puluh tiga" memiliki 20 huruf di dalamnya).
- Kembalikan jumlah huruf itu.
Untuk semua angka yang ingin saya uji, ini menyatu dengan 4. Karena "empat" juga memiliki empat huruf di dalamnya, akan ada putaran tak terbatas di sini; sebaliknya itu hanya disebut sebagai sihir dengan konvensi untuk mengakhiri urutan.
Tantangan
Tantangan Anda adalah membuat sepotong kode yang akan membaca nomor dari pengguna dan kemudian mencetak baris yang menunjukkan fungsi transformasi yang diterapkan berulang kali hingga "empat ajaib" tercapai.
Secara khusus:
- Solusi harus menjadi program yang lengkap di dalam dan dari dirinya sendiri. Mereka tidak bisa hanya menjadi fungsi yang mengambil faktor angka dalam input.
- Input harus dibaca dari input standar. (Menyalurkan dari "echo" atau menggunakan pengalihan input baik-baik saja karena itu juga berlaku dari stdin)
- Masukan harus dalam bentuk numerik.
- Untuk setiap penerapan fungsi transformasi, sebuah garis harus dicetak:, di
a is b.
mana a dan b adalah bentuk numerik dari angka-angka dalam transformasi. - Berhenti penuh (titik) DIPERLUKAN!
- Baris terakhir seharusnya secara alami mengatakan
4 is magic.
,. - Kode tersebut harus menghasilkan keluaran yang benar untuk semua angka dari 0 hingga 99 .
Contoh:
> 4
4 is magic.
> 12
12 is 6.
6 is 3.
3 is 5.
5 is 4.
4 is magic.
> 42
42 is 8.
8 is 5.
5 is 4.
4 is magic.
> 0
0 is 4.
4 is magic.
> 99
99 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.
Pemenangnya adalah pengiriman terpendek berdasarkan jumlah karakter kode sumber yang juga benar .
BONUS
Anda juga dapat mencoba menulis versi kode yang mencetak NAMA BAHASA INGGRIS untuk angka-angka dengan setiap aplikasi fungsi transformasi. Masukan asli masih berupa angka, tetapi baris keluaran harus memiliki bentuk kata dari angka tersebut.
(Bonus ganda untuk menggambar bentuk dengan kode Anda)
(EDIT) Beberapa klarifikasi:
- Saya ingin kata tersebut muncul di kedua sisi dalam semua kasus yang berlaku, mis
Nine is four. Four is magic.
- Saya tidak peduli dengan kapitalisasi. Dan saya tidak peduli bagaimana Anda memisahkan kata token, meskipun mereka harus dipisahkan:
ninety-nine
oke,ninety nine
oke,ninetynine
tidak oke.
Saya mempertimbangkan ini sebagai kategori terpisah untuk kompetisi bonus sehubungan dengan tantangannya, jadi jika Anda melakukan ini, jangan khawatir kode Anda lebih panjang dari versi numerik.
Jangan ragu untuk mengirimkan satu solusi untuk setiap versi.