Problem:
Score : 100 points

Problem Statement

You are given a 4-character string S consisting of uppercase English letters.
Determine if S consists of exactly two kinds of characters which both appear twice in S.

Constraints

The length of S is 4.

S consists of uppercase English letters.

Input

Input is given from Standard Input in the following format:

S

Output

If S consists of exactly two kinds of characters which both appear twice in S, print Yes; otherwise, print No.

Sample Input 1

ASSA

Sample Output 1

Yes

S consists of A and S which both appear twice in S.

Sample Input 2

STOP

Sample Output 2

No

Sample Input 3

FFEE

Sample Output 3

Yes

Sample Input 4

FREE

Sample Output 4

No

Solution in JavaScript (Node.js 12.16.1) (judge verdict: Wrong Answer)

"use strict";
function main(input) {
    let S = input.replace("\n", "");
    let ans = countBy([...S]);
    console.log(Object.values(ans)[0] == 2 ? "Yes" : "No");
    return;
}
function countBy(data, keyGetter) {
    var keyResolver = {
        'function': function (d) { return keyGetter(d); },
        'string': function (d) { return d[keyGetter]; },
        'undefined': function (d) { return d; }
    };

    var result = {};

    data.forEach(function (d) {
        var keyGetterType = typeof keyGetter;
        var key = keyResolver[keyGetterType](d);

        if (result.hasOwnProperty(key)) {
            result[key] += 1;
        } else {
            result[key] = 1;
        }
    });

    return result;
}
// list1 = ['a', 'b', 'c', 'b', 'a', 'b', 'c', 'a', 'a', 'a'];
// console.log(countBy(list1));  // {'a':5, 'b':3, 'c':2}
// list2 = ['abc', 'aa', 'b3', 'abcd', 'cd'];
// console.log(countBy(list2, 'length'));  // {2: 3, 3: 1, 4: 1}
// list3 = [1.2, 7.8, 1.9];
// console.log(countBy(list3, Math.floor));  // {1: 2, 7: 1}
main(require('fs').readFileSync('/dev/stdin', 'utf8'));