feat: release version 1.0.6

This commit is contained in:
2026-08-20 18:07:26 +09:00
parent 6537ab1f20
commit 5d29b63f3a
9 changed files with 198 additions and 26 deletions
@@ -0,0 +1,15 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import { additionalAwakeningsRequired } from './awakening-requirements.ts';
test('미보유 카드를 보유하는 과정은 1회의 개화로 계산한다', () => {
assert.equal(additionalAwakeningsRequired(undefined, 0), 1);
assert.equal(additionalAwakeningsRequired({ owned: false, awakening: 5 }, 0), 1);
assert.equal(additionalAwakeningsRequired({ owned: false }, 5), 6);
});
test('보유 카드는 현재 상태에서 부족한 개화만 계산한다', () => {
assert.equal(additionalAwakeningsRequired({ owned: true, awakening: 2 }, 5), 3);
assert.equal(additionalAwakeningsRequired({ owned: true, awakening: 5 }, 3), 0);
assert.equal(additionalAwakeningsRequired({ owned: true, awakening: 0 }, 0), 0);
});
+21
View File
@@ -0,0 +1,21 @@
export type CardAwakeningState = {
owned?: boolean;
awakening?: number;
};
function normalizeAwakening(value: unknown): number {
return Math.max(0, Math.min(5, Number.isFinite(value) ? Math.round(Number(value)) : 0));
}
/**
* 현재 보유 상태에서 목표 개화까지 필요한 횟수.
* 미보유 카드를 처음 획득하는 과정은 1회의 개화로 계산한다.
*/
export function additionalAwakeningsRequired(
state: CardAwakeningState | undefined,
targetAwakening: number
): number {
const target = normalizeAwakening(targetAwakening);
if (state?.owned !== true) return target + 1;
return Math.max(0, target - normalizeAwakening(state.awakening));
}
+1
View File
@@ -1,5 +1,6 @@
export * from './card-adapter.ts';
export * from './combination-search.ts';
export * from './awakening-requirements.ts';
export * from './board-effects.ts';
export * from './exact-optimizer.ts';
export * from './memory.ts';