zeitgeist Skrevet 3. juli 2006 Forfatter Del Skrevet 3. juli 2006 Vel den mangler kommentarer, docstrings, og generelt litt vanskelig å forstå. Det var da heller ikke noen regel som sa at den skulle være så kort som mulig? edit: glem det siste der, men uansett kortest kode er da ikke noe vits i? Best, mest lesbar og kjappest burde kode vinne 6427091[/snapback] Problemet er at det må kunne måles for å avgjøre hvem som er "vinner". Antall bytes er et mål, hastighet kunne ha vært et mål. Men "best" og "mest lesbar" blir fort en smakssak. Det er ganske vanlig med "korthet" som mål. Ref: http://www.pycontest.net/ Vi kan godt ta en konkurranse til når denne er ferdig der det er om å gjøre å "oversette" en diger tekstfil fortest, eller noe. Men jeg er ikke helt enig med deg i at kortest er poengløst. Jeg har lært mye av å knote med dette. Lenke til kommentar
zeitgeist Skrevet 3. juli 2006 Forfatter Del Skrevet 3. juli 2006 Vel den mangler kommentarer, docstrings, og generelt litt vanskelig å forstå. Det var da heller ikke noen regel som sa at den skulle være så kort som mulig? edit: glem det siste der, men uansett kortest kode er da ikke noe mål? Best, mest lesbar og kjappest kode burde vinne 6427091[/snapback] "Kjappest" og "mest lesbar" er ofte i konflikt fordi optimalisering gjerne fører med seg mye som går utover lesbarheten. Men under er et forsøk på begge deler. Tar ca 1.85 sek. på min bærbare. # -*- coding: UTF-8 -*- import random, locale, re locale.setlocale(locale.LC_ALL,'') from string import letters # now localised locale_letters = dict(zip(letters, letters)) random_shuffle = random.shuffle rx_non_alphas = re.compile('([^%s+])' % letters, re.L) re_split = re.split concat = ''.join def cambridge(s): def no_shuffle(word, length): """ Return True if word not to be shuffled """ if length > 3 and word[1] != word[2]: return False if length < 4: return True elif (length - 2) * word[1] == word[1:-1]: return True return False def shuffle(s, length): """ Shuffle chars in s until different from s """ if length == 2:return s[1] + s[0] # flip letters only... chars = list(s);pre_shuffle = chars[:] while chars == pre_shuffle:random_shuffle(chars) return concat(chars) def translate(s, length): if s.isalpha(): # only letters here if no_shuffle(s, length): return s b, m, e = s[0], s[1:-1], s[-1] return b + shuffle(m, length - 2) + e else: # s is "didn't", "Lilja4ever", "python-konkurranse" etc. parts = re.split(rx_non_alphas, s) for ix, part in enumerate(parts): if part.isalpha(): length = len(part) if not no_shuffle(part, length): b, m, e = part[0], part[1:-1], part[-1] parts[ix] = b + shuffle(m, length - 2) + e return concat(parts) def extract(s): """ Extract word from puctuation etc. translate() and rebuild string """ lix = 0; rix = 0; length = len(s) if length < 4: return s #locate first and last letter positions for char in s: if char in locale_letters: break lix += 1 for char_ix in xrange(length - 1, -1, -1): if s[char_ix] in locale_letters: rix = char_ix + 1 break if length == lix: return s return s[:lix] + translate(s[lix:rix], rix - lix) + s[rix:] return ' '.join(extract(w) for w in s.split()) def test(times = 3000): from time import clock strings = [ "I didn't say I couldn't do it!", 'Dette er en Python-konkurranse', '1234567890', '7 AM', "MI5", '(M-1)', '"quoted string"', 'Lilja4ever', '&%@!', 'Norske tegn: æøåÆØÅ', 'F.1910', 'En helt vanlig setning med seks ord.', 'shit!!?', '1.september', '1. september', 'MI5abcdefgMI5', 'A', 'ikke', 'ikkkke'] t1 = clock() for x in xrange(times): for s in strings: cambridged = cambridge(s) if times == 1: print s, cambridged t2 = clock() print "%s runder tok %s sekunder." % (times, t2-t1) test() Lenke til kommentar
FraXinuS Skrevet 4. juli 2006 Del Skrevet 4. juli 2006 Det ble vel zeitgeist som gikk av med seieren. Noen som har forslag til ny konkurranse? Lenke til kommentar
GenericName Skrevet 4. juli 2006 Del Skrevet 4. juli 2006 (endret) ... Endret 12. januar 2011 av Token Lenke til kommentar
zeitgeist Skrevet 4. juli 2006 Forfatter Del Skrevet 4. juli 2006 (endret) Lage en funksjon som skriver ut en md5 checksum? 6435777[/snapback] import md5 m = md5.new() print m.digest() ;-) Endret 4. juli 2006 av zeitgeist Lenke til kommentar
GenericName Skrevet 4. juli 2006 Del Skrevet 4. juli 2006 (endret) ... Endret 12. januar 2011 av Token Lenke til kommentar
Sondre1504 Skrevet 4. juli 2006 Del Skrevet 4. juli 2006 (endret) Kanskje man kan lage et program som veksler et gitt beløp i kroner over til sedler og/eller mynter. foreksempel vil 2360, 50 bli vekslet slik: 1000 kr: 2 100 kr: 3 50 kr: 1 10 kr: 1 50 øre: 1 beløp større eller det samme som 25 øre og beløp mindre eller dt samme som 75 øre vil bli avrundet til 50 øre. Programmet prøver å alltid å veksle til høyest mulig antall store sedler/mynter. bare et forslag. Edit: når jeg tenker meg om er dette kanskje ganske for lett for de fleste av dere. Endret 5. juli 2006 av Sondre1504 Lenke til kommentar
zeitgeist Skrevet 5. juli 2006 Forfatter Del Skrevet 5. juli 2006 Jeg blir gjerne med på en ny konkurranse, men stikker snart på ferie. Syns det er vanskelig å finne ok oppgaver. De bør være mulig å løse for alle med litt jobbing og det bør helst ikke ligge en zillion løsninger på nettet. Det er problemet med primtall, fibonacci-rekker og forsåvidt md5 og veksleautomater også. Kult hvis vi fortsetter med dette framover. Innvendingen om vinnerkriteriet er høyst gyldig, så vi kan prøve oss både med hastighet, "mest pythonic", kodelengde, eller kombinasjoner alt ettersom hvor det passer best. Det er utrolig lærerikt med små konkurranser - gir masse erfaring som kan brukes i andre sammenhenger. Lenke til kommentar
FraXinuS Skrevet 5. juli 2006 Del Skrevet 5. juli 2006 Dere kan jo prøve å løse denne: Jeg løste den for en stund siden, så jeg kan svaret. Dere får denne zip filen http://my.opera.com/Pitmairen/homes/files/zip.zip I fila så er det gjemt et ord, dere skal bruke python for å finne ordet. Den er ikke så veldig vanskelig, men det er en ganske kul oppgave. Lenke til kommentar
dabear Skrevet 5. juli 2006 Del Skrevet 5. juli 2006 Det er inni filene i zipfila ordet befinner seg? Det eneste jeg kommer fram til er "Collect the comments.". Lenke til kommentar
FraXinuS Skrevet 5. juli 2006 Del Skrevet 5. juli 2006 Ja ordet er i zipfila. Du er på rett vei, det gjenstår bare å gjøre som hintet sier "Collect the comments". hint: bruk en av python's moduler. Lenke til kommentar
dabear Skrevet 5. juli 2006 Del Skrevet 5. juli 2006 Ok, hehe, du svarte ikke på det jeg spurte om . Er ordet i headeren til fila, eller i sjølve innholdet som jeg finner med å åpne filene? zipfile.ZipInfo jeg skal bruke mao? Lenke til kommentar
FraXinuS Skrevet 5. juli 2006 Del Skrevet 5. juli 2006 Det er zipfile.ZipInfo du skal bruke ja. Vet ikke hva headeren på fila er jeg da, men du finner ikke svaret direkte i innholde til filene, men du må bruke innholdet i filene for å få riktig svar. Lenke til kommentar
zeitgeist Skrevet 5. juli 2006 Forfatter Del Skrevet 5. juli 2006 Det er zipfile.ZipInfo du skal bruke ja. Vet ikke hva headeren på fila er jeg da, men du finner ikke svaret direkte i innholde til filene, men du må bruke innholdet i filene for å få riktig svar. 6439260[/snapback] Hmm. Kikka på det. Kan det være EGONYX? Lenke til kommentar
FraXinuS Skrevet 5. juli 2006 Del Skrevet 5. juli 2006 Nei, det er ikke riktig. Men det er ikke så langt unna. Ordet dere leter etter er ikke ett ord skrevet med vanlige bokstaver, det er skrevet på en litt annen måte. Dere må sette sammen det dere finner på en bestemt måte for at det skal danne et ord. Lenke til kommentar
Magnus Holm Skrevet 6. juli 2006 Del Skrevet 6. juli 2006 Litt slemt å stjele oppgaver fra Python Challenge, da... Lenke til kommentar
FraXinuS Skrevet 6. juli 2006 Del Skrevet 6. juli 2006 (endret) En plass må jeg jo finne oppgavene. Men hvis noen vil ha svaret, så er det her: Ordet: Skjult tekst: (Marker innholdet i feltet for å se teksten): **************************************************************** **************************************************************** ** ** ** OO OO XX YYYY GG GG EEEEEE NN NN ** ** OO OO XXXXXX YYYYYY GG GG EEEEEE NN NN ** ** OO OO XXX XXX YYY YY GG GG EE NN NN ** ** OOOOOOOO XX XX YY GGG EEEEE NNNN ** ** OOOOOOOO XX XX YY GGG EEEEE NN ** ** OO OO XXX XXX YYY YY GG GG EE NN ** ** OO OO XXXXXX YYYYYY GG GG EEEEEE NN ** ** OO OO XX YYYY GG GG EEEEEE NN ** ** ** **************************************************************** ************************************************************** Eksempel på kode: Skjult tekst: (Marker innholdet i feltet for å se teksten): import zipfile import sys f = zipfile.ZipFile("zip.zip", 'r') nothing = "90052" for i in range (0, len(f.infolist())): try: info = f.getinfo(nothing + ".txt") sys.stdout.write(info.comment) nothing = f.read(nothing + ".txt").split()[-1] except KeyError: continue f.close() Endret 6. juli 2006 av FraXinuS Lenke til kommentar
Magnus Holm Skrevet 11. juli 2006 Del Skrevet 11. juli 2006 (endret) EDIT: Feil emne (Sikkert forumet sin skyld ) Endret 11. juli 2006 av Judofyr Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå