체크포인트 저장 주기 1레벨로 변경
This commit is contained in:
18
Program.cs
18
Program.cs
@@ -195,8 +195,7 @@ internal static class Program
|
|||||||
void SaveCheckpoint(List<GeneratedLevel> snapshot, int lastId)
|
void SaveCheckpoint(List<GeneratedLevel> snapshot, int lastId)
|
||||||
{
|
{
|
||||||
if (!checkpointEnabled) return;
|
if (!checkpointEnabled) return;
|
||||||
// 10단위(또는 마지막 레벨)마다 누적 JSON을 디스크에 기록한다.
|
// 매 레벨마다(또는 마지막 레벨) 누적 JSON을 디스크에 기록한다.
|
||||||
if (lastId % 10 != 0 && lastId != endId) return;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var json = JsonSerializer.Serialize(snapshot, options);
|
var json = JsonSerializer.Serialize(snapshot, options);
|
||||||
@@ -288,6 +287,7 @@ internal static class Program
|
|||||||
var options = new JsonSerializerOptions
|
var options = new JsonSerializerOptions
|
||||||
{
|
{
|
||||||
PropertyNameCaseInsensitive = true,
|
PropertyNameCaseInsensitive = true,
|
||||||
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
||||||
WriteIndented = true
|
WriteIndented = true
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -484,6 +484,7 @@ internal sealed class LevelGenerator
|
|||||||
{
|
{
|
||||||
var band = ResolveBand(id);
|
var band = ResolveBand(id);
|
||||||
var level = BuildSingle(id, band);
|
var level = BuildSingle(id, band);
|
||||||
|
level = TrimLevel(level);
|
||||||
output.Add(level);
|
output.Add(level);
|
||||||
onCheckpoint?.Invoke(output, id);
|
onCheckpoint?.Invoke(output, id);
|
||||||
}
|
}
|
||||||
@@ -830,6 +831,19 @@ internal sealed class LevelGenerator
|
|||||||
if (sink == null) return;
|
if (sink == null) return;
|
||||||
sink[reason] = sink.TryGetValue(reason, out var count) ? count + 1 : 1;
|
sink[reason] = sink.TryGetValue(reason, out var count) ? count + 1 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 생성된 레벨을 자동으로 트림하여 외곽 void(0) 패딩을 제거한다.
|
||||||
|
private static GeneratedLevel TrimLevel(GeneratedLevel level)
|
||||||
|
{
|
||||||
|
var trimmed = LevelTrimmer.Trim(level.Grid);
|
||||||
|
return new GeneratedLevel
|
||||||
|
{
|
||||||
|
Id = level.Id,
|
||||||
|
Grid = trimmed,
|
||||||
|
LowestPush = level.LowestPush,
|
||||||
|
PushLimit = level.PushLimit
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static class LevelTrimmer
|
internal static class LevelTrimmer
|
||||||
|
|||||||
@@ -12,12 +12,16 @@ dotnet run -- <seed> [startId] [endId] > output.json
|
|||||||
# 개별/범위 검증: 생성된 JSON이 풀리는지 확인
|
# 개별/범위 검증: 생성된 JSON이 풀리는지 확인
|
||||||
dotnet run -- --verify <json경로> <id> [endId]
|
dotnet run -- --verify <json경로> <id> [endId]
|
||||||
dotnet run -- --verify-all <json경로>
|
dotnet run -- --verify-all <json경로>
|
||||||
|
# 외곽 트림: JSON의 외부 void(0) 행/열 제거
|
||||||
|
dotnet run -- --trim <입력 json> [출력 json] [startId] [endId]
|
||||||
```
|
```
|
||||||
- 예: `dotnet run -- 12345 3 20 > stage.json`
|
- 예: `dotnet run -- 12345 3 20 > stage.json`
|
||||||
- 예: `dotnet run -- --verify stage.json 210 220`
|
- 예: `dotnet run -- --verify stage.json 210 220`
|
||||||
|
- 예: `dotnet run -- --trim stage.json trimmed.json 200 260`
|
||||||
- `seed`가 없으면 기본값(12345)을 사용합니다.
|
- `seed`가 없으면 기본값(12345)을 사용합니다.
|
||||||
- `startId/endId`가 없으면 `levelbalance.json`에 정의된 밴드 범위를 사용합니다.
|
- `startId/endId`가 없으면 `levelbalance.json`에 정의된 밴드 범위를 사용합니다.
|
||||||
- 검증 모드에서는 지정한 JSON의 레벨을 솔버로 풀어보고, 성공/실패와 함께 `moves/ pushes/ turns`를 리포트합니다.
|
- 검증 모드에서는 지정한 JSON의 레벨을 솔버로 풀어보고, 성공/실패와 함께 `moves/ pushes/ turns`를 리포트합니다.
|
||||||
|
- 트림 모드는 지정한 범위(id)만 외곽의 '0' 패딩을 걷어내서 저장합니다(기본 출력 경로: `trimmed_output.json`).
|
||||||
- 진행 상태는 stderr에 한 줄로 갱신됩니다(벽 생성중/박스 배치중/검증중/생성완료).
|
- 진행 상태는 stderr에 한 줄로 갱신됩니다(벽 생성중/박스 배치중/검증중/생성완료).
|
||||||
|
|
||||||
## 설정
|
## 설정
|
||||||
|
|||||||
Reference in New Issue
Block a user