Koordinater
Jag vill skriva ut totalt 36 koordinater mha A-F och talen 1-6 som en lista. Jag kom bara på en väldigt ineffektiv metod
som förlitar sig på att range är ett stort tal. Hur kan man modifiera den så att man dels bara har range(36) och dels inte får några dubbletter?
hidden = list(set([choice(a_f) + str(choice(list(range(1,7)))) for i in range(100)]))
Har jag fattat rätt nu:
Du vill skapa 36 random Koordinater av form där alltid är en bokstav mellan a-f och alltid är en siffra mellan 1-6 samt att dubbletter skall inte förekomma?
Dracaena skrev:Har jag fattat rätt nu:
Du vill skapa 36 random Koordinater av form där alltid är en bokstav mellan a-f och alltid är en siffra mellan 1-6 samt att dubbletter skall inte förekomma?
Exakt!
Varför inte loopa från 0-35 och i varje loop hitta slumpkoordinater som ännu inte finns i listan. Det blir ju en innerloop av detta.
Eller måste det vara en one-liner?
Analys skrev:Varför inte loopa från 0-35 och i varje loop hitta slumpkoordinater som ännu inte finns i listan. Det blir ju en innerloop av detta.
Eller måste det vara en one-liner?
jag försökte göra så men kom inte på hur så det måste inte vara en one-liner
Ge mig en stund, hur är a_f definierat?
from string import ascii_uppercase as letters
a_f = list(letters[:6])
import random
from string import ascii_uppercase as letters
a_f=list(letters[0:6])
random_coordinates=[]
for i in range(36):
new_found=False
while not new_found:
newc=random.choice(a_f) + str(random.choice(list(range(1,7))))
if newc not in random_coordinates:
random_coordinates.append(newc)
new_found=True
Analys skrev:import random from string import ascii_uppercase as letters a_f=list(letters[0:6]) random_coordinates=[] for i in range(36): new_found=False while not new_found: newc=random.choice(a_f) + str(random.choice(list(range(1,7)))) if newc not in random_coordinates: random_coordinates.append(newc) new_found=True
Ah smart, tack så mycket!
Din lösning var ju inte så ineffektiv. Den tar sekunder med en range på
Analys lösning tar ungefär sekunder
mha itertools så kan man hitta alla möjliga unika kombinationer, välja ut exakt 36 unika koordinater på sekunder, men det handlar inte alltid om den snabbaste lösningen. Det är ju också viktigt att du, och de andra som ska läsa koden förstår vad den gör. :)
Analys lösning är alltså 60x snabbare ungefär (nu räknar jag fortfarande med en range på .
Värt att notera är dock är att tiden varierar enormt mycket med Analys lösning. Det är inte alls ovanligt att det tar 2x längre tid pga kollisioner. Men är fortfarande minst 30x snabbare om man utgår från en range på .
hur tar du reda på hastigheten? dock tror jag att det finns en väldigt liten chans att man ändå får en dubblett med min lösning
Som jag minns det var det ungefär denna komplexitet på uppgifter på första programmeringskursen på xTH. Stämmer det fortfarande?
Analys skrev:Som jag minns det var det ungefär denna komplexitet på uppgifter på första programmeringskursen på xTH. Stämmer det fortfarande?
Haha precis, men det här var mest för skojs skull.
Baguesses skrev:
hur tar du reda på hastigheten? dock tror jag att det finns en väldigt liten chans att man ändå får en dubblett med min lösning
Jag använde:
time.perf_counter_ns()
För att beräkna exekveringstiden.
Dracaena skrev:Baguesses skrev:
hur tar du reda på hastigheten? dock tror jag att det finns en väldigt liten chans att man ändå får en dubblett med min lösning
Jag använde:
time.perf_counter_ns()
För att beräkna exekveringstiden.
Jaha häftigt!