ในวันที่ห้าของ Advent Of Code เราได้รับมอบหมายให้จำลองเครนจัดเรียงลังใหม่ ฉันขอแนะนำให้คุณลองแก้ไขปัญหาด้วยตัวเอง: https://adventofcode.com

ป้อนข้อมูล

ความซับซ้อนหลักของปัญหาในปัจจุบันคือการแยกวิเคราะห์อินพุต ดังนั้นเป็นครั้งแรกที่เรามาดูโค้ดการแยกวิเคราะห์กัน สำหรับการประมวลผลแบบง่าย การให้สถานะแสดงเป็น std::vector<std::vector<char>> จะสะดวกกว่า

ข้อมูลเข้าไม่สม่ำเสมออย่างไม่สะดวกโดยมีช่องว่างที่สำคัญ วิธีที่ง่ายที่สุดในการแยกวิเคราะห์อินพุตดังกล่าวในภาษา C++ คือแยกวิเคราะห์บรรทัดแรกแล้วจึงตีความแต่ละบรรทัด

ต่างจากสถานะเริ่มต้น คำสั่งซื้อเป็นแบบปกติ ดังนั้นเราจึงแนะนำประเภทที่กำหนดเองและทำให้โอเปอเรเตอร์การแยกสตรีมโอเวอร์โหลดได้

ส่วนที่ 1: CrateMover 9000

สำหรับส่วนที่หนึ่ง ตอนนี้เราสามารถประมวลผลแต่ละคำสั่งซื้อได้ โดยแก้ไขสถานะตามที่เราไป

เราสามารถย้ายลังได้ทีละลัง อย่างไรก็ตาม เรายังสามารถย้ายลังทั้งหมดได้ด้วย std::ranges::copy อันเดียว ซึ่งอาจจะง่ายกว่าเล็กน้อย ไม่ว่าจะด้วยวิธีใด เราต้องจำไว้ว่าต้องเอาลังออกจากแหล่งที่มา

ส่วนที่ 2: CrateMover 9001

สำหรับส่วนที่ 2 เราสามารถใช้โค้ดเดิมซ้ำได้ โดยมีข้อแม้ที่ตอนนี้เราจะคัดลอกลังตามลำดับ

ลิงค์

พื้นที่เก็บข้อมูลพร้อมโซลูชันที่สมบูรณ์ (รวมถึงการแยกวิเคราะห์อินพุต) มีอยู่ที่นี่: https://github.com/HappyCerberus/moderncpp-aoc-2022

ฉันโพสต์เนื้อหา Modern C++ รายวันบน "Twitter", "LinkedIn", "Mastodon", "Medium" และ "Substack"