JSFiddle - React, Tailwind, and code Playground

HTML

<textarea id="cardinfo">
card 1 - in: 1, 2, 3, 4 out: 5, 6, 7, 8
card 2 - in: 5, 6, 7, 8 out: 1, 2, 3, 4
</textarea>
<textarea id="solution">
1 2 1 2 1 2
2 1 2 1 2 1
1 2 1 2 1 2
</textarea>
<a href="javascript:CalculateScore()">score</a>

JavaScript

function NumberOfSetBits(i) 
{ 
    // see http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer    
    i = i - ((i >> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
    return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}
function BitsSetStringToInt(str) {
    if (str == "") return 0;
    str = str.split(/, /);
    var result = 0;
    for (var i in str)
        result |= 1 << str[i];
    return result;
}
function ScoreForCard(i, j, solution, inResources, outResources) {
    var score = 0;
    var inres = inResources[solution[i][j]];
    for(var y = i - 1; y <= i + 1; y++)
        for (var x = j - 1; x <= j + 1; x++)
            if (solution[y] != undefined && solution[y][x] != undefined)
                score += NumberOfSetBits(inres & outResources[solution[y][x]]);
    return score;
}
window.CalculateScore = function() {
    var cardLines = document.getElementById("cardinfo").value.match(/[^\r\n]+/g);
    var solutionLines = document.getElementById("solution").value.match(/[^\r\n]+/g);
    var inResources = Array(), outResources = Array();
    for (var i = 0; i < cardLines.length; i++) {
        var line = cardLines[i].match(/in: (.*) out: (.*)/);
        inResources[i] = BitsSetStringToInt(line[1]);
        outResources[i] = BitsSetStringToInt(line[2]);
    }
    var solution = Array();
    for (var i = 0; i < solutionLines.length; i++) {
        solution[i] = solutionLines[i].match(/[0-9]+/g);
        for (var j = 0; j < solution[i].length; j++) 
            solution[i][j] -= 1;
    }
    var score = 0;
    for (var i = 0; i < solution.length; i++)
        for(var j = 0; j < solution[i].length; j++)
            score += ScoreForCard(i, j, solution, inResources, outResources)
    alert(score);
}