訂判斷及所需輸入
一個假設物件原內容八十單位,壓縮後實存三十,有兩份儲存副本。三種已訂計法是八十、三十及六十,只寫「儲存」未選定量哪層。
| 情況 | 輸入 JSON |
|---|---|
| 原例測試 | {"basis":"all-stored-copies","logical":80,"stored":30,"copies":2} |
跑所附比較
程序只用題內已量數值,不估真實壓縮比例或供應商帳單。這裏副本數按報價量儲存內容,未代表獨立復原環境。
| 路徑 | 輸出 JSON |
|---|---|
| 錯誤路徑 | {"basis":"all-stored-copies","measuredUnits":80} |
| 所需路徑 | {"basis":"all-stored-copies","measuredUnits":60} |
import assert from 'node:assert/strict';
const smallWhole=(x,max)=>Number.isSafeInteger(x)&&x>=0&&x<=max;
const run=function run(i,corrected=true){
if(!['logical','one-stored-copy','all-stored-copies'].includes(i.basis)||![i.logical,i.stored,i.copies].every(x=>smallWhole(x,1000000)))return {held:true};
const quantities={logical:i.logical,'one-stored-copy':i.stored,'all-stored-copies':i.stored*i.copies};
return {basis:i.basis,measuredUnits:corrected?quantities[i.basis]:i.logical};
};
const cases=[{"input":{"basis":"all-stored-copies","logical":80,"stored":30,"copies":2},"corrected":false,"expected":{"basis":"all-stored-copies","measuredUnits":80}},{"input":{"basis":"all-stored-copies","logical":80,"stored":30,"copies":2},"corrected":true,"expected":{"basis":"all-stored-copies","measuredUnits":60}},{"input":{"basis":"one-stored-copy","logical":80,"stored":30,"copies":2},"corrected":true,"expected":{"basis":"one-stored-copy","measuredUnits":30}},{"input":{"basis":null,"logical":80,"stored":30,"copies":2},"corrected":true,"expected":{"held":true}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
按邊界依據作判斷
單份模式仍三十,即使有兩副本也一樣。量法缺漏,就先停下比較。
- 訂明量哪一層
- 取該層實量
- 再套副本計法
量法未知便保留未明,不自估壓縮大小。
| 條件 | 輸入 JSON | 預期輸出 JSON |
|---|---|---|
| 只量單份儲存 | {"basis":"one-stored-copy","logical":80,"stored":30,"copies":2} | {"basis":"one-stored-copy","measuredUnits":30} |
| 量法定義欠缺 | {"basis":null,"logical":80,"stored":30,"copies":2} | {"held":true} |
原例全部副本計,應是多少?
查看參考答案
六十,兩份各三十。八十是原內容大小,不能代替此報價基準。