cari
Rumahpembangunan bahagian belakangGolangKemunculan Kod n Golang: Laporan Menghiris dan Memotong

pengenalan

Jadi, ini adalah hari ke-2 Kedatangan Kod 2024 di Golang, dan kami akan meneroka pendekatan dan penyelesaian saya untuk perkara yang sama. Masalahnya tidak semudah tetapi agak mudah selepas dilaksanakan dan didapati betul.

Anda boleh menyemak penyelesaian saya di sini di GitHub.

Advent of Code n Golang: Slicing and Dicing Reports Encik-Destructive / kedatangan_kod

Kemunculan Kod

Bahagian 1

Kami telah diberikan beberapa baris yang dipanggil laporan, dan setiap laporan mempunyai sekumpulan peringkat. dan keperluan laporan ialah ia perlu sama ada meningkat atau menurun dengan faktor sekurang-kurangnya 1 atau paling banyak 3.

Ini bermakna jika dua elemen pertama meningkat walaupun satu, elemen berikutnya yang lain dalam laporan itu harus meningkat (sebanyak 1, 2, atau 3) tahap dan tidak boleh ada sebarang perubahan (iaitu 0 perubahan dalam dua bersebelahan nombor, atau dua nombor bersebelahan tidak boleh sama)

7 6 4 2 1
1 2 7 8 9
9 7 6 2 1
1 3 2 4 5
8 6 4 4 1
1 3 6 7 9
  • Kami mula-mula melakukan penghuraian input, ia agak mudah, kami perlu membahagikannya dengan n untuk mendapatkan laporan individu, ini akan menjadi rentetan jadi ”7 6 4 2 1" , kami ingin mendapatkan kepingan daripada integer.

  • Jadi kita teruskan dan bahagikan dengan ruang/ruang putih ” “ untuk mendapatkan tahap individu (nombor) dan kita perlu menukarnya kepada integer.

  • Setelah kami mempunyai rentetan individu laporan iaitu tahap sebagai [“7”, “6”, “4”, “2”, “1”] , kita perlu menghantarnya kepada integer.

  • Kami mengulangi setiap satu daripadanya dan menghantarnya kepada integer dan menambah pada senarai.

  • Setelah kami membina senarai itu, kami menambah pada senarai laporan yang akan menjadi tatasusunan tatasusunan, iaitu setiap baris ialah laporan dan setiap laporan mempunyai banyak peringkat sehingga hirisan integer.

func SplitLevels(lines []string) [][]int {
    reportLevels := [][]int{}
    for i, reportLine := range lines {
        reportLevels = append(reportLevels, []int{})
        for _, levelStr := range strings.Split(reportLine, " ") {
            level, err := strconv.Atoi(levelStr)
            if err != nil {
                log.Fatal(err)
            }
            reportLevels[i] = append(reportLevels[i], level)
        }
    }
    return reportLevels
}

Setelah kami membina laporan dan tahap, kami bergerak ke hadapan dalam benar-benar menganalisis corak dalam tahap dalam laporan individu.

Untuk itu:

  • Kami mula-mula mengambil laporan individu, mengira perbezaan antara dua elemen pertama dan ingat untuk menggunakan perbezaan mutlak dengan berhati-hati di sini.

  • Kita perlu mengekalkan bendera yang menunjukkan sama ada tahap dalam laporan meningkat atau menurun, yang boleh ditentukan dengan dua elemen pertama.

    Iaitu jika dua elemen pertama meningkat, tahap berikutnya juga harus meningkat dan jika ia menurun maka semua tahap harus menurun juga

  • Kami terlebih dahulu mempunyai pemeriksaan pengawal, jika perbezaan antara mereka adalah 0 atau lebih besar daripada 3 atau kurang daripada -3 iaitu syarat tahap untuk selamat. Jika demikian keadaannya maka kami membalas palsu iaitu laporan itu tidak selamat.

  • Kami kini mengulangi laporan selepas dua elemen pertama, kami kemudian mengira perbezaan antara dua tahap seterusnya, jika bendera meningkat adalah benar dan perbezaan semasa adalah kurang daripada atau sama dengan 0 atau ia melebihi 3 kami juga menandakannya sebagai palsu

  • Syarat lain ialah jika bendera semakin berkurangan, yang bermaksud dua elemen pertama mempunyai perbezaan negatif, jadi kami menyemak sama ada perbezaan semasa lebih besar daripada atau sama dengan 0 atau kurang daripada - 3, jika itu berlaku, kami menandakannya sebagai palsu

  • Selepas mengira perbezaan untuk semua peringkat, jika kami keluar dari gelung, kami kembali benar kerana kami tidak melihat sebarang percanggahan dalam peringkat.

7 6 4 2 1
1 2 7 8 9
9 7 6 2 1
1 3 2 4 5
8 6 4 4 1
1 3 6 7 9

Bahagian 2

Untuk bahagian kedua, kita perlu melakukan beberapa perkara, kita perlu mengira sama ada laporan itu selamat atau tidak, dan jika itu tidak selamat, kita hampir boleh mengalih keluar satu elemen daripada laporan untuk menjadikannya selamat.

Untuk itu pendekatannya ialah:

  • Dapatkan indeks di mana kita mula-mula melihat percanggahan dalam tahap

  • Semak dengan mengalih keluar elemen itu daripada laporan, jika itu menjadikan laporan selamat, maka kembalikan benar iaitu kami menemui laporan selamat

  • Jika kami masih mendapati laporan itu tidak selamat, alih keluar elemen sebelum indeks di mana percanggahan ditemui, jika kini kami mendapati ia selamat selepas mengalih keluar elemen itu, maka tandai ia selamat

  • Jika kami masih mendapati laporan itu tidak selamat, kemudian alih keluar elemen selepas indeks di mana kami mula-mula menemui percanggahan, jika laporan menjadi selamat, kami menandakan laporan itu selamat

  • Jika tidak, kami menandai laporan itu sebagai tidak selamat, kerana kami tidak dapat menemui hanya elemen boleh tanggal yang menjadikan laporan itu selamat.

func SplitLevels(lines []string) [][]int {
    reportLevels := [][]int{}
    for i, reportLine := range lines {
        reportLevels = append(reportLevels, []int{})
        for _, levelStr := range strings.Split(reportLine, " ") {
            level, err := strconv.Atoi(levelStr)
            if err != nil {
                log.Fatal(err)
            }
            reportLevels[i] = append(reportLevels[i], level)
        }
    }
    return reportLevels
}

Anda boleh menyemak penyelesaian saya di sini di GitHub.

Advent of Code n Golang: Slicing and Dicing Reports Encik-Destructive / kedatangan_kod

Kemunculan Kod

Kesimpulan

Jadi itu sahaja, masalah yang agak mudah untuk hari ke-2 kemunculan kod 2024 di Golang. Saya harap anda menikmati panduan teka-teki hari pertama ini dalam Kedatangan Kod 2024 di Golang.

Beri tahu saya jika anda mempunyai sebarang penyelesaian menarik yang lain, atau jika anda mempunyai apa-apa untuk dikongsi tentang perkara ini, sebarang maklum balas, soalan atau cadangan adalah dialu-alukan.

Terima kasih kerana membaca, dan saya akan jumpa anda esok untuk hari ke-3

Selamat Mengekod :)

Atas ialah kandungan terperinci Kemunculan Kod n Golang: Laporan Menghiris dan Memotong. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimana saya menulis objek dan stub untuk ujian di GO?Bagaimana saya menulis objek dan stub untuk ujian di GO?Mar 10, 2025 pm 05:38 PM

Artikel ini menunjukkan penciptaan dan stub di GO untuk ujian unit. Ia menekankan penggunaan antara muka, menyediakan contoh pelaksanaan mengejek, dan membincangkan amalan terbaik seperti menjaga mocks fokus dan menggunakan perpustakaan penegasan. Articl

Bagaimana anda menulis ujian unit di GO?Bagaimana anda menulis ujian unit di GO?Mar 21, 2025 pm 06:34 PM

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO?Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO?Mar 10, 2025 pm 03:20 PM

Artikel ini meneroka kekangan jenis adat Go untuk generik. Ia memperincikan bagaimana antara muka menentukan keperluan jenis minimum untuk fungsi generik, meningkatkan keselamatan jenis dan kebolehgunaan semula kod. Artikel ini juga membincangkan batasan dan amalan terbaik

Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO?Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO?Mar 21, 2025 pm 06:37 PM

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya?Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya?Mar 10, 2025 pm 05:36 PM

Artikel ini meneroka menggunakan alat pengesanan untuk menganalisis aliran pelaksanaan aplikasi GO. Ia membincangkan teknik instrumentasi manual dan automatik, membandingkan alat seperti Jaeger, Zipkin, dan OpenTelemetry, dan menonjolkan visualisasi data yang berkesan

Terangkan tujuan Pakej Refleksi Go. Bilakah anda akan menggunakan refleksi? Apakah implikasi prestasi?Terangkan tujuan Pakej Refleksi Go. Bilakah anda akan menggunakan refleksi? Apakah implikasi prestasi?Mar 25, 2025 am 11:17 AM

Artikel ini membincangkan pakej GO's Reflect, yang digunakan untuk manipulasi kod runtime, bermanfaat untuk siri, pengaturcaraan generik, dan banyak lagi. Ia memberi amaran tentang kos prestasi seperti pelaksanaan yang lebih perlahan dan penggunaan memori yang lebih tinggi, menasihati penggunaan yang bijak dan terbaik

Bagaimana anda menentukan kebergantungan dalam fail go.mod anda?Bagaimana anda menentukan kebergantungan dalam fail go.mod anda?Mar 27, 2025 pm 07:14 PM

Artikel ini membincangkan menguruskan kebergantungan modul Go melalui Go.Mod, meliputi spesifikasi, kemas kini, dan resolusi konflik. Ia menekankan amalan terbaik seperti versi semantik dan kemas kini biasa.

Bagaimana anda menggunakan ujian yang didorong oleh jadual di GO?Bagaimana anda menggunakan ujian yang didorong oleh jadual di GO?Mar 21, 2025 pm 06:35 PM

Artikel ini membincangkan menggunakan ujian yang didorong oleh jadual di GO, satu kaedah yang menggunakan jadual kes ujian untuk menguji fungsi dengan pelbagai input dan hasil. Ia menyoroti faedah seperti kebolehbacaan yang lebih baik, penurunan duplikasi, skalabiliti, konsistensi, dan a

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!