måndag 22 juni 2009

Ett lite sent inlägg i äktenskapslagsdebatten

Läste just ett blogginlägg om den nya äktenskapslagen. Följande citat fick mig att reagera:
Det är viktigt att framhålla att endast de präster som vill ska viga homosexuella par. Lika lite som staten kan gå in och tvinga en företrädare för ett religiöst samfund att viga homosexuella par, mot dennes vilja, kan jag tänka mig att de samkönade par som önskar gifta sig vill vigas av någon som anser att deras kärlek går emot den kristna tron.
Vad enskilda kristna homosexuella vill att deras präst tror på kan jag bara spekulera om, den biten bekommer mig inte. Det jag inte tycker är okej här är att lagstadga rätten för vigselförrättare att diskriminera homosexuella. I sak är det likvärdigt med att ge vigselförrättare rätten att förvägra mörkhyade vigsel.
Som vanligt har jag ingen respekt för personlig tro här. Man har såklart rätt att tro på precis vad man vill, men när det kommer till att vilja implementera sin tro bör man behandlas precis som alla andra, troende som icketroende. Samhällets rättesnören i stort bör alltid komma först. Vigselförrättare som kategoriskt vägrar viga par baserat på kön, religion, sexuell läggning eller etnicitet bör omedelbums förlora sin rätt att förrätta vigslar och ställas inför rätta för diskrimineringsbrott.
Avslutningsvis vill jag passa på att ställa några frågor: Blev det såhär? Var det den här lagen som röstades igenom? Får man (fortfarande) lov att diskriminera homosexuella par som vill gifta sig?

fredag 12 juni 2009

Boilerplate-kod, urk.

Försöker skita ur mig ett bevis på en algoritms optimalitet i algoritmerkursen. Som en del i beviset skriver jag om vår algoritm med matematisk notation. Jag önskar mig ibland en kompilator för ren matematik.

Jag menar jämför den matematiska definitionen
a(R,{}) = |R|
a(R,L) = { a (R ⋃ {e}, L ∖ {l}) , if ∀ek ∈ R. ek > s
| a ((R ∖ {ek}) ⋃ {e}, L ∖ {l}) , if ∃ek ∈ R. ek ≤ s
where l = (s,e) = an elem in L such that ∀(sk,ek)∈L. s ≤ sk
med vår klumpiga pseudokod:
type Time = Int            // for example seconds from the start of the day.
type Lecture = (Time,Time) // (Starttime, Endtime)
type Room = list

int classrooms(list lectures){
sortByStarttime(lectures) //O(n log n)

rooms = [] // list of endtimes in rooms

foreach l in lectures {
added = False
// r = endtime of the last "added" lecture to this room
foreach r in rooms{
if (l.startTime > r){
// replace the room r's endtime with new
// endtime. O(1) since in the middle of traversal
r = l.endTime
added = True
break;
}
}
if not added {
// add a new room with endtime = l.endTime to rooms
rooms.add(l.endTime);
}
}
return length(rooms);
}