Pada hari kelima Advent Of Code, kita ditugaskan untuk melakukan simulasi crane yang menata ulang peti. Saya sarankan Anda mencoba menyelesaikan masalahnya sendiri: https://adventofcode.com

Memasukkan

Kompleksitas utama dari masalah saat ini sebenarnya terletak pada penguraian masukan, jadi untuk pertama kalinya, mari kita lihat kode penguraiannya. Untuk pemrosesan sederhana, akan lebih mudah jika status direpresentasikan sebagai std::vector<std::vector<char>>.

Masukannya tidak teratur dan tidak teratur dengan spasi yang signifikan. Cara paling sederhana untuk mengurai input seperti itu di C++ adalah dengan mengurai per baris terlebih dahulu, lalu menafsirkan setiap baris.

Berbeda dengan keadaan awal, pesanannya teratur, sehingga kami dapat memperkenalkan tipe khusus dan membebani operator ekstraksi aliran.

Bagian 1: CrateMover 9000

Untuk bagian pertama, kami sekarang dapat memproses setiap pesanan, mengubah status seiring berjalannya waktu.

Kita bisa memindahkan peti satu per satu; namun, kita juga bisa memindahkan semua peti dengan satu std::ranges::copy, yang bisa dibilang lebih sederhana. Apa pun pilihannya, kita harus ingat untuk membuang peti tersebut dari sumbernya.

Bagian 2: CrateMover 9001

Untuk bagian kedua, kita dapat menggunakan kembali kode yang sama, dengan peringatan sekarang kita menyalin peti secara berurutan.

Tautan

Repositori dengan solusi lengkap (termasuk parsing input) tersedia di sini: https://github.com/HappyCerberus/moderncpp-aoc-2022.

Saya memposting konten C++ Modern setiap hari di Twitter, LinkedIn, Mastodon, Medium dan Substack.