Add next 40 backlog calculators (banana dose, bar/barn, awg-swg)

This commit is contained in:
Codex Agent
2026-03-08 02:58:17 +00:00
parent 962b6d090d
commit 25a671535a
3 changed files with 201 additions and 56 deletions

View File

@@ -2160,6 +2160,46 @@ The registry currently contains 1333 unique calculator slugs.
| Attograms to Tons | attograms-to-tons | weight | 1e-24 |
| Attograms to Troy Ounces | attograms-to-troy-ounces | weight | 3.215074656862798e-20 |
| Attograms to Yoctograms | attograms-to-yoctograms | weight | 999999.9999999999 |
| Attograms to Zeptograms | attograms-to-zeptograms | weight | 1000.0 |
| Awg to Swg | awg-to-swg | electrical | 1 |
| Banana Equivalent Dose to Becquerel | banana-equivalent-dose-to-becquerel | radiation | 15.0 |
| Banana Equivalent Dose to Coulomb Per Kilogram | banana-equivalent-dose-to-coulomb-per-kilogram | radiation | 2.94e-09 |
| Banana Equivalent Dose to Counts Per Minute | banana-equivalent-dose-to-counts-per-minute | radiation | 900.0 |
| Banana Equivalent Dose to Curie | banana-equivalent-dose-to-curie | radiation | 4.054054054054054e-10 |
| Banana Equivalent Dose to Disintegrations Per Second | banana-equivalent-dose-to-disintegrations-per-second | radiation | 15.0 |
| Banana Equivalent Dose to Gray | banana-equivalent-dose-to-gray | radiation | 1e-07 |
| Banana Equivalent Dose to Millirem | banana-equivalent-dose-to-millirem | radiation | 0.009999999999999998 |
| Banana Equivalent Dose to Millisievert | banana-equivalent-dose-to-millisievert | radiation | 9.999999999999999e-05 |
| Banana Equivalent Dose to Picocurie | banana-equivalent-dose-to-picocurie | radiation | 405.4054054054054 |
| Banana Equivalent Dose to Rad | banana-equivalent-dose-to-rad | radiation | 9.999999999999999e-06 |
| Banana Equivalent Dose to Rem | banana-equivalent-dose-to-rem | radiation | 9.999999999999999e-06 |
| Banana Equivalent Dose to Roentgen | banana-equivalent-dose-to-roentgen | radiation | 1.14e-05 |
| Banana Equivalent Dose to Rutherford | banana-equivalent-dose-to-rutherford | radiation | 1.5e-05 |
| Banana Equivalent Dose to Sievert | banana-equivalent-dose-to-sievert | radiation | 1e-07 |
| Bar to Barye | bar-to-barye | pressure | 1000000.0 |
| Bar to Cmhg | bar-to-cmhg | pressure | 75.00637554192106 |
| Bar to Dynes Per Sq Cm | bar-to-dynes-per-sq-cm | pressure | 1000000.0 |
| Bar to Feet Of Seawater | bar-to-feet-of-seawater | length | 32.5945812686106 |
| Bar to Feet Of Water | bar-to-feet-of-water | length | 33.49601339491917 |
| Bar to Hectopascals | bar-to-hectopascals | pressure | 1000.0 |
| Bar to Inches Of Mercury | bar-to-inches-of-mercury | pressure | 29.529980164712324 |
| Bar to Kilopascals | bar-to-kilopascals | pressure | 100.0 |
| Bar to Millibars | bar-to-millibars | pressure | 1000.0 |
| Bar to Millimeters Of Mercury | bar-to-millimeters-of-mercury | pressure | 750.0637554192106 |
| Bar to Pascals | bar-to-pascals | pressure | 100000.0 |
| Bar to Technical Atmosphere | bar-to-technical-atmosphere | pressure | 1.0197162129779282 |
| Bar to Technical Atmosphere (at) | bar-to-technical-atmosphere-at | pressure | 1.0197162129779282 |
| Barns to Ares | barns-to-ares | area | 9.999999999999999e-31 |
| Barns to Circular Mils | barns-to-circular-mils | area | 1.9735252413899847e-19 |
| Barns to Dunams | barns-to-dunams | area | 9.999999999999999e-32 |
| Barns to Hectares | barns-to-hectares | area | 9.999999999999999e-33 |
| Barns to Roods | barns-to-roods | area | 9.884215258686612e-32 |
| Barns to Sections | barns-to-sections | area | 3.8610215854244585e-35 |
| Barns to Square Centimeters | barns-to-square-centimeters | area | 1e-24 |
| Barns to Square Feet | barns-to-square-feet | area | 1.0763910416709721e-27 |
| Barns to Square Inches | barns-to-square-inches | area | 1.5500031000062e-25 |
| Barns to Square Kilometers | barns-to-square-kilometers | area | 1e-34 |
| Barns to Square Miles | barns-to-square-miles | area | 3.8610215854244585e-35 |
## Completion Checklist
- [x] Inches to Feet (`inches-to-feet`)
@@ -4135,47 +4175,47 @@ The registry currently contains 1333 unique calculator slugs.
- [x] Attograms to Tons
- [x] Attograms to Troy Ounces
- [x] Attograms to Yoctograms
- [ ] Attograms to Zeptograms
- [ ] Awg to Swg
- [ ] Banana Equivalent Dose to Becquerel
- [ ] Banana Equivalent Dose to Coulomb Per Kilogram
- [ ] Banana Equivalent Dose to Counts Per Minute
- [ ] Banana Equivalent Dose to Curie
- [ ] Banana Equivalent Dose to Disintegrations Per Second
- [ ] Banana Equivalent Dose to Gray
- [ ] Banana Equivalent Dose to Millirem
- [ ] Banana Equivalent Dose to Millisievert
- [ ] Banana Equivalent Dose to Picocurie
- [ ] Banana Equivalent Dose to Rad
- [ ] Banana Equivalent Dose to Rem
- [ ] Banana Equivalent Dose to Roentgen
- [ ] Banana Equivalent Dose to Rutherford
- [ ] Banana Equivalent Dose to Sievert
- [ ] Bar to Barye
- [ ] Bar to Cmhg
- [ ] Bar to Dynes Per Sq Cm
- [ ] Bar to Feet Of Seawater
- [ ] Bar to Feet Of Water
- [ ] Bar to Hectopascals
- [ ] Bar to Inches Of Mercury
- [ ] Bar to Kilopascals
- [ ] Bar to Millibars
- [ ] Bar to Millimeters Of Mercury
- [ ] Bar to Pascals
- [ ] Bar to Technical Atmosphere
- [ ] Bar to Technical Atmosphere (at)
- [x] Attograms to Zeptograms
- [x] Awg to Swg
- [x] Banana Equivalent Dose to Becquerel
- [x] Banana Equivalent Dose to Coulomb Per Kilogram
- [x] Banana Equivalent Dose to Counts Per Minute
- [x] Banana Equivalent Dose to Curie
- [x] Banana Equivalent Dose to Disintegrations Per Second
- [x] Banana Equivalent Dose to Gray
- [x] Banana Equivalent Dose to Millirem
- [x] Banana Equivalent Dose to Millisievert
- [x] Banana Equivalent Dose to Picocurie
- [x] Banana Equivalent Dose to Rad
- [x] Banana Equivalent Dose to Rem
- [x] Banana Equivalent Dose to Roentgen
- [x] Banana Equivalent Dose to Rutherford
- [x] Banana Equivalent Dose to Sievert
- [x] Bar to Barye
- [x] Bar to Cmhg
- [x] Bar to Dynes Per Sq Cm
- [x] Bar to Feet Of Seawater
- [x] Bar to Feet Of Water
- [x] Bar to Hectopascals
- [x] Bar to Inches Of Mercury
- [x] Bar to Kilopascals
- [x] Bar to Millibars
- [x] Bar to Millimeters Of Mercury
- [x] Bar to Pascals
- [x] Bar to Technical Atmosphere
- [x] Bar to Technical Atmosphere (at)
- [x] Barns to Acres
- [ ] Barns to Ares
- [ ] Barns to Circular Mils
- [ ] Barns to Dunams
- [ ] Barns to Hectares
- [ ] Barns to Roods
- [ ] Barns to Sections
- [ ] Barns to Square Centimeters
- [ ] Barns to Square Feet
- [ ] Barns to Square Inches
- [ ] Barns to Square Kilometers
- [ ] Barns to Square Miles
- [x] Barns to Ares
- [x] Barns to Circular Mils
- [x] Barns to Dunams
- [x] Barns to Hectares
- [x] Barns to Roods
- [x] Barns to Sections
- [x] Barns to Square Centimeters
- [x] Barns to Square Feet
- [x] Barns to Square Inches
- [x] Barns to Square Kilometers
- [x] Barns to Square Miles
- [ ] Barns to Square Mils
- [x] Barns to Square Yards
- [ ] Barns to Townships

View File

@@ -1,5 +1,5 @@
// THIS FILE IS AUTO-GENERATED BY migrate.py
export type CalcType = 'standard' | 'inverse' | '3col' | '3col-mul' | 'base' | 'text-bin' | 'bin-text' | 'dms-dd' | 'dd-dms' | 'dec-frac' | 'db-int' | 'db-spl' | 'db-v' | 'db-w' | 'awg' | 'brinell-rockwell' | 'ev-lux' | 'aov' | 'swg' | 'rockwell-vickers' | 'sus-cst' | 'molarity';
export type CalcType = 'standard' | 'inverse' | '3col' | '3col-mul' | 'base' | 'text-bin' | 'bin-text' | 'dms-dd' | 'dd-dms' | 'dec-frac' | 'db-int' | 'db-spl' | 'db-v' | 'db-w' | 'awg' | 'awg-swg' | 'brinell-rockwell' | 'ev-lux' | 'aov' | 'swg' | 'rockwell-vickers' | 'sus-cst' | 'molarity';
export interface CalculatorDef {
slug: string;
@@ -1888,6 +1888,47 @@ export const calculators: CalculatorDef[] = [
{"slug": "attograms-to-troy-ounces", "name": "Attograms to Troy Ounces", "category": "weight", "type": "standard", "labels": {"in1": "Attograms", "in2": "Troy Ounces"}, "factor": 3.215074656862798e-20},
{"slug": "attograms-to-yoctograms", "name": "Attograms to Yoctograms", "category": "weight", "type": "standard", "labels": {"in1": "Attograms", "in2": "Yoctograms"}, "factor": 999999.9999999999},
{"slug": "attograms-to-zeptograms", "name": "Attograms to Zeptograms", "category": "weight", "type": "standard", "labels": {"in1": "Attograms", "in2": "Zeptograms"}, "factor": 1000.0},
{"slug": "awg-to-swg", "name": "Awg to Swg", "category": "electrical", "type": "awg-swg", "labels": {"in1": "Awg", "in2": "Swg"}, "factor": 1},
{"slug": "banana-equivalent-dose-to-becquerel", "name": "Banana Equivalent Dose to Becquerel", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Becquerel"}, "factor": 15.0},
{"slug": "banana-equivalent-dose-to-coulomb-per-kilogram", "name": "Banana Equivalent Dose to Coulomb Per Kilogram", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Coulomb Per Kilogram"}, "factor": 2.94e-09},
{"slug": "banana-equivalent-dose-to-counts-per-minute", "name": "Banana Equivalent Dose to Counts Per Minute", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Counts Per Minute"}, "factor": 900.0},
{"slug": "banana-equivalent-dose-to-curie", "name": "Banana Equivalent Dose to Curie", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Curie"}, "factor": 4.054054054054054e-10},
{"slug": "banana-equivalent-dose-to-disintegrations-per-second", "name": "Banana Equivalent Dose to Disintegrations Per Second", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Disintegrations Per Second"}, "factor": 15.0},
{"slug": "banana-equivalent-dose-to-gray", "name": "Banana Equivalent Dose to Gray", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Gray"}, "factor": 1e-07},
{"slug": "banana-equivalent-dose-to-millirem", "name": "Banana Equivalent Dose to Millirem", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Millirem"}, "factor": 0.009999999999999998},
{"slug": "banana-equivalent-dose-to-millisievert", "name": "Banana Equivalent Dose to Millisievert", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Millisievert"}, "factor": 9.999999999999999e-05},
{"slug": "banana-equivalent-dose-to-picocurie", "name": "Banana Equivalent Dose to Picocurie", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Picocurie"}, "factor": 405.4054054054054},
{"slug": "banana-equivalent-dose-to-rad", "name": "Banana Equivalent Dose to Rad", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Rad"}, "factor": 9.999999999999999e-06},
{"slug": "banana-equivalent-dose-to-rem", "name": "Banana Equivalent Dose to Rem", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Rem"}, "factor": 9.999999999999999e-06},
{"slug": "banana-equivalent-dose-to-roentgen", "name": "Banana Equivalent Dose to Roentgen", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Roentgen"}, "factor": 1.14e-05},
{"slug": "banana-equivalent-dose-to-rutherford", "name": "Banana Equivalent Dose to Rutherford", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Rutherford"}, "factor": 1.5e-05},
{"slug": "banana-equivalent-dose-to-sievert", "name": "Banana Equivalent Dose to Sievert", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Sievert"}, "factor": 1e-07},
{"slug": "bar-to-barye", "name": "Bar to Barye", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Barye"}, "factor": 1000000.0},
{"slug": "bar-to-cmhg", "name": "Bar to Cmhg", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Cmhg"}, "factor": 75.00637554192106},
{"slug": "bar-to-dynes-per-sq-cm", "name": "Bar to Dynes Per Sq Cm", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Dynes Per Sq Cm"}, "factor": 1000000.0},
{"slug": "bar-to-feet-of-seawater", "name": "Bar to Feet Of Seawater", "category": "length", "type": "standard", "labels": {"in1": "Bar", "in2": "Feet Of Seawater"}, "factor": 32.5945812686106},
{"slug": "bar-to-feet-of-water", "name": "Bar to Feet Of Water", "category": "length", "type": "standard", "labels": {"in1": "Bar", "in2": "Feet Of Water"}, "factor": 33.49601339491917},
{"slug": "bar-to-hectopascals", "name": "Bar to Hectopascals", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Hectopascals"}, "factor": 1000.0},
{"slug": "bar-to-inches-of-mercury", "name": "Bar to Inches Of Mercury", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Inches Of Mercury"}, "factor": 29.529980164712324},
{"slug": "bar-to-kilopascals", "name": "Bar to Kilopascals", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Kilopascals"}, "factor": 100.0},
{"slug": "bar-to-millibars", "name": "Bar to Millibars", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Millibars"}, "factor": 1000.0},
{"slug": "bar-to-millimeters-of-mercury", "name": "Bar to Millimeters Of Mercury", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Millimeters Of Mercury"}, "factor": 750.0637554192106},
{"slug": "bar-to-pascals", "name": "Bar to Pascals", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Pascals"}, "factor": 100000.0},
{"slug": "bar-to-technical-atmosphere", "name": "Bar to Technical Atmosphere", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Technical Atmosphere"}, "factor": 1.0197162129779282},
{"slug": "bar-to-technical-atmosphere-at", "name": "Bar to Technical Atmosphere (at)", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Technical Atmosphere (at)"}, "factor": 1.0197162129779282},
{"slug": "barns-to-ares", "name": "Barns to Ares", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Ares"}, "factor": 9.999999999999999e-31},
{"slug": "barns-to-circular-mils", "name": "Barns to Circular Mils", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Circular Mils"}, "factor": 1.9735252413899847e-19},
{"slug": "barns-to-dunams", "name": "Barns to Dunams", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Dunams"}, "factor": 9.999999999999999e-32},
{"slug": "barns-to-hectares", "name": "Barns to Hectares", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Hectares"}, "factor": 9.999999999999999e-33},
{"slug": "barns-to-roods", "name": "Barns to Roods", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Roods"}, "factor": 9.884215258686612e-32},
{"slug": "barns-to-sections", "name": "Barns to Sections", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Sections"}, "factor": 3.8610215854244585e-35},
{"slug": "barns-to-square-centimeters", "name": "Barns to Square Centimeters", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Centimeters"}, "factor": 1e-24},
{"slug": "barns-to-square-feet", "name": "Barns to Square Feet", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Feet"}, "factor": 1.0763910416709721e-27},
{"slug": "barns-to-square-inches", "name": "Barns to Square Inches", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Inches"}, "factor": 1.5500031000062e-25},
{"slug": "barns-to-square-kilometers", "name": "Barns to Square Kilometers", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Kilometers"}, "factor": 1e-34},
{"slug": "barns-to-square-miles", "name": "Barns to Square Miles", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Miles"}, "factor": 3.8610215854244585e-35},
];
const slugIndex = new Map(calculators.map(c => [c.slug, c]));

View File

@@ -129,26 +129,47 @@ export function solve(
}
break;
case 'dec-frac':
if (source === 1) {
if (!isNaN(v1)) {
const parts = v1.toString().split('.');
case 'dec-frac': {
// Two calculators share this type:
// - decimal -> fraction
// - fraction -> decimal
// Detect which direction the left field represents via its label.
const fractionFirst = calc.labels.in1.toLowerCase().includes('fraction');
const decimalToFraction = (n: number) => {
if (isNaN(n)) return '';
const parts = n.toString().split('.');
const len = parts[1] ? parts[1].length : 0;
const den = Math.pow(10, len);
const num = v1 * den;
const num = n * den;
const div = gcd(num, den);
out.val2 = `${num / div}/${den / div}`;
} else { out.val2 = ''; }
} else {
const parts = rawVal2.split('/');
return `${num / div}/${den / div}`;
};
const fractionToDecimal = (raw: string) => {
const parts = raw.split('/');
if (parts.length === 2 && !isNaN(Number(parts[0])) && !isNaN(Number(parts[1])) && Number(parts[1]) !== 0) {
out.val1 = fmt(Number(parts[0]) / Number(parts[1]));
} else {
return fmt(Number(parts[0]) / Number(parts[1]));
}
const f = parseFloat(parts[0]);
out.val1 = !isNaN(f) ? f.toString() : '';
return !isNaN(f) ? f.toString() : '';
};
if (fractionFirst) {
if (source === 1) {
out.val2 = fractionToDecimal(rawVal1);
} else {
out.val1 = decimalToFraction(v2);
}
} else {
if (source === 1) {
out.val2 = decimalToFraction(v1);
} else {
out.val1 = fractionToDecimal(rawVal2);
}
}
break;
}
case 'db-int':
if (source === 1) {
@@ -232,6 +253,49 @@ export function solve(
break;
}
case 'awg-swg': {
const log92 = Math.log(92);
const awgToDiameterMm = (g: number) => 0.127 * Math.pow(92, (36 - g) / 39);
const diameterMmToAwg = (d: number) => 36 - 39 * Math.log(d / 0.127) / log92;
const swgTable: Record<number, number> = {
0: 8.23, 1: 7.62, 2: 7.01, 3: 6.4, 4: 5.89, 5: 5.385, 6: 4.877,
7: 4.47, 8: 4.064, 9: 3.658, 10: 3.251, 11: 2.946, 12: 2.642, 13: 2.337,
14: 2.032, 15: 1.829, 16: 1.626, 17: 1.422, 18: 1.219, 19: 1.016,
20: 0.914, 21: 0.813, 22: 0.711, 23: 0.61, 24: 0.559, 25: 0.508,
26: 0.457, 27: 0.417, 28: 0.376, 29: 0.345, 30: 0.315, 31: 0.294,
32: 0.274, 33: 0.254, 34: 0.234, 35: 0.213, 36: 0.193,
37: 0.173, 38: 0.152, 39: 0.132, 40: 0.122, 41: 0.112, 42: 0.102,
43: 0.091, 44: 0.081, 45: 0.071, 46: 0.061, 47: 0.051, 48: 0.04,
49: 0.03, 50: 0.025
};
const nearestSwg = (diamMm: number) => {
let bestGauge = 0;
let bestDiff = Number.POSITIVE_INFINITY;
for (const [gStr, d] of Object.entries(swgTable)) {
const diff = Math.abs(diamMm - d);
if (diff < bestDiff) { bestDiff = diff; bestGauge = Number(gStr); }
}
return bestGauge;
};
if (source === 1) {
// AWG -> SWG
if (!isNaN(v1)) {
const diam = awgToDiameterMm(v1);
out.val2 = fmt(nearestSwg(diam));
} else { out.val2 = ''; }
} else {
// SWG -> AWG
if (!isNaN(v2)) {
const diam = swgTable[Math.round(v2)];
if (diam) out.val1 = fmt(diameterMmToAwg(diam));
else out.val1 = '';
} else { out.val1 = ''; }
}
break;
}
case 'ev-lux': {
const isEvFirst = calc.labels.in1.toLowerCase().includes('ev');
const toLux = (ev: number) => 2.5 * Math.pow(2, ev);