bittergubben

ytterligare en av de kränkta vita männen

Lottning till Sortitiondemokraternas folkparlament

with 3 comments

Jag är inte tillfreds med de alternativ som finns att rösta på, och det verkar vara fler jämställdister som inte heller är det. Skall man dra igång ett parti, då mer eller mindre behövs det en folkrörelse, det är inte något man gör som enskild privatperson. Särskilt inte om man är synnerligen introvert och tämligen solitär, inte har ordentlig finansiering, och tanken fortfarande är lite svävande. Men jag tänker pröva ändå.

Sortitiondemokraterna är ett parti som lottar fram ett folkparlament. Ingen meritvärdering görs. Folkparlamentet utser debattörer, och bestämmer hur partiet skall rösta vid votering i riksdagen. Omröstningarna i folkparlamentet är anonyma, så man vet inte hur enskilda parlamentariker har röstat. Parlamentarikerna bör inte debattera själva. Vem som helst i övrigt kan bli debattör, och folkparlamentet väljer vilka debattörer som är viktiga. Dessa debattörer, förutsatt att de inte är anonyma, har en privilegierad status i debatten, och om partiet väljs in i riksdagen så anställs de som politiska sekreterare, med uppgift att fortsätta debattera.

  • Genom statistisk representativitet står folkparlamentet för allmänintresset.

  • De anonyma omröstningarna gör att det blir svårt att utöva påtryckningar; det går inte för särintressen att belöna de som röstat ”rätt” eller bestraffa de som röstat ”fel” eftersom ingen vet vem som har röstat på vad.

  • Den åsiktskorridor som finns inom etablerade medier bygger på att särintressen kan reagera mot, och mobba dels de som uttrycker fel åsikter, och dels de medier och institutioner som erbjuder en plattform. Den mediala åsiktskorridorens filtrering försvinner inom Sortitiondemokraterna, det är folkparlamentet som direkt avgör vilka röster som är viktiga.

  • Istället för att partieliter bestämmer bakom lykta dörrar, eller på sin höjd på utskottsnivå, hur deras partier skall rösta i riksdagen – så som det ofta går till inom makthavande partier – så får man en öppen debatt, där folkparlamentarikerna bestämmer.

  • Den typiska väljaren är rationellt ignorant. Enskilda röster spelar egentligen inte någon roll, så man lägger måttligt med energi på att ompröva det som man tror på. Man diskuterar med och lyssnar till sådana som har liknande världsbild som en själv. Erfarenheten från deliberativa opinionsundersökningar och liknande visar att detta förändras när deras röster blir viktiga, folk anstränger sig när de ges ansvar.

  • Även i frånvaro av att bli invalda i riksdagen, skulle partiet utgöra en intressant debattplattform, som skulle kunna bidra till att nyansera det offentliga samtalet. Det skulle räcka med 2.6% för att få partibidrag så att partiet skulle ha råd att arvodera möten för ett litet folkparlament också inför nästa val. (I utgångsläget finns bara finansiering för att arvodera några möten för ett litet folkparlament).

Sortitiondemokraterna: som om ett deliberativt folk bestämde.

Nedan är kod för att generera möjliga personnummer från lotto/keno resultat.

#include <stdlib.h>
#include <stdio.h>


/*
Programmet använder lotto och keno till att generera ett antal möjliga 
personnummer. De vars nummer genererats, som är boende i Sverige och inte
har hemlig address, nomineras till riksdagen på partiets valsedel, i den 
ordning de genererades. I frånvaro av större finansiering, kommer bara de 
första 20 att utgöra det folkparlament som rankar debattörerna. 
*/


//MSVC++, adjust to your compiler
typedef unsigned __int32 ui32;


/*
Keno består av 20 nummer av 1-70, 
och lotto med tilläggsnummer består av 7+4 nummer av 1-35
Använd värden från Keno och Lotto dragningarna lördag 5te april (visas i TV4, Keno 17:55 och Lotto 19:55)
Kan göra copy-paste-replace från t.ex: http://www.lottoraden.se/lotto-resultat.php
*/
static const int kenorad[]= {2, 4, 6, 8, 10, 13, 16, 20, 21, 22, 23, 27, 38, 42, 44, 52, 60, 64, 65, 69};
static const int lotto1rad[]= {3, 7, 14, 16, 18, 26, 27, 15, 21, 22, 31};
static const int lotto2rad[]= {7, 14, 16, 17, 25, 26, 35, 1, 9, 21, 23};

static const int kenoNb= sizeof(kenorad)/sizeof(kenorad[0]);
static const int lotto1Nb= sizeof(lotto1rad)/sizeof(lotto1rad[0]);
static const int lotto2Nb= sizeof(lotto2rad)/sizeof(lotto2rad[0]);

static ui32 lottoKenoRadTillVärde(const int v[], int nb) {
  ui32 val= 0;
  for(int i=0; i<nb; ++i)
    val|= ui32(1)<<v[i];
  return val;
};


/*
Januari, 31 dagar
Februari, 28 dagar, 29 vid skottår
Mars, 31 dagar
April, 30 dagar
Maj, 31 dagar
Juni, 30 dagar
Juli, 31 dagar
Augusti, 31 dagar
September, 30 dagar
Oktober, 31 dagar
November, 30 dagar
December, 31 dagar

Ett år i den allmänna västerländska tideräkningen (gregorianska kalendern, 
som används i Sverige sedan 1753) är skottår om det är jämnt delbart med 4, 
utom vid sekelskiften (jämna 100 år); då är året endast skottår om det är 
jämnt delbart med 400. År 1700, 1800, 1900, 2100, 2200 och 2300 är alltså 
inte skottår (vilket de dock är i julianska kalendern), medan år 1600, 2000 
och 2400 är det.
*/
static const int månadslängdsTabell[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
static bool ärSkottår(int år) {
  return (år%4)==0 && ((år%100)!=0 || (år%400)==0);
};
static int månadslängd(int år, int månad) { return månadslängdsTabell[månad] + (månad==1 && ärSkottår(år)); };

static const int valår= 2014;
static const int startår= valår-60;
static const int slutår= valår-20;
static const int dagIndexTabellMax= (slutår-startår+1)*366;
static int dagIndexTillÅÅMMDD[dagIndexTabellMax];
static int dagIndexNb;

static void initRelativdagstabell() {
  int dagIndex= 0;
  for(int år=startår; år<=slutår; ++år) {
    for(int månad=0; månad<12; ++månad) {
      int ml= månadslängd(år,månad);
      for(int dag=0; dag<ml; ++dag) {
        if(dagIndex>=dagIndexTabellMax)
          exit(1);
        dagIndexTillÅÅMMDD[dagIndex++]= (år%100)*10000 + 100*(månad+1) + (dag+1);
      }
    }
  }
  dagIndexNb= dagIndex;
}


/*
En LCG (linear congruential generator) beräknar nästa värde som funktion av 
det föregående: X_{n+1} = (a*X_n + c) mod m

Provided that the offset c is nonzero, the LCG will have a full 
period for all seed values if and only if:
1) c and m are relatively prime,
2) a-1 is divisible by all prime factors of m,
3) a-1 is a multiple of 4 if m is a multiple of 4.
These three requirements are referred to as the Hull-Dobell Theorem.

När m kan skrivas på formen 2^k så uppfylls villkoren om:
a kan skrivas på formen 4k+1
c kan skrivas på formen 2k+1
*/

static ui32 LCG() {
  static int init= 1;
  static ui32 a, x, c;
  if(init) {
    init= 0;
    a= 4*lottoKenoRadTillVärde(kenorad,kenoNb)+1;
    c= 2*lottoKenoRadTillVärde(lotto1rad,lotto1Nb)+1;
    x= lottoKenoRadTillVärde(lotto2rad,lotto2Nb);
  }
  x= a*x+c;
  return x;
};

/* Wikipedia om Luhn-algoritmen:
För att beräkna kontrollsiffran är förfarandet likvärdigt, med skillnaden att man 
multiplicerar ömsom med 2 och ömsom med 1 (det vill säga att man börjar att 
multiplicera den sista siffran med 2, och inte med 1 som i fallet vid kontroll). 
Den erhållna summan dras därefter ifrån närmast större 10-tal, varvid 
kontrollsiffran erhålles.
För att beräkna kontrollsiffran för det niosiffriga personnumret 811218-987 
erhålles följande produkter:
8  1 1 2 1 8  9 8  7
*  2  1 2 1 2 1  2 1  2
-------------------------
^  ^ ^ ^ ^ ^  ^ ^  
16  1 2 2 2 8 18 8 14

Tvåsiffriga produkter splittras upp i ensiffriga tal. Siffrorna summeras därefter:
1+6+1+2+2+2+8+1+8+8+1+4 = 44

Kontrollsiffran erhålls genom att detta tal subtraheras från närmast högre tiotal.
50-44 = 6
Den avslutande kontrollsiffran blir således en sexa.
*/
static int kontrollsiffraLuhn(int värde) {
  int k= 0;
  int faktor= 2;
  while(värde) {
    int x= faktor*(värde%10);
    k+= (x%10)+(x/10);
    faktor^= (1^2);
    värde/= 10;
  }
  return (10-(k%10))%10;
};

int main(int argc, const char **argv) {
  if(kenoNb!=20 || lotto1Nb!=11 || lotto2Nb!=11)
    exit(2);
  for(int i=1; i<kenoNb; ++i) {
    if(kenorad[i]<=kenorad[i-1])
      exit(3);
  }
  for(int i=1; i<lotto1Nb; ++i) {
    if(i==7)
      continue;
    if(lotto1rad[i]<=lotto1rad[i-1])
      exit(4);
    if(lotto2rad[i]<=lotto2rad[i-1])
      exit(5);
  }

  initRelativdagstabell();
  FILE *file;
  if(fopen_s(&file, "pnummer.txt", "w"))
    exit(6);

  for(int i=0; i<300; ++i) {
    ui32 slumptal= LCG();
    int treSiffror= slumptal%1000;
    slumptal/= 1000;
    int ååmmdd= dagIndexTillÅÅMMDD[slumptal%dagIndexNb];
    fprintf(file, "%06d-%03d%1d\n", 
      ååmmdd, treSiffror, kontrollsiffraLuhn(ååmmdd*1000+treSiffror));
  };

  fclose(file);
  return 0;
};
Annonser

Written by bittergubben

4 april, 2014 den 12:42

3 svar

Subscribe to comments with RSS.

  1. […] Bittergubben: ”Lottning till Sortitiondemokraternas folkparlament” […]

    #mänförtrycker | WTF?

    5 april, 2014 at 11:44

  2. camelCase svider verkligen i mina ögon 😉

    Pelle

    5 april, 2014 at 18:04

  3. […] Uppföljning till föregående inlägg: https://bittergubben.wordpress.com/2014/04/04/lottning-till-sortitiondemokraternas-folkparlament/ […]


Vill du svara på en indenterad kommentar, svara på första kommentaren i den sekvensen.

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: