Untuk menyelesaikan sahaja:
Dari segi prestasi, ini bermakna:
Untuk kriteria 1:
Untuk menyelesaikan secara optimum:
Saya rasa ini akan berjaya. Hanya satu cara untuk mengetahuinya.
Ini kod saya untuk mengenal pasti kriteria 2 (perbezaan 1, 2, atau 3):
let differFlag = true; let i = 1; while (differFlag && i < list.length) { let amount = Math.abs(list[i] - list[i - 1]); if (![1, 2, 3].includes(amount)) { differFlag = false; } i++; }
Ini kod saya untuk mengenal pasti kriteria 1 (semua perbezaan bertambah atau berkurang):
let differFlag = true; let i = 1; let differences = []; while (differFlag && i < list.length) { let amount = list[i] - list[i - 1]; differences.push(amount); if (![1, 2, 3].includes(Math.abs(amount))) { differFlag = false; } i++; }
Berikut ialah syarat akhir yang menangkap laporan selamat:
if ( differFlag && (differences.every((el) => el > 0) || differences.every((el) => el < 0)) ) { safeCount++; }
Secara keseluruhannya, algoritma saya menjana jawapan yang betul untuk input contoh.
Adakah ia akan melakukan perkara yang sama untuk input teka-teki saya??
Yessssirrrreeee!!
Sweet!
Ini sudah tentu merumitkan sedikit perkara.
Saya ingin mengelakkan algoritma yang menyemak setiap pilih atur yang mungkin bagi laporan. Itu memerlukan penjanaan berjuta-juta laporan.
Berita baik pertama ialah:
Untuk input teka-teki saya, kira-kira 200 yang tidak memerlukan saya menyemak pilih atur.
Namun, 800/1000 masih merupakan banyak senarai untuk meneroka pilih atur sepenuhnya.
Sejujurnya saya tidak nampak cara untuk mengelak daripada menjalankan algoritma saya pada setiap pilih atur laporan tidak selamat.
Mengecewakan.
Masa untuk menambah gelung untuk berulang melalui setiap nombor dalam laporan tidak selamat - nombor untuk dialih keluar dan kemudian menyemak senarai bermutasi untuk gred lulus.
Saya akhirnya menduplikasi gelung while saya dengan baris tambahan untuk menduplikasi dan mengalih keluar satu nombor daripada setiap laporan ujian berikutnya.
Ia lebih banyak kod.
Tetapi, ia berkesan! Saya menjana jawapan yang betul untuk input teka-teki!
Soalannya ialah:
Jom jalankan dan lihat...
Hmmm, ia berjalan, tetapi saya mendapat jawapan bahawa ia hanya lebih besar sedikit daripada jawapan Bahagian 1 saya. Nampaknya salah.
Tak rugi nak submit kan????
Ia adalah betul!
Asap suci!
Sungguh luar biasa!
Dan sangat menyeronokkan untuk diselesaikan!
Empat bintang emas akan memasuki Hari 3.
Bawakan lebih banyak teka-teki yang menarik!
Atas ialah kandungan terperinci Laporan Hidung Merah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!