uppdateras med ojämna mellanrum

29 november 2009

Julskyltning och Paradisbadet

Fredagen slutade bra, fem minuter innan jag var tvungen att rusa till bilen för att hämta barnen på dagis löste jag ett jobbigt problem som jag hade kämpat med i två dagar. Lösningen? Jag hade hela tiden rätt kod, men jag hade länkat med fel lib. Lesson learned: Var konsistent med projektsökvägarna!
Det är skönt att sluta arbetsveckan med att göra avslut på något, må det vara en bugg, nyutveckling eller vad som helst.

Igår (lördag) var vi uppe med tuppen för att åka till Paradisbadet i Örnsköldsvik. Alice och Emil plaskade mest i barnpoolen, de är riktiga badkrukor, men Alice vågade i alla fall åka några vattenrutschkanor. Nästa gång tror jag hon vågar åka Magic Eye (enligt dem själva Sveriges längsta vattenrutschkana). Kvällen avslutades med julpyntning och TV.

Idag hägrar julskyltningen. Pust.

10 oktober 2009

Konstig känsla

Jag har en konstig magkänsla just nu. Det känns som att det kommer att hända något med huset ganska snart, eller att vi kommer att upptäcka något väldigt olustigt. T ex en rejäl vattenskada eller dyl. Jag känner på mig att det kommer att dyka upp något snart.

Våren och sommaren har passerat, nu är det bara att stålsätta sig för ännu en vinter. Om det är något jag hatar så är det vintern. Det enda positiva är julafton, resten klarar jag mig utan, och förresten, julafton går alldeles utmärkt att fira på en sandstrand och 25 graders värme också.

24 augusti 2009

En bekännelse


Jag har en bekännelse jag måste delge.

Det är svinkul att bygga LEGO. Emil säger vad vi ska bygga och jag bygger, han letar delar och provar kvalitén under och efter byggfasen.

Jag ska inte försöka styra hans egna intressen, men tänk om 10 år, då kanske vi bygger och programmerar Mindstorms ^_^

Idag byggde vi en traktor, Emil byggde vagnen.

9 augusti 2009

Nytt banrekord?


Nej, inte riktigt men näst sist, den som kom sist körde av banan. Han var dock den äldsta föraren.

Lady GaGu


Love you

8 augusti 2009

Dibeteras


Äntligen framme, GPS:n räddade oss igårkväll

28 juli 2009

Tre dagar kvar!

Nu är det bara tre dagar kvar till min efterlängtade semester. Fyra veckor av ledighet är precis vad jag behöver nu.

Vi har inga speciella planer för semestern, det enda som är spikat är ett besök till Mantorp Park där farsan ska rejsa litegrann. Sedan blir det ett obligatoriskt besök på Grönan och Skansen med ungarna, jag tror vi bor på hotell under vistelsen i Stockholm. Slutligen blir det en avkrok till Karlskrona.

Men utöver det är inget planerat. Tar dagen som den kommer, det blir bäst så.

26 juli 2009

Emil


Emil tittar på utsikten

Alice


Alice nya leende

25 juli 2009

Norra berget


Vi leker på Norra berget. Snart ska vi laga 1kvm lasagne o mätta alla magar.

Sådär! Nu kan jag skicka bilder från mobilen direkt till bloggen! :)

Det kanske blir mer uppdateringar nu!

Peace!

27 juni 2009

KABOOOM!

Vaknade av en jävla smäll. Trodde först att ett flygplan kraschlandat i kåken, rusar upp och känner en distinkt lukt av vitlök i köket. Öppnar kylen.

...

En enda röra, det är marinad över hela kylskåpet, det stinker vitlök och grillolja.

Min VacuVin Instant Marinator har IMPLODERAT och ställt till med en jävla röra av marinad i kylskåpet.

Rekommenderas ej.

Hädanefter blir det gamla hederliga plastpåsar för att marinera kött.

24 juni 2009

Invito i Sundsvall

Idag var det tredje gången gilt. Lunchen på Invito idag var droppen som fick bägaren att rinna över. En slaskig Lasagne a lá Invito. Lasagneplattorna var alldeles övergräddade och mjuka, resten var en enda sås. En lasagne ska ju vara fast i formen med ett lager av gyllenbränd ost.

Vi var idag ett sällskap på åtta personer varav fyra av oss beställde Lasagnen och de övriga beställde Lax med färskpotatis. Nu smakade jag aldrig själv på laxen, men enligt mina kollegor var den alldeles för genomstekt och potatisen var rå i mitten. Hur svårt ska det vara? Dessutom hade fyra av oss hunnit äta klart innan de övriga blev serverade.

Nej, aldrig mer Invito för min del.


När jag ändå har kommit igång med mina rants kan jag berätta om mina övriga besök på "Sundvalls finest".

Besök #1: Under mitt första besök blev jag serverad Panerad Disktrasa med tre (3) små rostade potatisar och en rosa smaklös sås, enligt menyn skulle disktrasan föreställa Skinkschnitzel.

Besök #2: Överstekt kycklingfilé med Polenta! Haha, Polenta har jag ätit förr och uppskattar denna anrättning, men Invitos kockar verkar ha missat den där lilla detaljen att steka majsgröten innan den serveras. På min tallrik var ett berg av majsgröt, inte helt olikt rotmos, och på detta berg en stackars kycklingfilé som blivit överstekt i en alldeles för varm ugn. Nu är jag ingen Polentaexpert, den kanske går att servera i både grötform eller stekt. Eller så var det Polenta a lá Invito.


Invito Sundsvall får härmed betyget: ICKE GODKÄND.

16 juni 2009

Hallå, sommaren!?


Vart är sommarvärmen?

14 april 2009

Sökes: Långa M3(?)-skruvar!

Fråga: Vart i Sundsvall finns det bästa sortimentet på skruvar?

Jag behöver några småskruvar som är 12mm längre än det jag har nu som är ca 25mm, med andra ord ett gäng 32 mm M3 (tror jag). Anledningen till dessa skruvar är för att fästa några eluttag i sitt fäste då en 12mm gipsskiva hamnat mellan själva vägguttaget och fästet i väggen.

13 april 2009

Brummbrumm

Startade hojen idag. Inga problem alls, två gnuggningar sedan hoppade Hondan igång. Körde en sväng ner till centrum och tillbaka, ljuvligt men samtidigt vemodigt då jag snart ska köra den till den nya ägaren.

Påsken har tillbringats i Orrberget med mycket god mat (som alltid när vi är där). Imorgon bär det av till Drakborgen så att barnen, hrrm, och undertecknad, får leka av sig litegrann.

9 april 2009

Påskägg

Här kommer ett litet påskägg till alla GH3 fans:

http://open.spotify.com/user/jonasgulle/playlist/7iera74SdhsqYGz3tqjfq1

Den är nästan komplett. Några låtar finns inte på Spotify tyvärr.

8 april 2009

Fyra cylindrar igen.

Ja just, jag har ju fullständigt glömt bort att lämna rapport angående vår bil som gick på tre cylindrar.

Den liksom gick till sig efter fem dagar.

Note to self: Aldrig tvätta bilskrället i Stora Borstarna igen.

Men! En hypotes är att det kan ha varit vakuum i tanken, precis innan jag körde in i biltvätten hade jag tankat bilen full. Vakuumet skulle förståss ha ställt till det för insprutningsberäkningarna... förmodar jag.

7 april 2009

Raubtier

Måste bara tipsa om en ny grupp som plötsligt fångat mitt intresse. Det är svenska Raubtier från Haparanda.

Först ut är "Kamphund":


Sedan "Det finns bara krig":

5 april 2009

Hojlös

Ja, sålde min hoj i helgen. Men den stannar inom familjen så det finns en möjlighet att jag kan låna den ibland. Därav det facila priset.

Det som nu hägrar är en täljstenskamin i vardagsrummet, nästa vinter ska jag inte vara lika beroende av varken elbolag eller luftvärmepumparna (som sjunger på sista versen).

Och lite goda nyheter, det ser ut som att jag kommer få tillbaka ca 10.000:- på min skatt, och Gabriella får tillbaka 9.000:-

19.000:- tillbaka är ju alltid välkommet. In på sparkontot! De kommer att behövas under semestern. Jag nämnde Legoland för barnen och sedan dess har de varit besatta av Legoland (vi kollade lite på youtube och LEGOs hemsida).

25 mars 2009

Reboot och F91

Äntligen frisk från magsjukan! Men, inget gott som har något ont med sig. Istället för magsjuka så blinkade värmepumparna F91 denna morgon. Kallt som fasen med andra ord, bara att dra upp elementen. Provade att starta om pumparna i morse (genom att dra ut proppen ett tag), men tji fick jag. Utöver det så är bilen fortfarande kaputt, går bara på tre cylindrar och jag börjar tro att det bara var en tillfällighet att det inträffade i samband med biltvätten.
Bilen går bra i början när den är kall, men så fort den blir varm så börjar den gå knackigt och till slut på tre cylindrar. Menmen tänkte jag, det sitter väl säkert en liten dator i bilen (det är ju elektronisk bränsleinsprutning) och den datorn behöver säkert en omboot då och då, så nu har jag kopplat bort batteriet en stund för att se om det mystiska problemet går över. Det KAN ju vara en Heisenbug.

Jag har jobbat för länge med programmering och datorer.

Edit: När jag blicker tillbaka på mitt förra inlägg så förstår jag varför pumparna plötsligt lagt av, hade jag inte skrivit något ont om pumparna i förra inlägget hade de gått som tåget nu. De har ju varit snälla ganska länge nu trots -15 grader kallt.

22 mars 2009

Tre cylindrar?

Jahapp, nu går bilen helt plötsligt på tre cylindrar och motorlampan blinkar elakt mot mig. Kan det bero på biltvätten tro? Tvättade idag bilen för 160:- på OKQ8 i stan, det var vaxning och underredestvätt. Kan det vara så illa att det kommit fukt nånstans i tändsystemet?

Detta är symptomen:

  • Motorlampan blinkar elakt.

  • Bilen går på tre (?) cylindrar.

  • Avgaserna luktar väldigt illa, som skit.


Hmm, nu när jag tänker på det så har nog detta hänt förut med samma bil. Vill minnas att jag bloggade om det då också (tittar tillbaka i arkivet). Mycket riktigt!

Först denna från 2008-04-27:
http://jogu.blogspot.com/2008/04/tre-cylindrar.html
... och denna från 2008-04-29:
http://jogu.blogspot.com/2008/04/fyra-cylindrar.html.

Jag tror aldrig jag bytte tändstiften när detta hände sist vilket borde betyda att dom ligger i garaget någonstans. Men förra gången verkar problemet ha gått till sig över tiden liksom, det enda som skiljer sig från sist är att nu blinkar motorlampan elakt vilket den inte gjorde sist. Jag minns heller inte att bilen luktade skit då.

Hmm, det kanske är ett annat problem ändå?

Väntar någon dag och ser om det går till sig, gör det inte det får jag helt enkelt kolla tändstiften.

Bilar och värmepumpar är ett jävla skit.

20 mars 2009

17 mars 2009

VAB

Emil har magsjuka, kräktes några gånger i söndags och en gång igår. Han var väldigt blek men idag har han varit pigg. Peppar peppar. Vi har byggt LEGO och skruvat ihop hans nya säng.
Äntligen börjar snön smälta, ser fram emot våren. Bästa årstiden näst efter sommaren!

Har löst ytterligare 10 Project Euler problem sedan förra inlägget, men på allmän begäran låter jag koden vara opublicerad.

4 mars 2009

Problem #28, Diagonal Sum of 1001x1001 spiral

Fem-minuters-lösning, hittade ett mönster som verkade stämma på pricken. Och det visade sig vara rätt. Länk till problemet här.
#!/usr/bin/env python
def spiral_sum(size):
a, d, sum, i = 2, 5, 0, 1
while i < (size**2) + 1:
d -= 1
if d == 0:
a, d = a + 2, 4
sum, i = sum + i, a + i
return sum

print "Spiral sum of 1001x1001 is", spiral_sum(1001)
För var fjärde iteration i spiralen ökar vi a med två och summerar de fyra hörnen och fortsätter tills vi summerat de båda diagonalerna.

28 februari 2009

Problem #35, Circular primes below 1000000

I problem 35 är det åter igen primtal som ska itereras och undersökas:

The number, 197, is called a circular prime because all rotations of the digits: 197, 971, and 719, are themselves prime.

There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97.

How many circular primes are there below one million?
Min ganska naiva lösning tar ca 43 sekunder på min MacBook.
#!/usr/bin/env python
from math import sqrt

max = 10**6

def is_prime(n):
if n == 1: return False
if n == 2: return True
if n & 1 == 0: return False
for i in range(2, int(sqrt(n)) + 1):
if n % i == 0:
return False;
return True;

def num_digits(n):
d = 0
while n > 0:
n, d = n / 10, d + 1
return d

def next_prime():
n = 1
while True:
if is_prime(n):
yield n
n = n + 1

def rotate(n):
r, n = n % 10, n / 10
return n + r * 10 ** num_digits(n)

primes = []
for n in next_prime():
if n > max: break
primes.append(n)

num_circular = 0
for p in primes:
def test_circular(n):
for i in range(0, num_digits(n)):
if not is_prime(n):
return False
n = rotate(n)
return True
if test_circular(p):
num_circular += 1

print "There are", num_circular, "primes below", max
Nej, nu är det dags för middag. Specklindad kycklingfilé med rotsaksgratäng!

Fotnot: inte späck, utan Speck!

PIIIIIIIP!

Vi hade en mysig hemmakväll igår. TV4 fick stå för tvivelaktig underhållning i form av Let's Dance och "Hjälp!". Men kvällen räddades av en rejäl tallrik Antipasto och ett glas rödvin. Alice blev lite trött framåt kvällen så Gabriella lade sig bredvid henne och somnade själv så sött. Så jag var kvar själv med levande ljus i gillestugan, det var bara skit på teven, men när jag zappade runt hittade jag radiokanaler, P1 körde en repris på Vetenskapsmagasinet som jag började lyssna på.

Det handlade om lök och varför man blir tårögd när man hackar lök. Visste ni förresten att ju mer jävlig löken är, dvs ju mer tårögd man blir, desto nyttigare är den. Dessutom finns det ca 13 ämnen i löken som motverkar olika former av cancer. Själva ämnet man blir tårögd av är en mild form av svavelsyra...

Ja, som ni hör var det ett ganska tråkigt ämne igår. Jag somnade där i soffan med en filt över mig.

Sedan börjar infernot.

Jag börjar drömma. Jag och en kollega befinner oss på jobbet, det är ett ihärdigt oljud, det piper så det gör ont i öronen. Vi förstår inte vad som är fel. Det slutar med att vi ringer han som är ansvarig för driften av byggnaden, vi får bara ett svävande svar att larmet håller på att testas. Jag och kollegan blir nästan galen av oljudet, det slutar med att jag börjar plocka isär larmet (själva enheten där man knappar sin kod), och där hittar jag ett 9-voltsbatteri som jag kopplar ur.

Ahh, tystnad!

I alla fall en liten stund.

Sedan rätt vad det är, befinner vi oss på våning 2 och pipet är tillbaka! Jag springer till larmcentralen och försöker med alla medel få tyst på ljudet, men det slutar inte. Det ihärdiga pipet fortsätter och det börjar värka i öronen.

Plötsligt vaknar jag och är glad att jag bara hade en mardröm, pipet är fortfarande i mina öron och jag ligger några sekunder i hopp om att det ska försvinna. Men det försvinner inte! Jag hoppar upp ur soffan och tror att jag:

a) Fått tinnitus, eller:
b) Blivit galen.

Tankarna flyger genom mitt huvud och jag springer upp, i tron om att det brinner någonstans. "Shit det brinner!! Det måste vara brandvarnaren!" tänker jag. Väl uppe på övervåningen känner jag varken röklukt eller ser någon eld. Men pipet är fortfarande kvar och lika ihärdigt som i drömmen. Under detta ögonblick kommer jag på att vi inte ens har någon brandvarnare (note to self: Skaffa brandvarnare!).

Men jag erinrar mig att då Emil råkat öppna frysen en gång så började den pipa då temperaturen steg. Jag rusade in i köket och kontrollerade både kyl och frys, men de var ordentligt stängda. Som två kassaskåp.

Jag är fortfarande i chock från drömmen, men kan ända höra att pipet har något lägre volym på övervåningen.
Med denna upptäckt rusar jag ner i tvättstugan och kollar tvättmaskinen (man vet ju aldrig), men den var inte på och stod tyst och gapade efter ytterligare en smutstvätt.

DÅ ramlar femöringen ner. Jag hade ju tidigare lyssnat på P1, och uppenbarligen sänder dom inte på natten, eller jo, de sänder ut ett infernalistiskt ljud i form av ett ihärdigt PIIIP!

Jag slår av TV:n (som ju såg avstängd ut eftersom bilden var svart). Pipet försvinner!

Jonas - P1: 1 - 0

Stopp i avloppet för sista gången.


Då var det stopp i avloppet i köket igen. Det är inte första gången det händer, men jag tror det är sista gången.

För det första måste det vara något generalfel med avloppet, för det KAN inte bli stopp så här ofta. Nu är jag ingen expert på ämnet, men något måste vara fel när det blir stopp ca en gång per kvartal.
Jag tror att den tidigare ägaren, (vila i frid), också hade problem då det fanns en rensanordning i garaget som man kopplar till högtryckstvätten.
För att ytterligare späda på eländet så har det liksom droppat vatten runt en inspektionslucka som sitter på det lodräta avloppsröret i väggen, så isoleringen är blöt.

På måndag ringer jag försäkringsbolaget.

Vi ska se om jag kan lyckas lösa proppen med kaustiksoda så att vi kan köra diskmaskinen.

Lördagen kunde inte börja bättre!

PS. Bilden har jag lånat från Karlstads kommun

25 februari 2009

Tisdag

Jobbat tills nu med tre hotfixes. En stridsvagn i Afghanistan hade visst bekymmer.
Har inte träffat barnen på två dagar. Men imorrn ska vi minsann hitta på något, hoppas att det är skottat på skridsoplanen!

24 februari 2009

Måndag

Var på Casinot ikväll och såg Henrik Fexeus bli intervjuad av Ulf Elfving. Mycket intressant! För er som inte sett Hjärnstorm på SVT kan jag varmt rekommendera det. Måste läsa hans böcker och sätta mig in mer i ämnet känner jag.

I inträdet ingick även varmrätt och 60kr i spelmarker att spela för.

En bra start på veckan.

Favorit i repris

21 februari 2009

Problem #206, Concealed Square

Find the unique positive integer whose square has the form 1_2_3_4_5_6_7_8_9_0,
where each “_” is a single digit.
Det tog bara 7454 iterationer att brute forcea denna.
#!/usr/bin/env python
from math import sqrt

def match(a):
i = 10
while (a > 0):
a, i = a / 100, i - 1
if a % 10 != i:
return False
return True

n = int(sqrt(1929394959697989999)) + 1

while not match(n * n):
n = n - 1

print "Answer is", n
Oj, nu har melodifestivalen börjat. Ska vara lite social ett tag.

19 februari 2009

Problem #13

Problem #13 innehåller en lång lista av stora tal som ska summeras, återigen handlar det om stora tal och ja, jag är lat och kör med Python på denna ^^
Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.
#!/usr/bin/env python
from __future__ import with_statement

def num_digits(a):
i = 0
while a > 0:
a, i = a / 10, i + 1
return i

with open("euler13.txt") as f:
a = 0
for line in f:
a = a + int(line)
print "Answer is", (a / 10**(num_digits(a) - 10))
En mer kreativ lösning skulle vara att endast addera de första 12 siffrorna från varje rad istället eftersom de efterföljande inte kan påverka resultatet vi är ute efter (dvs, de tio första siffrorna).

Problem #48

The series, 1^(1) + 2^(2) + 3^(3) + ... + 10^(10) = 10405071317.

Find the last ten digits of the series, 1^(1) + 2^(2) + 3^(3) + ... + 1000^(1000).

Nästan en repetion på problem 25 och 20. Här är min lösning, det fick bli Python igen för att slippa dra in ett bigint lib.
#!/usr/bin/env python
from sys import setrecursionlimit
setrecursionlimit(1002)

def f(n):
if not n: return 0
else: return n**n + f(n - 1)

print "Answer is %d" % (f(1000) % 10**10)
Här hittar du problemet.

Problem #25

What is the first term in the Fibonacci sequence to contain 1000 digits?
En till utmaning där vi måste hantera stora heltal.
#!/usr/bin/env python
def fibonacci():
a, b, i = 0, 1, 0
while 1:
yield a, i
a, b, i = b, a + b, i + 1

for x, i in fibonacci():
if x >= 10**(1000 - 1):
print "Answer is %d" % i
break;
Bra användningsområde för yield, det blir så lättläst kod.

Problem #20

n! means n × (n − 1) × ... × 3 × 2 × 1

Find the sum of the digits in the number 100!

Ytterligare en utmaning där det handlar om stora tal. I Python behöver man inte anstränga sig särskilt mycket ^^ (länk till problemet här)
#!/usr/bin/env python

def factorial(n):
if n == 0: return 1
else: return n * factorial(n - 1)

x = factorial(100)
a = 0
while x > 0:
a += x % 10;
x /= 10

print "Answer is %d" % a
Nästa blir problem 25.

18 februari 2009

Problem #16

What is the sum of the digits of the number 2^1000?
Här fick det bli en riktig snabblösning, Python hanterar stora tal utan att jag behöver tänka på vilken datatyp som gäller. En mer elegant lösning skulle vara att göra en egen binär till decimal snurra och addera sifforna under tiden talet byter talbas.
#!/usr/bin/env python

a = 2**1000
sum = 0

while a > 0:
sum += a % 10
a /= 10

print "Answer is %d" % sum

Problem #9

Den här var rolig, jag tog hjälp av denna Wiki-artikel ang. Pythagorean triplets för att generera alla möjliga triplets. Länk till problemet här.
#include <iostream>

template <typename T>
T triplet_sum(T k, T m, T n, T &product)
{
T a = k * (2 * m * n);
T b = k * ((m * m) - (n * n));
T c = k * ((m * m) + (n * n));
product = a * b * c;
return a + b + c;
}

int problem9()
{
int p;
for (int k = 1; k < 100; ++k)
for (int n = 1; n < 100; ++n)
for (int m = n + 1; m < 100; ++m)
if (triplet_sum(k, m, n, p) == 1000)
return p;
}

int main(int argc, char *argv[])
{
std::cout << "Answer is " << problem9() << std::endl;
return 0;
}

Nej, dags för kvällsfika. Gabriellas muffins och O'boy!

16 februari 2009

Problem #10

Calculate the sum of all the primes below two million.

Inte så elegant lösning, transportsträcka.
#include <iostream>
#include <cmath>

template <typename T>
inline bool is_prime(T p)
{
if (p == 1)
return false;

if (p == 2)
return true;

if (!(p & 1))
return false;

for (T i = 2; i < sqrt(p) + 1; ++i)
if (!(p % i))
return false;
return true;
}

int main(int argc, char *argv[])
{
uint64_t prime_sum = 0;
for (uint64_t i = 0; i < 2000000; ++i)
if (is_prime(i))
prime_sum += i;
std::cout << "Answer is " << prime_sum << std::endl;
return 0;
}

Problem #14

Här kommer min lösning till problem 14. Här stötte jag på problem då mina 32-bit int's inte räckte till på min plattform. Därav uint64_t, då talet växte till ganska stora tal (dvs större än 4294967296).
#include <iostream>
#include <utility>

template <typename T>
inline T next_seq(T n)
{
return n & 1 ? (n * 3) + 1 : n / 2;
}

template <typename T>
inline T chain_length(T n)
{
T i;
for (i = 1; n != 1; ++i)
n = next_seq(n);
return i;
}

int main(int argc, char *argv[])
{
std::pair<int64_t, uint64_t> chain_pair;
for (uint64_t i = 2; i < 1000000; ++i)
{
uint64_t len = chain_length(i);
if (len > chain_pair.first)
chain_pair = std::make_pair(len, i);
}

std::cout << "Answer is "
<< chain_pair.first
<< " for n = "
<< chain_pair.second
<< std::endl;

return 0;
}

Det finns en ganska bra optimering att göra in chain_length() genom att ha en hashtabell med n som nyckel och längden som värde för att inte göra onödigt jobb. Men med brute force på min MacBook går det <1s så det känns ganska onödigt.

Godnatt! Snart dags för en ny arbetsvecka.

14 februari 2009

Unix timestamp 1234567890

... har precis inträffat! Det är ett stort ögonblick. :D

12 februari 2009

Problem #8

Find the greatest product of five consecutive digits in the 1000-digit number.

Nästan för enkel:
#include <iostream>

char nums[] = {
"73167176531330624919225119674426574742355349194934"
"96983520312774506326239578318016984801869478851843"
"85861560789112949495459501737958331952853208805511"
"12540698747158523863050715693290963295227443043557"
"66896648950445244523161731856403098711121722383113"
"62229893423380308135336276614282806444486645238749"
"30358907296290491560440772390713810515859307960866"
"70172427121883998797908792274921901699720888093776"
"65727333001053367881220235421809751254540594752243"
"52584907711670556013604839586446706324415722155397"
"53697817977846174064955149290862569321978468622482"
"83972241375657056057490261407972968652414535100474"
"82166370484403199890008895243450658541227588666881"
"16427171479924442928230863465674813919123162824586"
"17866458359124566529476545682848912883142607690042"
"24219022671055626321111109370544217506941658960408"
"07198403850962455444362981230987879927244284909188"
"84580156166097919133875499200524063689912560717606"
"05886116467109405077541002256983155200055935729725"
"71636269561882670428252483600823257530420752963450"
};

int main(int argc, char *argv[])
{
for (size_t i = 0; i < sizeof(nums); ++i)
nums[i] -= '0'; // Just convenience

int largest_product = 0;
for (size_t i = 0; i < sizeof(nums) - 5; ++i)
{
int p = nums[i]*nums[i+1]*nums[i+2]*nums[i+3]*nums[i+4];
largest_product = std::max(p, largest_product);
}

std::cout << "Answer is " << largest_product << std::endl;
return 0;
}

Problem 7: Find the 10001st prime.

Problem #7 var lite tråkigt. Min is_prime() är inte optimal direkt. Följande fakta borde ha implementerats också:

  • 1 är inte ett primtal.

  • Alla primtal utom 2 är udda.

  • Givet n kan bara ha en primtalsfaktor större än sqrt(n).

Min lösning:
#include <iostream>

template <typename T>
inline bool is_prime(T p)
{
for (T i = 2; i < p; ++i)
if (!(p % i))
return false;
return true;
}

int main(int argc, char *argv[])
{
int n = 10001;
for (int pnum = 0, i = 2;; ++i)
{
if (is_prime(i))
{
pnum++;
if (pnum == n)
{
std::cout << "Answer is " << i << std::endl;
return 0;
}
}
}
}
Godnatt!

Problem #6

Hade redan öppnat sidan för problem #6 i browsern...
#include <iostream>

template <typename T>
T sum_square(T n)
{
T result = 0;
for (T i = 1; i <= n; ++i)
result += i * i;
return result;
}

template <typename T>
T square_sum(T n)
{
T result = 0;
for (T i = 1; i <= n; ++i)
result += i;
return result * result;
}

int main(int argc, char *argv[])
{
int n = 100;
std::cout << "Answer is "
<< square_sum(n) - sum_square(n)
<< std::endl;
return 0;
}

Nej, nu stänger jag av datorn för ikväll!

Problem #4

Okej, vi tar problem #4 också. Här är utmaningen att hitta det största talet som är ett palindrom genom produkten av två heltal på minst tre siffror.
#include <iostream>

template <typename T>
bool is_palindrome(T candidate)
{
T n = candidate, rev = 0;
while (n > 0)
{
rev = rev * 10 + n % 10;
n /= 10;
}
return candidate == rev;
}

int main(int argc, char *argv[])
{
int largest_palindrome = 0, cx, cy;
int max = 1000, min = 100;
for (int x = min; x < max; ++x)
{
for (int y = min; y < max; ++y)
{
if (is_palindrome(x * y))
{
int product = x * y;
if (product > largest_palindrome)
{
cx = x; cy = y;
largest_palindrome = product;
}
}
}
}

std::cout << "Answer is "
<< largest_palindrome
<< " (" << cx << " * " << cy << ")"
<< std::endl;
return 0;
}

Godnatt (på riktigt)!

11 februari 2009

Problem #3

Och här en quick'n'dirty lösning till problem #3. Här kom primtalsfaktoriseringen till användning.
#include <iostream>
#include <cmath>

template <typename T>
bool is_prime(T p)
{
for (T i = 2; i < (p / 2.0); ++i)
if (fmod(p, i) == 0.0)
return false;
return true;
}

template <typename T>
T trial_division_prime_only(T n)
{
T max = sqrt(n), result = 0.0;
for (T i = 2; i <= max; ++i)
if (fmod(n, i) == 0.0 && is_prime(i))
result = i;
return result;
}

int main(int argc, char *argv[])
{
long double n = 600851475143;
std::cout << "Answer is " << trial_division_prime_only(n) << std::endl;
return 0;
}

Godnatt!

Problem #5

En möjlig lösning till problem #5. Den här snurran tar någon sekund att beta genom på min maskin, men det går att gena genom primtalsfaktorisering fick jag lära mig.

#include <iostream>

bool f(int n)
{
for (int i = 1; i <= 20; ++i)
if (n % i)
return false;
return true;
}

int main(int argc, char *argv[])
{
int n = 1;
while (!f(n))
++n;

std::cout << "Answer is " << n << std::endl;
return 0;
}

Problem #2

Och här kommer lösning till problem #2:
#include <iostream>

int main(int argc, char *argv[])
{
int sum = 0;
for (int t, c = 2, p = 1; sum < 4000000; )
{
if (!(c & 1))
sum += c;
t = c; c += p; p = t;
}

std::cout << "Answer is " << sum << std::endl;

return 0;
}

Gjorde den rekursiv först; men stacken tog lite för mycket stryk :P

Nya tidsfördriv, Project Euler

Har hittat ett nytt tidsfördriv. Project Euler.
Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.

Löste igår tre av 231 problem, svårighetsgraden ökar ganska snabbt, så det kommer bli en otroligt lärorik resa.

Här min lösning på Problem #1:

#include <iostream>

int f(int n)
{
if (!n)
return 0;
else
return (!(n % 3) || !(n % 5)) ? n + f(n - 1) : 0 + f(n - 1);
}

int main(int argc, char *argv[])
{
int n = 1000 - 1;
std::cout << "Answer is " << f(n) << std::endl;
return 0;
}

Känner jag mig själv rätt kommer många problem lösas av hård brute force ;)

25 januari 2009

Skitmånad


Fyfan vilken skitmånad. Nu är det tredje veckan jag är sjuk. Det började lite lätt med 38-40 graders feber i en vecka, efter det - när jag trodde jag skulle bli frisk - bröt en sjujävla förkylning ut istället, fem dagar med rinnsnuva och huvudvärk och den har fortfarande inte gått över.

Jag hatar vintern.

Jobbade förra veckan när jag egentligen borde varit hemma istället. Och för att toppa denna skitmånad är det 21.000:- i räkningar. Så det blir en riktigt snål februari.
Hade jag vetat att GodEl tar ut betalning i förskott hade jag inte bytt till dem. Okej om det hade varit under sommarhalvåret, men december/januari är den månad då det går som mest el. Jaja, enough ranting.

Jag har gett upp hoppet om att någonsin bli frisk igen, jag måste ha dragit på mig en zigenarbesvärjelse eller dylikt.

6 januari 2009

Dagens middagstips!

Trettondagens middagstips:

3 januari 2009

Årets kallaste dag

Kallt som tusan idag. Och när det är som mest kallast lägger dom av, värmepumparna alltså. Felkod F11 avbyttes av F91 efter en hård reboot (dvs, drog ut proppen och satte tillbaka den).

Längtar till den dagen då jag köper en vedeldad kamin, då finns det ingen elektronik som kan strejka.

I övrigt blir det en lugn lördag, planerar att se lite elitseriehockey på Canal Plus Sport som Telia bjuder på januari ut. Tyvärr är det inte alla sportkanaler så jag får se Frölunda - Linköping.
Sedan 23:00 är det Dakar rallyt på Eurosport. Ett rally som inte längre har något med Dakar att göra. Då arrangörerna inte kunde garantera säkerheten i Afrika går rallyt nu i mestadels Argentina och en sväng i Chile. Men det ska bli otroligt intressant att följa. Dakar är alltid vinterns bästa följetång.

Gabriella och barnen bakar kanelbullar. Gott!

Bloggarkiv

Om mig

Sundsvall, Sweden