ในวันที่ห้าของ 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"