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 anda menggunakan & quot; Strings & quot; Pakej untuk memanipulasi rentetan dalam perjalanan?Bagaimana anda menggunakan & quot; Strings & quot; Pakej untuk memanipulasi rentetan dalam perjalanan?Apr 30, 2025 pm 02:34 PM

Artikel ini membincangkan menggunakan pakej "Strings" Go untuk manipulasi rentetan, memperincikan fungsi umum dan amalan terbaik untuk meningkatkan kecekapan dan mengendalikan Unicode dengan berkesan.

Bagaimana anda menggunakan & quot; crypto & quot; Pakej untuk melakukan operasi kriptografi di GO?Bagaimana anda menggunakan & quot; crypto & quot; Pakej untuk melakukan operasi kriptografi di GO?Apr 30, 2025 pm 02:33 PM

Butiran artikel menggunakan pakej "crypto" Go untuk operasi kriptografi, membincangkan generasi utama, pengurusan, dan amalan terbaik untuk pelaksanaan yang selamat.

Bagaimana anda menggunakan & quot; masa & quot; pakej untuk mengendalikan tarikh dan masa dalam perjalanan?Bagaimana anda menggunakan & quot; masa & quot; pakej untuk mengendalikan tarikh dan masa dalam perjalanan?Apr 30, 2025 pm 02:32 PM

Artikel ini memperincikan penggunaan pakej "masa" Go untuk pengendalian tarikh, masa, dan zon masa, termasuk mendapatkan masa semasa, mewujudkan masa tertentu, rentetan parsing, dan mengukur masa berlalu.

Bagaimana anda menggunakan & quot; mencerminkan & quot; pakej untuk memeriksa jenis dan nilai pembolehubah dalam GO?Bagaimana anda menggunakan & quot; mencerminkan & quot; pakej untuk memeriksa jenis dan nilai pembolehubah dalam GO?Apr 30, 2025 pm 02:29 PM

Artikel membincangkan menggunakan pakej "mencerminkan" Go untuk pemeriksaan dan pengubahsuaian yang berubah -ubah, menonjolkan kaedah dan pertimbangan prestasi.

Bagaimana anda menggunakan & quot; sync/atomic & quot; Pakej untuk melakukan operasi atom di GO?Bagaimana anda menggunakan & quot; sync/atomic & quot; Pakej untuk melakukan operasi atom di GO?Apr 30, 2025 pm 02:26 PM

Artikel ini membincangkan menggunakan pakej "Sync/Atomic" Go untuk operasi atom dalam pengaturcaraan serentak, memperincikan manfaatnya seperti menghalang keadaan kaum dan meningkatkan prestasi.

Apakah sintaks untuk membuat dan menggunakan penukaran jenis di GO?Apakah sintaks untuk membuat dan menggunakan penukaran jenis di GO?Apr 30, 2025 pm 02:25 PM

Artikel ini membincangkan penukaran jenis di GO, termasuk sintaks, amalan penukaran yang selamat, perangkap biasa, dan sumber pembelajaran. Ia menekankan penukaran dan pengendalian ralat jenis eksplisit. [159 aksara]

Apakah sintaks untuk membuat dan menggunakan penegasan jenis dalam GO?Apakah sintaks untuk membuat dan menggunakan penegasan jenis dalam GO?Apr 30, 2025 pm 02:24 PM

Artikel ini membincangkan penegasan jenis dalam GO, memberi tumpuan kepada sintaks, kesilapan yang berpotensi seperti panik dan jenis yang salah, kaedah pengendalian yang selamat, dan implikasi prestasi.

Bagaimana anda menggunakan & quot; pilih & quot; penyata dalam Go?Bagaimana anda menggunakan & quot; pilih & quot; penyata dalam Go?Apr 30, 2025 pm 02:23 PM

Artikel ini menerangkan penggunaan pernyataan "pilih" dalam GO untuk mengendalikan pelbagai operasi saluran, perbezaannya dari pernyataan "suis", dan kes penggunaan biasa seperti mengendalikan pelbagai saluran, melaksanakan waktu tamat, bukan B

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

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),

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.