Finne et set som samsvarer med kravene (Python)

Her kan du stille spørsmål vedrørende problemer og oppgaver i matematikk på høyskolenivå. Alle som har kunnskapen er velkommen med et svar. Men, ikke forvent at admin i matematikk.net er spesielt aktive her.

Moderators: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

Post Reply
pi-ra
Dirichlet
Dirichlet
Posts: 173
Joined: 15/11-2014 02:18

sets2, python.PNG
sets2, python.PNG (46 KiB) Viewed 2125 times
Har skrevet en kode som ikke gir noen feilmeldinger, men som fortsatt ikke gir et set som oppfyller kravene:

Code: Select all

#coding=utf-8
import random
import math

def sjekk(t):
    X1 = t
    X = set([x for x in X1 if x>0])
    A = set([x%2 for x in X])
    B = set([math.pow(y,2) for y in X ])
    C = set([math.pow(z, 0.5) for z in X.intersection(B)])
    D = set([math.pow(w, 2) for w in C])

    if len(X)>0 and len(X) in X and len(A) not in X and sum(X) in B and  sum(X) and sum(B) not in X and sum(C) in X or sum(D) in X:
        print "Vårt originale sett X er","\t\t ", X1
    else:
        print "Oppfyller ikke kravene"

def guess():
    b = 100
    genSet = random.sample( range(2,b), 6 )
    t = set(genSet)
    print "Vårt tilfeldig genererte set er: ", t
    return sjekk(t)


counter=0
while not guess():
    print counter
    counter+=1
print counter
Er klar over at jeg i guess()-funksjonen har skrevet genSet = random.sample( range(2,b), 6 ) og dermed også forhåndsbestemt hvor lang settet skal være (noe man ikke skal), men dette er bare i første omgang imens jeg prøver å få programmet til å fungere i det hele tatt.
Jeg antar jeg kan ta i bruk en random-funksjon som genererer et tilfeldig tall og sette det inn for 6 for å angi lengden på settet tilfeldig? Men så er det nye spørsmålet i hvilken range disse tilfeldige tallene skal genereres i da det ikke er oppgitt noen øvre grense i oppgaven...

Her er noen hint gitt med oppgaven. Kan hende jeg har gått glipp av noe som står der:
sets2hint1, python.PNG
sets2hint1, python.PNG (42.66 KiB) Viewed 2125 times
sets2hint2, python.PNG
sets2hint2, python.PNG (97.77 KiB) Viewed 2125 times
Har fulgt det første hintet og prøvd å regne meg fram til et sett som oppfyller kravene for hånd og kom fram til et set:
X = set([6, 36, 31, 33, 11, 4])

...da får vi at
A = set([1])
B = set([36, 1296, 961, 1089, 121, 16])
C = set([6])
D = set([36])

Noen som ser hva som kan gjøres?
pi-ra
Dirichlet
Dirichlet
Posts: 173
Joined: 15/11-2014 02:18

Det ser ut som det er krav nr vi. det er problemer med. Noen som ser hvorfor? :?
pi-ra
Dirichlet
Dirichlet
Posts: 173
Joined: 15/11-2014 02:18

Oppgaven er løst.
Gustav
Tyrann
Tyrann
Posts: 4563
Joined: 12/12-2008 12:44

pi-ra wrote:Oppgaven er løst.
Hadde vært interessant å sett løsningen din!
pi-ra
Dirichlet
Dirichlet
Posts: 173
Joined: 15/11-2014 02:18

Code: Select all

#coding=utf-8
import random
import math
import time
startTime = time.time()


def sjekk(t):
    X = t
    A = set([x%2 for x in X])
    B = set([y*y for y in X ])
    C = set([math.pow(z, 0.5) for z in X.intersection(B)])
    D = set([math.pow(w, 2) for w in C])


    if len(X) in X and len(A) not in X and sum(X) in B and sum(X.intersection(B)) not in B and sum(C.union(D)) in X:

        print "X =", X
        return True
    else:
        return False


def guess():
    b = 100
    minLengde = 5
    maksLengde = 10
    genSet = random.sample( range(1,b), random.randint(minLengde,maksLengde) )
    t = set(genSet)
    return sjekk(t)

teller=0
while not guess():
    teller+=1
print "Forsøk nr:",teller

#sjekke tid som er brukt
elTime = time.time() - startTime
print "Sekunder brukt: ", elTime
Post Reply