|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +// 1. Control flow |
| 4 | +// 2. Step by step execution |
| 5 | +// 3. Assignment statements |
| 6 | +// 4. Loops and conditions: for/if |
| 7 | +// 5. State variables and side effects |
| 8 | +// 6. Mutable data structures |
| 9 | +// 7. Model of the process |
| 10 | + |
| 11 | +const fs = require('fs'); |
| 12 | + |
| 13 | +function loadFile(fileName) { |
| 14 | + let data = null; |
| 15 | + try { |
| 16 | + data = fs.readFileSync(fileName); |
| 17 | + } catch (error) { |
| 18 | + console.log('Can\'t read file: ' + fileName); |
| 19 | + } |
| 20 | + return data; |
| 21 | +} |
| 22 | + |
| 23 | +function parseFile(data) { |
| 24 | + const lines = data.toString().split('\n'); |
| 25 | + lines.shift(); |
| 26 | + const cities = []; |
| 27 | + for (const line of lines) { |
| 28 | + if (line) { |
| 29 | + const cells = line.split(','); |
| 30 | + const name = cells[0]; |
| 31 | + const population = parseInt(cells[1]); |
| 32 | + const area = parseInt(cells[2]); |
| 33 | + const density = parseInt(cells[3]); |
| 34 | + const country = cells[4]; |
| 35 | + cities.push({ name, population, area, density, country }); |
| 36 | + } |
| 37 | + } |
| 38 | + return cities; |
| 39 | +} |
| 40 | + |
| 41 | +function calculateDensityColumn(cities) { |
| 42 | + cities.sort((city1, city2) => city2.density - city1.density); |
| 43 | + const maxDensity = cities[0].density; |
| 44 | + for (const city of cities) { |
| 45 | + city.relative = Math.round(city.density * 100 / maxDensity); |
| 46 | + } |
| 47 | +} |
| 48 | + |
| 49 | +function showTable(cities) { |
| 50 | + for (const city of cities) { |
| 51 | + const line = ( |
| 52 | + city.name.padEnd(18) + |
| 53 | + city.population.toString().padStart(10) + |
| 54 | + city.area.toString().padStart(8) + |
| 55 | + city.density.toString().padStart(8) + |
| 56 | + city.country.padStart(18) + |
| 57 | + city.relative.toString().padStart(6) |
| 58 | + ); |
| 59 | + console.log(line); |
| 60 | + } |
| 61 | +} |
| 62 | + |
| 63 | +const data = loadFile('./cities.dat'); |
| 64 | +if (data) { |
| 65 | + const cities = parseFile(data); |
| 66 | + calculateDensityColumn(cities); |
| 67 | + showTable(cities); |
| 68 | +} |
0 commit comments