Saya memiliki ide ini berkeliaran di kepala saya, untuk menghasilkan dan mengevaluasi ekspresi matematika acak. Jadi, saya memutuskan untuk mencobanya dan menguraikan algoritma, sebelum mengkodekannya untuk mengujinya.
Contoh:
Berikut adalah beberapa contoh ekspresi yang ingin saya hasilkan secara acak:
4 + 2 [easy]
3 * 6 - 7 + 2 [medium]
6 * 2 + (5 - 3) * 3 - 8 [hard]
(3 + 4) + 7 * 2 - 1 - 9 [hard]
5 - 2 + 4 * (8 - (5 + 1)) + 9 [harder]
(8 - 1 + 3) * 6 - ((3 + 7) * 2) [harder]
Yang mudah dan sedang cukup mudah. Acak int
dipisahkan oleh operator acak, tidak ada yang gila di sini. Tapi aku mengalami beberapa masalah memulai dengan sesuatu yang bisa membuat salah satu keras dan lebih keras contoh. Saya bahkan tidak yakin algoritma tunggal dapat memberi saya dua yang terakhir.
Apa yang saya pertimbangkan:
Saya tidak bisa mengatakan saya mencoba ide-ide itu, karena saya tidak benar-benar ingin membuang banyak waktu untuk pergi ke arah yang tidak memiliki kesempatan untuk bekerja di tempat pertama. Tapi tetap saja, saya memikirkan beberapa solusi:
- Menggunakan pohon
- Menggunakan ekspresi reguler
- Menggunakan loop "for-type" yang gila (pasti yang terburuk)
Apa yang saya cari:
Saya ingin tahu ke arah mana Anda percaya yang terbaik, antara solusi yang saya pertimbangkan, dan ide-ide Anda sendiri.
Jika Anda melihat cara yang baik untuk memulai, saya akan menghargai petunjuk di arah yang benar, misalnya dengan awal algoritma, atau struktur umum dari itu.
Perhatikan juga bahwa saya harus mengevaluasi ekspresi itu. Ini dapat dilakukan baik setelah ekspresi dihasilkan, atau selama pembuatannya. Jika Anda mempertimbangkannya dalam jawaban Anda, itu bagus.
Saya tidak mencari apa pun yang berhubungan dengan bahasa, tetapi sebagai catatan, saya berpikir untuk mengimplementasikannya di Objective-C, karena itulah bahasa yang paling saya gunakan saat ini.
Contoh-contoh itu tidak termasuk :
operator, karena saya hanya ingin memanipulasi int
, dan operator ini menambahkan banyak verifikasi. Jika jawaban Anda memberikan solusi menangani yang ini, itu bagus.
Jika pertanyaan saya membutuhkan klarifikasi, silakan tanyakan di komentar. Terima kasih atas bantuan Anda.