Terapkan algoritma pencarian biner seperti yang digunakan untuk mengidentifikasi revisi kode sumber yang merusak program perangkat lunak komputer. Alat Anda harus mengambil dua argumen yang menentukan revisi paling awal dan nomor terbaru untuk pencarian (keduanya bilangan bulat positif), dan Anda memiliki dua opsi untuk membuat perbandingan:
Jalankan perintah shell
./test N
, di mana N adalah nomor revisi. Jika tes lolos ( mis . Revisinya bagus), maka akan keluar kode keluar 0.Panggil fungsi
test(N)
, yang akan kembalitrue
jika tes lulus,false
jika tidak.
Output standar harus berupa angka revisi buruk pertama, dan cobalah membuat kode sumber alat Anda sesingkat mungkin. Nikmati!
test(N)
opsi fungsi terutama untuk keadilan bagi bahasa pemrograman tersebut tanpa cara standar untuk menjalankan perintah shell, seperti JavaScript.Jawaban:
Ruby -
92 82 6260 karakterIteratif jauh lebih pendek, tetapi tidak sedingin ekor rekursif.
Metode rekursif ekor lama untuk referensi
Skrip pengujian
Menggunakan sedikit sihir untuk menyuntikkan
test
fungsi dan menjalankan file yang murni terdiri dari kode di atas.Keluaran:
sumber
Python, 64 karakter
Yang ini bersifat rekursif, sehingga akan meluap tumpukan untuk input yang sangat besar
uji coba
output
sumber
Python - 77 karakter
Menyalahgunakan modul python bisect. L adalah nilai rendah, H adalah nilai tinggi
di sini adalah uji coba
output
Penjelasan:
Berikut adalah bagaimana pembagian dua bagian. Pada dasarnya ia mengharapkan daftar dan memutuskan apakah membagi dua naik atau turun berdasarkan nilai yang ditemukannya dengan melihat
a[mid]
. Panggilan ini__getitem__
aktifa
, yang alih-alih menjadi daftar, adalah kelas yang telah saya tentukan sendiri.sumber
Python - 70 karakter
uji coba
output
sumber