From f6508ca91a37babd7628457b45be72c718e58c72 Mon Sep 17 00:00:00 2001 From: teppy999 Date: Mon, 2 Oct 2023 00:19:45 -0400 Subject: [PATCH] changes --- plurvote.html | 8 ++++++- rangevote.js | 58 +++++++++++++++++++++++++++------------------------ 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/plurvote.html b/plurvote.html index a354f42..05055c7 100644 --- a/plurvote.html +++ b/plurvote.html @@ -7,7 +7,13 @@ -
+ + This page is an experiment in voting. Half of the people who visit this site vote using Plurality Voting where a voter selects their top candidate, and the winner is the candidate with the most votes. The other half use Range Voting where voters score all familiar candidates based on how happy they would be should diff --git a/rangevote.js b/rangevote.js index eede164..43237cc 100644 --- a/rangevote.js +++ b/rangevote.js @@ -5,6 +5,7 @@ var hashindex=require('hash-index') var app = express() + var Candidates=[ "Chris Christie", "Donald Trump", @@ -27,27 +28,26 @@ function CanId(c) // Set up data structures for Range Votes and Plur Votes -var RangeVotes=new Map(); -var RangePower=new Map(); -var RangeResult=new Map(); -var PlurVotes=new Map(); -var PlurResult=new Map(); -var PlurCount=0; +var Experiment={} +Experiment.RangeVotes=new Map(); +Experiment.RangePower=new Map(); +Experiment.RangeResult=new Map(); +Experiment.PlurVotes=new Map(); +Experiment.PlurResult=new Map(); +Experiment.PlurCount=0; for (let c of Candidates) { let k=CanId(c); - let v=RangePower.get(k); - if (typeof(v)!='number' || v==NaN || v==Infinity) RangePower.set(k,0); - v=RangeResult.get(k); - if (typeof(v)!='number' || v==NaN || v==Infinity) RangeResult.set(k,0); - v=PlurResult.get(k); - if (typeof(v)!='number' || v==NaN || v==Infinity) PlurResult.set(k,0); + let v=Experiment.RangePower.get(k); + if (typeof(v)!='number' || v==NaN || v==Infinity) Experiment.RangePower.set(k,0); + v=Experiment.RangeResult.get(k); + if (typeof(v)!='number' || v==NaN || v==Infinity) Experiment.RangeResult.set(k,0); + v=Experiment.PlurResult.get(k); + if (typeof(v)!='number' || v==NaN || v==Infinity) Experiment.PlurResult.set(k,0); } - - // Construct the static page for range voting var RangeHTML=""; for (let c of Candidates) @@ -80,7 +80,7 @@ var jsonParser = bodyParser.json() var urlencodedParser = bodyParser.urlencoded({ extended: false }) app.get('/', (req, res) => { -let kind=hashindex(req.socket.remoteAddress+"salt",2); +let kind=hashindex(req.socket.remoteAddress+"saltA",2); if (kind==0) res.send(RangeHTML); else res.send(PlurHTML); }) @@ -93,13 +93,16 @@ function lerp(a,b,c,d,e) return(rval); } + function PlurVote(ip,NewChoice) { - let OldChoice=PlurResult.get(ip); - if (typeof(OldChoice)=='string') { PlurResult.set(OldChoice,PlurResult.get(OldChoice)-1); PlurCount=PlurCount-1; } + let OldChoice=Experiment.PlurVotes.get(ip); + if (typeof(OldChoice)=='string') { Experiment.PlurResult.set(OldChoice,Experiment.PlurResult.get(OldChoice)-1); Experiment.PlurCount-=1; } if (!NewChoice) return; NewChoice=CanId(NewChoice); - if (typeof(NewChoice)=='string') { PlurResult.set(NewChoice,PlurResult.get(NewChoice)+1); PlurCount=PlurCount+1; } + if (typeof(NewChoice)=='string') { Experiment.PlurResult.set(NewChoice,Experiment.PlurResult.get(NewChoice)+1); Experiment.PlurCount+=1; } + Experiment.PlurVotes.set(ip,NewChoice); + console.log(Experiment); } @@ -107,8 +110,8 @@ function AddToRangeResult(vote,mult=1) { for (let[key,val] of vote) if (key) if (val>=0) { - RangeResult.set(key,RangeResult.get(key)+val*mult); - RangePower.set(key,RangePower.get(key)+mult); + Experiment.RangeResult.set(key,Experiment.RangeResult.get(key)+val*mult); + Experiment.RangePower.set(key,Experiment.RangePower.get(key)+mult); } } @@ -131,9 +134,9 @@ function RangeVote(ip,entries) let norm=Math.round(lerp(val,r0,r1,0,100)); if (val>=0) NewVote.set(id,norm); } - let OldVote=RangeVotes.get(ip); -// if (OldVote) AddToRangeResult(OldVote,-1); - RangeVotes.set(ip,NewVote); + let OldVote=Experiment.RangeVotes.get(ip); + if (OldVote) AddToRangeResult(OldVote,-1); + Experiment.RangeVotes.set(ip,NewVote); AddToRangeResult(NewVote,1); } @@ -141,22 +144,23 @@ function RangeVote(ip,entries) // POST /login gets urlencoded bodies app.post('/range_vote', urlencodedParser, function (req, res) { RangeVote(req.socket.remoteAddress,Object.entries(req.body)); - let str="Results from "+RangeVotes.size+" Voters:
"; + let str="Results from "+Experiment.RangeVotes.size+" Voters:
"; for (let c of Candidates) { let key=CanId(c); - if (RangePower.get(key)>0) str=str+c+': '+Math.round(RangeResult.get(key)/RangePower.get(key))+'%
'; + if (Experiment.RangePower.get(key)>0) str=str+c+': '+Math.round(Experiment.RangeResult.get(key)/Experiment.RangePower.get(key))+'% ('+Experiment.RangePower.get(key)+' Voters)
'; } + console.log(JSON.stringify(Experiment)); res.send(str); }) app.post('/plur_vote', urlencodedParser, function (req, res) { PlurVote(req.socket.remoteAddress,req.body.pick); - let str="Results:
"; + let str="Results from "+Experiment.PlurVotes.size+" Voters:
"; for (let c of Candidates) { let key=CanId(c); - if (PlurResult.get(key)>0) str=str+c+': '+Math.round(100.0*PlurResult.get(key)/PlurCount)+'%
'; + if (Experiment.PlurResult.get(key)>0) str=str+c+': '+Math.round(100.0*Experiment.PlurResult.get(key)/Experiment.PlurCount)+'%
'; } res.send(str); })