【简单】算法nodeJs:记票统计

121 阅读2分钟

描述

某场选举一共有 n 位候选人入选,候选人的名字均由大写字母构成,且互不相同,使用 c1​,c2​,…,cn​ 表示。
选举结束后,统计了 m 张选票,每张选票上均写有候选人的名字,使用 v1​,v2​,…,vm​ 表示。
求解每个候选人获得的票数。特别地,如果某张选票上的候选人名字不在候选名单中,则该票视为无效票。你需要同时统计无效票的数量。

输入描述:

第一行输入一个整数 n(1≦n≦100) 代表候选人数。
第二行输入 n 个长度为 1≦len(ci​)≦10、仅由大写字母构成的字符串 c1​,c2​,…,cn​,代表候选人的名字。保证候选人的名字互不相同。
第三行输入一个整数 m(1≦m≦100) 代表投票人数。
第四行输入 m 个长度为 1≦len(vi​)≦10、仅由大写字母构成的字符串 v1​,v2​,…,vm​,代表投票内容。

输出描述:

对于每一位候选人,新起一行。先输出其名字,随后输出一个空格、一个冒号、一个空格作为间隔,最后输出其获得的票数。形如 ci​ : numbersi​,其中 ci​ 是候选人的名字,numbersi​ 是候选人的票数。
最后一行以相同的格式输出无效票的数量。形如 Invalid : numbers,其中 numbers 是无效票的数量。

image.png

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    const arr = [];
    while (line = await readline()) {
        arr.push(line);
    }
    const nameArr = arr[1].split(" ");
    const ticketArr = arr[3].split(" ");
    const n = {};
    for (let i = 0; i < nameArr.length; i++) {
        n[nameArr[i]] = ticketArr.filter((u) => u == nameArr[i]).length;
    }
    let sum = 0;
    for (let key in n) {
        sum += n[key];
    }
    n.Invalid = ticketArr.length - sum;
    for (let key in n) {
        console.log(key + " : " + n[key]);
    }
})();