Gå til innhold

Anbefalte innlegg

NØTT 1

 

Du har syv esker i ulike størrelser. Du har 40 baller og skal plassere et ulikt (oddetall) antall baller i hver eske (1,3,5,7 osv). Alle ballene skal i eskene. Noen løsninger?

7747985[/snapback]

Siden du sier at størrelsen på eskene er ulike, så tipper jeg kanskje dette er løsningen:

 

1: 1

2: 3

3: 5

4: 7

5: 9

6: 11

7: 4

 

 

nr 7 er den største esken og nr 6 den minste. Også sette man eske nr 6 oppi eske nr 7.

Da blir resultatet slik, uten at man har brukt mer en 40 baller.:

1: 1

2: 3

3: 5

4: 7

5: 9

6: 11

7: 15

Lenke til kommentar
Videoannonse
Annonse
  • 5 uker senere...

Jøss, hvordan klarer du å håndtere så store datamengder? Lagde selv litt kode for dette, men etter at filene runder 100kb er det sirup.

 

Poster koden her, kansje dere ser noe som kan optimaliseres!

Public Function CalculateNext(ByVal strNumber As String) As String

   

    Dim blnDone As Boolean

    Dim lngCount As Long

    Dim lngCurrentPos As Long

    Dim strCurrentChar As String

   

    Do Until blnDone

       

        DoEvents

       

        lngCount = 1

        lngCurrentPos = lngCurrentPos + 1

        strCurrentChar = Mid(strNumber, lngCurrentPos, 1)

       

        Do Until (Not strCurrentChar = Mid(strNumber, lngCurrentPos + 1, 1))

            lngCurrentPos = lngCurrentPos + 1

            lngCount = lngCount + 1

        Loop

       

        CalculateNext = CalculateNext & lngCount & strCurrentChar

       

        If lngCurrentPos >= Len(strNumber) Then blnDone = True

       

    Loop

   

End Function

CalculateNext("1") = "11"

CalculateNext("11") = "21"

CalculateNext("21") = "1211"

Lenke til kommentar

- Do løkken kan byttes ut med en For løkke, eller en While løkke, da vil du slippe If setningen på slutten, men med en For løkke, slipper du lngCurrentPos

- Kutt ut DoEvents, den gjør ingen nytte, annet en å gjøre programmet tregere

- Dim strCurrentChar As String * 1, så blir det bare en byte

 

Offtopic: hvorfor i huleste granskauen bruker du hungarian notation?

Vel, "nytten" kan diskuteres et annet sted en her.

Lenke til kommentar

Ser visst ut som at denne karen har funnet en matematisk løsning:

D(t+1) =  (sigma(K=1,LOG(D(t)*10)-LOG(D(t)*10)%1,((D(t)-D(t)%10^(LOG(D(t))-

LOG(D(t))%1)+sigma(S=1,LOG(D(t))-LOG(D(t))%1,(((sigma(R=1,LOG(D(t)*10)

-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*

10%10^R)%10^(R+1)))/10)-(sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*

10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)

%10^(S-1))%10^S+1)%(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)

*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)-(

sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10

^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)%10^(S-1))%10^S+.5)*2*(D(t)

-D(t)%10^(S-1))%10^S))-(D(t)-D(t)%10^(LOG(D(t))-LOG(D(t))%1)+sigma(S=1,

LOG(D(t))-LOG(D(t))%1,(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)

*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)

-(sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%

10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)%10^(S-1))%10^S+1)%(((

sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%

10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)-(sigma(R=1,LOG(D(t)*

10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*

10-D(t)*10%10^R)%10^(R+1)))/10)%10^(S-1))%10^S+.5)*2*(D(t)-D(t)%10^(S

-1))%10^S))%10^(K-1))%10^K/10^(K-1)*100^(2*sigma(N=1,K,(((D(t)-D(t)%

10^(LOG(D(t))-LOG(D(t))%1)+sigma(S=1,LOG(D(t))-LOG(D(t))%1,(((sigma(R=1,

LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/10-

(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)-(sigma(R=1,LOG(D(t)*10)-LOG(D(t)*

10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%

10^(R+1)))/10)%10^(S-1))%10^S+1)%(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%

1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%

10^(R+1)))/10)-(sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)

*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)%10^(S-1))

%10^S+.5)*2*(D(t)-D(t)%10^(S-1))%10^S))-(D(t)-D(t)%10^(LOG(D(t))-LOG(D(t))

%1)+sigma(S=1,LOG(D(t))-LOG(D(t))%1,(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)

%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^

(R+1)))/10)-(sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%

10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)%10^(S-1))%10^

S+1)%(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^

(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)-(sigma(R=1,

LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/

10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)%10^(S-1))%10^S+.5)*2*(D(t)-D(t)%

10^(S-1))%10^S))%10^(N-1))%10^N+1)%(((D(t)-D(t)%10^(LOG(D(t))-LOG(D(t))%

1)+sigma(S=1,LOG(D(t))-LOG(D(t))%1,(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*

10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^

R)%10^(R+1)))/10)-(sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-

D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)%10^

(S-1))%10^S+1)%(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-

D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)-

(sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%

10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)%10^(S-1))%10^S+.5)*2*

(D(t)-D(t)%10^(S-1))%10^S))-(D(t)-D(t)%10^(LOG(D(t))-LOG(D(t))%1)+

sigma(S=1,LOG(D(t))-LOG(D(t))%1,(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10

)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^

R)%10^(R+1)))/10)-(sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*

10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/

10)%10^(S-1))%10^S+1)%(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,

ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%

10^(R+1)))/10)-(sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*

10-D(t)*10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))

/10)%10^(S-1))%10^S+.5)*2*(D(t)-D(t)%10^(S-1))%10^S))%10^(N-1))%10^

N+.5))))/100)+(sigma(K=1,LOG(D(t)*10)-LOG(D(t)*10)%1,100^(1+sigma(N=

1,K-1,2*((((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*

10%10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)-(

sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%

10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)%10^(N-1))%10^N/10^(N-

1)+1)%(((sigma(R=1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%

10^(R+1))%10^(R+2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)-(sigma(R=

1,LOG(D(t)*10)-LOG(D(t)*10)%1-1,ABS((D(t)*10-D(t)*10%10^(R+1))%10^(R+

2)/10-(D(t)*10-D(t)*10%10^R)%10^(R+1)))/10)%10^(N-1))%10^N/10^(N-1)+

.5)))))/10)

Lenke til kommentar

Det er ikke noe problem å håndtere store datamengder dersom man benytter Streams. Da unngår man å måtte oppbevare hele datamengden i minnet. Koden jeg benyttet ser slik ut:

Imports System.IO

 

Public Class MorrisSequence

 

    Public Event ProgressChanged(ByVal Sender As MorrisSequence, ByVal Value As Integer)

 

    ' Inn- og utdata

    Public Input As TextReader

    Public Output As TextWriter

 

    ' Hvorvidt prosessen er påskrudd

    Public Running As Boolean

 

    ' Steg mellom hver gang "ProgressChanged" kalles

    Public NotifyInterval As Integer = 100

 

    Public Sub New()

        ' Tom initialisering.

    End Sub

 

    Public Sub New(ByVal Input As TextReader, ByVal Output As TextWriter)

 

        ' Initialiserer verdier

        With Me

            .Input = Input

            .Output = Output

        End With

 

    End Sub

 

    Public Sub Close()

 

        ' Lukk begge klasser

        Input.Close()

        Output.Close()

 

    End Sub

 

    Public Sub Execute()

 

        Dim iChar As Integer, iPrev As Integer, iCount As Integer = 1, iStep As Integer

 

        ' Skru på prosessen automatisk

        Running = True

 

        ' Hent standardverdi

        iPrev = Input.Read

 

        ' Avslutt dersom inndataen er ugyldig

        If iPrev < 0 Then

            Exit Sub

        End If

 

        ' Gå gjennom alle karakterer

        Do While Running

 

            ' Teller antall steg

            iStep += 1

 

            ' Ser om vi må informere om progresjonen

            If (iStep Mod NotifyInterval) = 0 Then

                RaiseEvent ProgressChanged(Me, iStep)

            End If

 

            ' Hent den neste karakteren

            iChar = Input.Read

 

            ' Avslutt om vi er ferdige

            If iChar < 0 Then

                ' Skriv siste sekvens til utdatastrømmen

                Output.Write(iCount & ChrW(iPrev))

                Exit Do

            End If

 

            ' Se om den tidligere karakteren differerer

            If iPrev <> iChar Then

 

                ' Legg til i utdatastrøm

                Output.Write(iCount & ChrW(iPrev))

 

                ' Tilbakestill variabler

                iCount = 1

                iPrev = iChar

 

            Else

 

                ' Øk teller

                iCount += 1

 

            End If

 

        Loop

 

        ' Vi er ferdige

        Running = False

 

    End Sub

 

End Class

For enkeltheten skyld har jeg vedlagt hele prosjektet i denne posten. :)

MorrisSequence.zip

Lenke til kommentar
  • 3 måneder senere...

Har aldri skjønt det med bitwise operations eller hva det heter. Men leste litt om det nå, fordi jeg trengte det til noe jeg holdt på å lage, og fant ut at det var veldig enkelt når jeg først skjønnte hva det gikk ut på.

 

Også kom jeg på nøtta i først post i denne tråden, og lagde denne:

def lik(a, b, c, d):
   return not (a | b | c | d) ^ (a & b & c & d)

 

den er veldig lik jorn79 sin, men bruke ingen sammenligninger. :cool:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...