Last active
August 14, 2021 20:54
-
-
Save tphummel/28766e34730d603ca67d7c90f8bd6fc1 to your computer and use it in GitHub Desktop.
Compile head to head scoring for group solitaire (aka nertz, pounce)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ | |
{ | |
"Hand": 1, | |
"Player": "Neela", | |
"Score": 24, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 2, | |
"Player": "Neela", | |
"Score": 24, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 3, | |
"Player": "Neela", | |
"Score": 20, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 4, | |
"Player": "Neela", | |
"Score": -2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 5, | |
"Player": "Neela", | |
"Score": -10, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 6, | |
"Player": "Neela", | |
"Score": 28, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 7, | |
"Player": "Neela", | |
"Score": 20, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 8, | |
"Player": "Neela", | |
"Score": 22, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 9, | |
"Player": "Neela", | |
"Score": -9, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 10, | |
"Player": "Neela", | |
"Score": 12, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 11, | |
"Player": "Neela", | |
"Score": 23, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 12, | |
"Player": "Neela", | |
"Score": 32, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 13, | |
"Player": "Neela", | |
"Score": 1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 19, | |
"Player": "Neela", | |
"Score": 15, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 20, | |
"Player": "Neela", | |
"Score": 17, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 1, | |
"Player": "Tom", | |
"Score": 14, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 2, | |
"Player": "Tom", | |
"Score": -12, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 3, | |
"Player": "Tom", | |
"Score": 36, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 4, | |
"Player": "Tom", | |
"Score": -1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 5, | |
"Player": "Tom", | |
"Score": 3, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 6, | |
"Player": "Tom", | |
"Score": 6, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 7, | |
"Player": "Tom", | |
"Score": 5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 8, | |
"Player": "Tom", | |
"Score": 7, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 9, | |
"Player": "Tom", | |
"Score": -13, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 10, | |
"Player": "Tom", | |
"Score": 4, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 11, | |
"Player": "Tom", | |
"Score": 10, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 12, | |
"Player": "Tom", | |
"Score": 1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 13, | |
"Player": "Tom", | |
"Score": -17, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 14, | |
"Player": "Tom", | |
"Score": 4, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 15, | |
"Player": "Tom", | |
"Score": -11, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 16, | |
"Player": "Tom", | |
"Score": -5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 17, | |
"Player": "Tom", | |
"Score": -14, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 18, | |
"Player": "Tom", | |
"Score": 4, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 19, | |
"Player": "Tom", | |
"Score": -19, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 20, | |
"Player": "Tom", | |
"Score": -1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 1, | |
"Player": "Dylan", | |
"Score": 30, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 2, | |
"Player": "Dylan", | |
"Score": 3, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 4, | |
"Player": "Dylan", | |
"Score": -7, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 5, | |
"Player": "Dylan", | |
"Score": -9, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 6, | |
"Player": "Dylan", | |
"Score": 8, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 7, | |
"Player": "Dylan", | |
"Score": 1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 8, | |
"Player": "Dylan", | |
"Score": 2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 14, | |
"Player": "Nancy", | |
"Score": -5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 15, | |
"Player": "Nancy", | |
"Score": 2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 16, | |
"Player": "Nancy", | |
"Score": 18, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 17, | |
"Player": "Nancy", | |
"Score": 8, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 18, | |
"Player": "Nancy", | |
"Score": -2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 19, | |
"Player": "Nancy", | |
"Score": 18, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 20, | |
"Player": "Nancy", | |
"Score": 5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 1, | |
"Player": "Tyler", | |
"Score": -10, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 2, | |
"Player": "Tyler", | |
"Score": 5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 4, | |
"Player": "Tyler", | |
"Score": -5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 5, | |
"Player": "Tyler", | |
"Score": -4, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 7, | |
"Player": "Tyler", | |
"Score": 12, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 8, | |
"Player": "Tyler", | |
"Score": 3, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 9, | |
"Player": "Tyler", | |
"Score": 2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 10, | |
"Player": "Tyler", | |
"Score": 28, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 12, | |
"Player": "Tyler", | |
"Score": -7, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 13, | |
"Player": "Tyler", | |
"Score": -10, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 15, | |
"Player": "Tyler", | |
"Score": 6, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 16, | |
"Player": "Tyler", | |
"Score": -6, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 17, | |
"Player": "Tyler", | |
"Score": 24, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 18, | |
"Player": "Tyler", | |
"Score": 23, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 1, | |
"Player": "Molly", | |
"Score": 14, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 2, | |
"Player": "Molly", | |
"Score": -1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 3, | |
"Player": "Molly", | |
"Score": 21, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 4, | |
"Player": "Molly", | |
"Score": -19, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 6, | |
"Player": "Molly", | |
"Score": 7, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 7, | |
"Player": "Molly", | |
"Score": -5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 8, | |
"Player": "Molly", | |
"Score": -12, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 13, | |
"Player": "Molly", | |
"Score": -10, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 16, | |
"Player": "Dylan", | |
"Score": -8, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 17, | |
"Player": "Dylan", | |
"Score": 1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 18, | |
"Player": "Dylan", | |
"Score": 5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 19, | |
"Player": "Dylan", | |
"Score": 11, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 20, | |
"Player": "Dylan", | |
"Score": 3, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 1, | |
"Player": "Britta", | |
"Score": 19, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 2, | |
"Player": "Britta", | |
"Score": 18, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 3, | |
"Player": "Britta", | |
"Score": 27, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 4, | |
"Player": "Britta", | |
"Score": 18, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 5, | |
"Player": "Britta", | |
"Score": 17, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 6, | |
"Player": "Brenty", | |
"Score": 9, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 7, | |
"Player": "Brenty", | |
"Score": 10, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 8, | |
"Player": "Brenty", | |
"Score": 1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 9, | |
"Player": "Brenty", | |
"Score": -18, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 10, | |
"Player": "Brenty", | |
"Score": 13, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 11, | |
"Player": "Brenty", | |
"Score": -1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 12, | |
"Player": "Brenty", | |
"Score": 5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 13, | |
"Player": "Brenty", | |
"Score": -5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 14, | |
"Player": "Britta", | |
"Score": -4, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 15, | |
"Player": "Britta", | |
"Score": -2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 16, | |
"Player": "Britta", | |
"Score": 5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 17, | |
"Player": "Britta", | |
"Score": 3, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 18, | |
"Player": "Britta", | |
"Score": 1, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 19, | |
"Player": "Britta", | |
"Score": -2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 20, | |
"Player": "Britta", | |
"Score": 3, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 1, | |
"Player": "Courtney", | |
"Score": -20, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 2, | |
"Player": "Courtney", | |
"Score": -21, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 4, | |
"Player": "Gavin", | |
"Score": -12, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 5, | |
"Player": "Gavin", | |
"Score": 13, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 6, | |
"Player": "Gavin", | |
"Score": -7, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 7, | |
"Player": "Gavin", | |
"Score": 17, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 8, | |
"Player": "Gavin", | |
"Score": 4, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 9, | |
"Player": "Gavin", | |
"Score": 16, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 10, | |
"Player": "Gavin", | |
"Score": 20, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 12, | |
"Player": "Gavin", | |
"Score": 3, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 13, | |
"Player": "Gavin", | |
"Score": 21, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 14, | |
"Player": "Gavin", | |
"Score": 22, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 15, | |
"Player": "Gavin", | |
"Score": 19, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 16, | |
"Player": "Gavin", | |
"Score": 5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 17, | |
"Player": "Gavin", | |
"Score": 5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 18, | |
"Player": "Gavin", | |
"Score": 13, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 19, | |
"Player": "Gavin", | |
"Score": 20, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 20, | |
"Player": "Gavin", | |
"Score": 22, | |
"Winner": "TRUE" | |
}, | |
{ | |
"Hand": 1, | |
"Player": "Rumiah", | |
"Score": -6, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 2, | |
"Player": "Rumiah", | |
"Score": -2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 6, | |
"Player": "Brent B", | |
"Score": 4, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 7, | |
"Player": "Brent B", | |
"Score": -9, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 8, | |
"Player": "Brent B", | |
"Score": -5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 14, | |
"Player": "Brenty", | |
"Score": -19, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 15, | |
"Player": "Brenty", | |
"Score": -2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 16, | |
"Player": "Brenty", | |
"Score": -3, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 17, | |
"Player": "Brenty", | |
"Score": -6, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 18, | |
"Player": "Brenty", | |
"Score": 2, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 19, | |
"Player": "Brenty", | |
"Score": 5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 20, | |
"Player": "Brenty", | |
"Score": -7, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 14, | |
"Player": "Alissa", | |
"Score": -5, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 15, | |
"Player": "Alissa", | |
"Score": -6, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 16, | |
"Player": "Alissa", | |
"Score": -6, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 17, | |
"Player": "Alissa", | |
"Score": 3, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 18, | |
"Player": "Alissa", | |
"Score": 9, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 19, | |
"Player": "Alissa", | |
"Score": 9, | |
"Winner": "" | |
}, | |
{ | |
"Hand": 20, | |
"Player": "Genny", | |
"Score": -2, | |
"Winner": "" | |
} | |
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
let playerHands = require('./2014-12-31.json') | |
// build lookup indices | |
let handsByPlayer = playerHands.reduce((memo, ph) => { | |
if(!memo[ph.Player]) memo[ph.Player] = [] | |
memo[ph.Player][ph.Hand] = ph | |
return memo | |
}, {}) | |
let playersByHand = playerHands.reduce((memo, ph) => { | |
if(!memo[ph.Hand]) memo[ph.Hand] = {} | |
memo[ph.Hand][ph.Player] = ph | |
return memo | |
}, []) | |
// enrich handsByPlayer with opponents | |
for (const [player, hands] of Object.entries(handsByPlayer)) { | |
const enrichedHands = hands.map((hand) => { | |
const filtered = Object.entries(playersByHand[hand.Hand]).filter(([k, v]) => { | |
return v.Player !== player | |
}) | |
hand.opponents = Object.fromEntries(filtered) | |
return hand | |
}) | |
handsByPlayer[player] = enrichedHands | |
} | |
console.log(handsByPlayer) | |
// enrich handsByPlayer+opponents with pairwise scoring | |
// summarize pairwise scoring |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment