Rumah >pembangunan bahagian belakang >Golang >Kemunculan Kod n Golang: Laporan Menghiris dan Memotong

Kemunculan Kod n Golang: Laporan Menghiris dan Memotong

Patricia Arquette
Patricia Arquetteasal
2024-12-20 08:31:13152semak imbas

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