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

Kemunculan Kod n Golang: Laporan Menghiris dan Memotong

Dec 20, 2024 am 08:31 AM

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
Salin selepas log masuk
Salin selepas log masuk
  • 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
}
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

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
}
Salin selepas log masuk
Salin selepas log masuk

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 Laman Web ini
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

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.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah? GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah? Mar 03, 2025 pm 05:17 PM

GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah?

Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego? Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego? Mar 03, 2025 pm 05:22 PM

Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego?

Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go? Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go? Mar 03, 2025 pm 05:18 PM

Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go?

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

Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO?

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

Bagaimana saya menulis objek dan stub untuk ujian di GO?

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

Bagaimana anda menulis ujian unit di GO?

Bagaimana cara menulis fail dalam bahasa Go dengan mudah? Bagaimana cara menulis fail dalam bahasa Go dengan mudah? Mar 03, 2025 pm 05:15 PM

Bagaimana cara menulis fail dalam bahasa Go dengan mudah?

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

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya?

See all articles