-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
252 lines (251 loc) · 16 KB
/
Copy pathindex.html
File metadata and controls
252 lines (251 loc) · 16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Valgsimulator</title>
<link rel="stylesheet" href="style.css">
<script type="text/javascript" src="defaults.js"></script>
<script type="text/javascript" src="utils.js"></script>
<script type="text/javascript" src="data2009.js"></script>
<script type="text/javascript" src="data2013.js"></script>
<script type="text/javascript" src="data2017.js"></script>
<script type="text/javascript" src="data2021.js"></script>
<script type="text/javascript" src="data2025.js"></script>
<script type="text/javascript" src="valg.js" defer></script>
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🗳️</text></svg>"/> <!-- e.g. https://favicons.joshuasoileau.com/ -->
</head>
<body>
<header>
<a href="."><h1>Valgsimulator 🗳️ 🇳🇴</h1></a>
<p>Hvordan påvirkes <a href="https://valgresultat.no">resultatet av Stortingsvalget</a> av endringer i <a href="https://lovdata.no/dokument/NL/lov/2023-06-16-62">valgsystemet</a>? <a href="https://github.com/hersle/valgsimulator">Åpen kildekode</a>.</p>
</header>
<article>
<section>
<fieldset>
<label title="Bruk offisielle stemmetall fra dette Stortingsvalget og alle regler som gjaldt i dette valgåret." >
<label for="election">Valg</label>
<select id="election" oninput="setElection();">
<option>2009</option>
<option>2013</option>
<option>2017</option>
<option>2021</option>
<option selected>2025</option>
</select>
<input type="button" value="↺" onclick="setElection();"/>
<a>ⓘ</a>
</label>
<label title="Antall distrikts- og utjevningsmandater som skal velges til Stortinget til sammen. Siden 2005 velges 169 mandater.">
<label for="totalseats">Mandater</label>
<input type="number" id="totalseats" value="169" min="0" step="1" oninput="update();" size="2" required/>
<a>ⓘ</a>
</label>
<label title="Relativ vekt mellom én kvadratkilometer og én innbygger i fordelingen av antall Stortingsmandater mellom valgdistriktene. Antall Stortingsmandater fordeles mellom distriktene med Saint-Laguës rene metode (fra 1,0). Fordelingen tar utgangspunkt i tallet "folketall + arealfaktor × areal/km²" for hvert valgdistrikt. Sett til 0 for å fordele mandater kun etter innbyggertall. Siden 2005 er arealfaktoren 1,8.">
<label for="areafactor">Arealfaktor</label>
<input type="number" id="areafactor" value="1.8" min="0" step="0.1" oninput="update();" size="2" required/>
<a>ⓘ</a>
</label>
<label title="Om et valgdistrikt tildeles færre mandater enn dette, vil et minimum antall plasser likevel reserveres for distriktet, og fordelingen av de gjenværende mandatene gjentas for de gjenværende distriktene inntil alle har fått minst dette antallet mandater. Endret fra 0 til 4 i 2025.">
<label for="minlocalseats">Minimum mandater per distrikt</label>
<input type="number" id="minlocalseats" value="0" min="0" step="1" oninput="update();" size="1" required/>
<a>ⓘ</a>
</label>
<label title="Antall mandater som omgjøres til utjevningsmandater fra hvert valgdistrikt etter at det samlede antallet Stortingsmandater er fordelt mellom valgdistriktene. Siden 2005 er det 1 utjevningsmandat per valgdistrikt.">
<label for="globalseatsperdistrict">Utjevningsmandater per distrikt</label>
<input type="number" id="globalseatsperdistrict" value="1" min="0" step="1" oninput="update();" size="1" required/>
<a>ⓘ</a>
</label>
<label title="Minste andel stemmer som et parti må få i et distrikt for å tildeles mandater der. I dag er det ingen slik grense.">
<label for="localthreshold">Lokal sperregrense</label>
<input type="number" id="localthreshold" value="0" min="0" max="100" step="0.1" oninput="update();" size="1" required/>
<label for="localthreshold">%</label>
<a>ⓘ</a>
</label>
<label title="Minste andel stemmer som et parti må få nasjonalt for å tildeles utjevningsmandater. Siden 1989 er grensen 4 %.">
<label for="globalthreshold">Nasjonal sperregrense</label>
<input type="number" id="globalthreshold" value="4" min="0" max="100" step="0.1" oninput="update();" size="1" required/>
<label for="globalthreshold">%</label>
<a>ⓘ</a>
</label>
<label title="I utgangspunktet gjelder den nasjonale sperregrensen kun utjevningsmandater. Dette kan skrus av, slik at partier som ikke når den nasjonale sperregrensen heller ikke tildeles distriktsmandater.">
<input type="checkbox" id="globalthresholdonlyleveling" oninput="update();"/>
<label for="globalthresholdonlyleveling">Nasjonal sperregrense gjelder kun utjevningsmandater</label>
<a>ⓘ</a>
</label>
<label title="La partier under sperregrensen likevel tildeles utjevningsmandater om de allerede har distriktsmandater. Dagens regler håndhever alltid sperregrensen.">
<input type="checkbox" id="exemptglobalthreshold" oninput="update();"/>
<label for="exemptglobalthreshold">Unnta partier med distriktsmandater fra sperregrensen for utjevningsmandater</label>
<a>ⓘ</a>
</label>
<label title="I utgangspunktet beregnes antall utjevningsmandater for hvert parti som forskjellen mellom antall mandater de får i en nasjonal fordeling av alle Stortingsmandatene og antallet distriktsmandater de har fått. Denne differansen kan godt være negativ. Etter dagens regler skal i så fall partiet likevel få beholde alle sine distriktsmandater, og det gjøres en ny beregning av utjevningsmandater uten dette partiets stemmer og mandater. Dette alternativet tillater i stedet et negativt antall utjevningsmandater, som i praksis innebærer at partiet må gi fra seg noen distriktsmandater. Dette er tilfellet i Sverige.">
<input type="checkbox" id="minzeroglobalseats" oninput="update();"/>
<label for="minzeroglobalseats">Krev minst 0 utjevningsmandater</label>
<a>ⓘ</a>
</label>
<label title="Hold partier som ikke stiller til valg i alle valgdistrikter utenfor fordelingen av utjevningsmandater. Deltakelse i alle distrikter ble et krav i 2025.">
<input type="checkbox" id="requireglobalrepresentation" oninput="update();"/>
<label for="requireglobalrepresentation">Krev deltakelse i alle distrikter for utjevningsmandater</label>
<a>ⓘ</a>
</label>
<label title="I hvert distrikt fordeles distrikts- og utjevningsmandater mellom partiene med en gitt metode. Én og én mandat tildeles partiet med størst poengsum inntil alle mandatene er oppbrukt. Sainte-Laguë gir poengsum v/(2s+1), der v er partiets stemmer og s er antall mandater de allerede har fått i distriktet. I modifisert versjon endres første deletall (når s = 0) fra 1 til 1,2 eller 1,4. D'Hondt gir poengsum v/(s+1). Hare/Hamilton gir poengsum v/V*S-s, hvor V og S er totalt antall stemmer og mandater i distriktet. Vinneren tar alt gir alle mandatene til partiet med flest stemmer. Endret fra D'Hondt til Sainte-Laguë (med første delingstall modifisert til 1,4) i 1953.">
<label for="method">Fordelingsmetode</label>
<select id="method" oninput="update();">
<option>Sainte-Laguë fra 1,4</option>
<option>Sainte-Laguë fra 1,2</option>
<option>Sainte-Laguë fra 1,0</option>
<option>D’Hondt</option>
<option>Hare/Hamilton</option>
<option>Vinneren tar alt</option>
</select>
<a>ⓘ</a>
</label>
<label title="Slå sammen innbyggertall, areal og stemmer for noen valgdistrikter. 19 fylker svarer nøyaktig til dagens valgdistrikter og innebærer ingen sammenslåing. 18 fylker slår Nord- og Sør-Trøndelag sammen til Trøndelag. 15 fylker slår også sammen Hordaland og Sogn og Fjordane til Vestland, Vest- og Øst-Agder til Agder og Oppland og Hedmark til Innlandet. 11 fylker slår også sammen Troms og Finnmark, Vestfold og Telemark, og Østfold, Akershus og Buskerud til Viken. Ett valgdistrikt slår alle distriktene sammen til ett nasjonalt valgdistrikt.">
<label for="mergedistricts">Samle distrikter til</label>
<select id="mergedistricts" oninput="update();">
<option selected>19 fylker (før 2018)</option>
<option>18 fylker (før 2020)</option>
<option>15 fylker (etter 2024)</option>
<option>11 fylker (før 2024)</option>
<option>1 valgdistrikt</option>
</select>
<a>ⓘ</a>
</label>
<label title="Gi et gitt antall ekstra stemmer til et gitt parti i et gitt valgdistrikt. Bruk et negativt tall for å fjerne stemmer. Prøv deg fram for å finne vippepunkt som utgjør forskjellen mellom ett mandat eller får partiet over sperregrensen, for eksempel.">
<label for="extravotes">Gi</label>
<input type="number" id="extravotes" value="0" step="1" size="5" oninput="update();"/>
<label for="extraparty">stemmer til</label>
<select id="extraparty" oninput="update();"></select>
<label for="extradistrict">i</label>
<select id="extradistrict" oninput="update();"></select>
<a>ⓘ</a>
</label>
<!--
<label title="Antall desimaler som vises i desimaltall. Påvirker ikke valgresultatet.">
<label for="decimals">Vis </label>
<input type="number" id="decimals" value="1" min="0" max="9" step="1" oninput="update();" size="1"/>
<label for="decimals">desimaler</label>
<a>ⓘ</a>
</label>
-->
<label title="Vis alle partier som ikke har fått noen mandater som ett parti med navnet ANDRE. Påvirker ikke valgresultatet.">
<input type="checkbox" id="groupotherparties" oninput="update();"/>
<label for="groupotherparties">Vis <strong>ANDRE</strong></label>
<a>ⓘ</a>
</label>
<!--
<label title="Vis bare samlet antall distriktsstemmer eller -mandater.">
<input type="checkbox" id="grouplocal" oninput="update();"/>
<label for="grouplocal">Samle distrikter</label>
</label>
-->
<label title="Liste over hvilke partier som kan inngå i koalisjon med hverandre. Vennlige partier separeres med pluss (+), og flere slike lister separeres med komma (,). Feltet blir rødt når det er ugyldig formatert. Påvirker ikke valgresultatet.">
<label for="friends">Samarbeidspartier</label>
<input type="text" id="friends" value="A+SP+SV, SV+MDG, H+FRP+V+KRF" oninput="update();" size="30"/>
<a>ⓘ</a>
</label>
</fieldset>
</section>
<h2 class="scroll">
<a id="distslink" onclick="showTab(0);" href="javascript:;">Distrikter</a>
<a id="voteslink" onclick="showTab(1);" href="javascript:;">Stemmer</a>
<a id="seatslink" onclick="showTab(2);" href="javascript:;">Mandater</a>
<a id="teamslink" onclick="showTab(3);" href="javascript:;">Partier</a>
<a id="calcslink" onclick="showTab(4);" href="javascript:;">Beregning</a>
</h2>
<div id="votestab">
<div class="scroll">
<table id="votes">
<thead></thead>
<tbody></tbody>
<tfoot></tfoot>
</table>
</div>
<section>
<p>Tabellen viser antall stemmer som hvert parti har fått i hvert valgdistrikt. En tom celle betyr at partiet ikke stilte til valg i distriktet.</p>
</section>
</div>
<div id="seatstab">
<div class="scroll">
<table id="seats">
<thead></thead>
<tbody></tbody>
<tfoot></tfoot>
</table>
</div>
<section>
<p>Tabellen viser antall mandater som er tildelt hvert parti i hvert valgdistrikt. En tom celle betyr at partiet ikke stilte til valg i distriktet eller ikke oppfyller kriteriene for å tildeles mandater der (f.eks. under sperregrensen). Merk at utjevningsmandatene er skilt fra valgdistriktene.</p>
</section>
</div>
<div id="teamstab">
<div class="scroll">
<table id="teams">
<thead></thead>
<tbody></tbody>
</table>
</div>
<section>
<p>Tabellen viser alle enkeltpartier og mulige koalisjoner av samarbeidsvillige partier, antall mandater som er innenfor (i posisjon) og utenfor (i opposisjon) koalisjonen, forskjellen mellom koalisjonens andel mandater og nasjonale stemmer, og gjennomsnittlig antall stemmer per mandat.</p>
</section>
</div>
<div id="diststab">
<div class="scroll">
<table id="dists">
<thead></thead>
<tbody></tbody>
</table>
</div>
<section>
<p>Tabellen viser folketall, areal og resulterende fordelingstall for hvert valgdistrikt, samt antall mandater og forskjellen mellom andelen mandater og innbyggere relativt til hele landet.</p>
</section>
</div>
<div id="calcstab">
<section>
<textarea id="log" rows="25" wrap="off" readonly></textarea>
<p>Loggen forklarer alle stegene i beregningen av valgresultatet.</p>
</section>
<div class="scroll">
<table id="stats">
<thead></thead>
<tbody></tbody>
</table>
</div>
<section>
<p>Tabellen viser størrelser som måler proporsjonaliteten til hele valget, som <a href="https://en.wikipedia.org/wiki/Gallagher_index">Gallaghers disproporsjonalitetsindeks (LSq)</a> og <a href="https://en.wikipedia.org/wiki/Loosemore%E2%80%93Hanby_index">Loosemore-Hanbys disproporsjonalitetsindeks (LH)</a>.</p>
</section>
</div>
<section>
<h2>Om valgsimulatoren</h2>
<p>Simulatoren regner ut partisammensetningen på Stortinget basert på gitte stemmetall og valgregler. Først fordeles Stortingsmandatene på valgdistriktene basert på deres folketall, areal og relevante regler. Så fordeles mandatene på partiene basert på stemmetallene og relevante regler. Fordelingene går gjennom en algoritme som følger valgloven og utvidelser av den med endrede regler. Det brukes offisielle stemmetall fra det aktuelle Stortingsvalget. Disse antas her å være uavhengige av regelendringer, men i virkeligheten er det sannsynlig at regelendringer påvirker taktisk stemmegivning i noen grad.</p>
<h2>Tips</h2>
<ul>
<li>Endring av valgår nullstiller alle alternativer til årets valglov.</li>
<li>Bruk piltastene for å gradvis endre verdien til valgt alternativ.</li>
<li>Trykk på ⓘ eller hold musen over alternativer for å vise forklaringer og flere tips.</li>
<li>Sortér tabeller ved å klikke i første rad eller kolonne.</li>
<li>Bytt mellom å vise antall og andeler stemmer ved å klikke på tallene i tabellene.</li>
<li>URLen inkluderer endringer og kan brukes til å dele en modifisert valgordning.</li>
<li>Endringer trer i kraft umiddelbart.</li>
</ul>
<h2>Kilder og nyttige lenker</h2>
<ul>
<li><a href="https://valgresultat.no/valg/2021/">Offisielle stemmetall og valgresultater (2009–)</a></li>
<li><a href="https://lovdata.no/dokument/NL/lov/2023-06-16-62">Valgloven (2024–)</a></li>
<li><a href="https://lovdata.no/dokument/NLO/lov/2002-06-28-57">Valgloven (2002–2024)</a></li>
<li><a href="https://lovdata.no/dokument/NLO/lov/1985-03-01-3">Valgloven (1985–2002)</a></li>
<li><a href="https://no.wikipedia.org/wiki/Historisk_mandatfordeling_på_fylker_ved_stortingsvalg">Uoffisielle innbyggertall og areal for valgdistriktene (–2017)</a></li>
<li><a href="https://www.regjeringen.no/no/dokumentarkiv/regjeringen-solberg/aktuelt-regjeringen-solberg/kmd/pressemeldinger/2020/fordeling-av-mandatene-ved-neste-stortingsvalg/id2699589/">Offisielle innbyggertall og areal for valgdistriktene (2021)</a></li>
<li><a href="https://www.regjeringen.no/no/aktuelt/fordeling-av-mandatene-for-stortingsvalget-i-2025/id3040582/">Offisielle innbyggertall og areal for valgdistriktene (2025)</a></li>
<li><a href="https://www.regjeringen.no/no/dokumenter/nou-2020-6/id2703131/">Utredning om ny valglov (NOU 2020: 6)</a></li>
<li><a href="https://www.valg.no/om-valg/valggjennomforing/valgsystemet-eva/">Dokumentasjon og kildekode for det offisielle valg-IT-systemet EVA</a></li>
<li><a href="https://lavinia.no/">Lavinia valgsimulator</a></li>
<li><a href="https://www.vg.no/spesial/2017/stortingsvalg/">VGs valgsimulator</a></li>
<li><a href="https://github.com/JanOleA/stlague">Jan Ole Åkerholms valgsimulator</a></li>
<li><a href="https://www.pollofpolls.no">Poll of polls</a></li>
</ul>
</section>
</article>
<footer>
<p>Utviklet av Herman Sletmoen. <a href="https://github.com/hersle/valgsimulator">Åpen kildekode</a>. <a href="https://github.com/hersle/valgsimulator/issues">Meld inn forslag, feil og problemer!</a></p>
</footer>
</body>
</html>