function TrainsCalculator() { const [problemType, setProblemType] = useState('meeting'); const [speed1, setSpeed1] = useState(''); const [speed2, setSpeed2] = useState(''); const [length1, setLength1] = useState(''); const [length2, setLength2] = useState(''); const [distance, setDistance] = useState(''); const [result, setResult] = useState(null); const calculate = () => { const s1 = parseFloat(speed1); const s2 = parseFloat(speed2); const l1 = parseFloat(length1) || 0; const l2 = parseFloat(length2) || 0; const d = parseFloat(distance); let calculated = {}; if (problemType === 'meeting') { // Trains meeting (opposite direction) const relativeSpeed = s1 + s2; const timeToMeet = d / relativeSpeed; const dist1 = s1 * timeToMeet; const dist2 = s2 * timeToMeet; calculated = { relativeSpeed: relativeSpeed.toFixed(2), timeToMeet: timeToMeet.toFixed(2), distance1: dist1.toFixed(2), distance2: dist2.toFixed(2), formula: 'Relative Speed = Speed₁ + Speed₂ (opposite direction)', calculation: `Time to meet = ${d} / (${s1} + ${s2}) = ${timeToMeet.toFixed(2)} hours` }; } else if (problemType === 'crossing') { // Trains crossing (same direction) const relativeSpeed = Math.abs(s1 - s2); const totalLength = l1 + l2; const timeToCross = (totalLength / 1000) / relativeSpeed; // Convert m to km calculated = { relativeSpeed: relativeSpeed.toFixed(2), totalLength: totalLength, timeToCross: timeToCross.toFixed(2), timeInMinutes: (timeToCross * 60).toFixed(2), formula: 'Relative Speed = |Speed₁ - Speed₂| (same direction)', calculation: `Time = (${l1} + ${l2}) m / ${relativeSpeed} km/h = ${timeToCross.toFixed(2)} hours` }; } else if (problemType === 'platform') { // Train crossing platform const totalLength = l1 + (l2 || 0); const timeToCross = (totalLength / 1000) / s1; // Convert m to km calculated = { totalLength: totalLength, timeToCross: timeToCross.toFixed(2), timeInSeconds: (timeToCross * 3600).toFixed(2), formula: 'Time = (Train Length + Platform Length) / Speed', calculation: `Time = ${totalLength} m / ${s1} km/h = ${timeToCross.toFixed(2)} hours = ${(timeToCross * 3600).toFixed(2)} seconds` }; } setResult(calculated); }; return (
setSpeed1(e.target.value)} placeholder="60" />
{problemType !== 'platform' && (
setSpeed2(e.target.value)} placeholder="40" />
)} {(problemType === 'crossing' || problemType === 'platform') && ( <>
setLength1(e.target.value)} placeholder="150" />
setLength2(e.target.value)} placeholder="100" />
)} {problemType === 'meeting' && (
setDistance(e.target.value)} placeholder="200" />
)}
{result && (
Formula: {result.formula}
Calculation: {result.calculation}
{result.relativeSpeed &&
Relative Speed: {result.relativeSpeed} km/h
} {result.timeToMeet &&
Time to Meet: {result.timeToMeet} hours
} {result.distance1 &&
Train 1 covers: {result.distance1} km
} {result.distance2 &&
Train 2 covers: {result.distance2} km
} {result.timeToCross &&
Time to Cross: {result.timeToCross} hours ({result.timeInMinutes || result.timeInSeconds} {result.timeInMinutes ? 'minutes' : 'seconds'})
} {result.totalLength &&
Total Length: {result.totalLength} m
}
)}
); } // Export to global registry window.TrainsCalculator = TrainsCalculator;