feat: release version 1.0.6
This commit is contained in:
@@ -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);
|
||||
});
|
||||
@@ -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,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';
|
||||
|
||||
Reference in New Issue
Block a user