Files

42 lines
1.6 KiB
Typst

#import "연구실실습일지작성양식.typ": 실습일지
#실습일지(
소속대학: "공과대학",
소속학과: "컴퓨터소프트웨어학부",
학번: "2024062806",
성명: "주하진",
일시: "2026년 9월 18일 13시 부터 ~ 16시 까지",
내용: [
오늘은 *단 한 번의 2048 시도* 문제를 풀었습니다.
이 문제는 그냥 2048 게임의 슬라이드 동작을 구현하는 문제입니다. 다만, 그냥 일종의 시뮬레이션 문제이고, 격자의 크기도 매우 작고 (4), 단 한 번의 시도만 하면 되기 때문에 별다른 기교 없이 구현만 하면 됩니다.
그러면 각 방향에 slide 동작을 어떻게 구현할 것인가? 간단하게 생각을 해보면 모든 방향에 대해서 동작을 구현하면 됩니다.
각 방향에 대한 line들 각각에서 유효한 블럭들을 모아서 그 인접한 블럭을 조건에 맞게 합치고 그걸 업데이트하면 됩니다.
하지만, 위와 같은 방식은 중복되는 코드가 너무 많고 길어지기 때문에 가독성이 너무 안좋습니다. 단적으로는 예쁘지 않아서 더 나은 방식이 있습니다. 회전을 이용하면 하나의 코드로 모든 방향에 대한 slide 동작을 구현할 수 있습니다.
각 방향에 대한 올바른 rotate 수를 `rot`이라고 하면
```rust
// where board: &mut [[usize; 4]; 4]
for _ in 0..rot {
rotate(board);
}
for row in board.iter_mut() {
slide_merge(row);
}
for _ in 0..(4 - rot) % 4 {
rotate(board);
}
```
깔끔하게 구협됩니다.
],
)