Seite 2 von 2

Verfasst: Sonntag 20. April 2008, 10:05
von dennda
Ja, ich hab noch etwas Freiraum für eine make_me_a_millionaire_by_cheating()-Funktion gelassen. Vielleicht setzt das mal ein Verantwortlicher so um und ich werd reich!

(An den Fragesteller: Was hier kritisiert wird ist, dass bei Parallelisierung jemand anders pool verändern könnte und damit z.B. nur noch 5 Zahlen drinlassen könnte. Besser wäre es hier aus einem unveränderten pool der immer die Zahlen 1-49 beinhaltet zu ziehen und zu schauen ob die Zahl schon vorkommt oder nicht.)

Verfasst: Sonntag 20. April 2008, 10:37
von lunar
dennda hat geschrieben:(An den Fragesteller: Was hier kritisiert wird ist, dass bei Parallelisierung jemand anders pool verändern könnte und damit z.B. nur noch 5 Zahlen drinlassen könnte. Besser wäre es hier aus einem unveränderten pool der immer die Zahlen 1-49 beinhaltet zu ziehen und zu schauen ob die Zahl schon vorkommt oder nicht.)
Nicht nur das, du hast auch noch die Paradigmen der wahren, der einzigartigen funktionalen Programmierung verletzt. ;)

In der funktionalen Programmierung dürfen Funktionen prinzipbedingt keine Seiteneffekte haben, denn in der Mathematik sind Funktionen ja auch nebeneffektsfrei.

Verfasst: Sonntag 20. April 2008, 11:42
von Y0Gi
Tipp: Haskell lernen mit einer Aufgabe, die nach Zufallszahlen verlangt, kann einen als Einsteiger wahnsinnig machen ;)

Verfasst: Sonntag 20. April 2008, 14:03
von Leonidas
lunar hat geschrieben:Nicht nur das, du hast auch noch die Paradigmen der wahren, der einzigartigen funktionalen Programmierung verletzt. ;)
Naja, ich tät ja nichts sagen wenn es schwer wäre das Seiteneffektfrei hinzubekommen. Einige Dinge sind ohne Seiteneffekte recht hart und erfordern starkes umdenken.

Edit: Ich habe mal eine seiteneffektfreie Lösung in Scheme geschrieben. Da ich aber nicht gut Scheme beherrsche (es fehlt mir etwa eine übersicht, welche Funktionen es gibt) ist die entsprechend fürchterlich. So habe ich ``list-rec`` selbst implementiert gehabt, ``cond`` als ``if`` zu missbrauchen ist auch nicht wirklich elegant. Aber so habe ich immer noch was zu optimieren, wäre langweilig wenns optimal wäre. Etwa aus einigen `lambda`s `opt-lambda`s zu machen um optionale Argumente aufzunehmen.

Mein Vorgehen dort ist es eine Liste von 1 bis 49 zu erstellen, eine Zufallszahl zu ziehen und diese dann aus der Liste zu entfernen um dann eine weitere Zahl zu ziehen usw. Natürlich rekursiv. MzScheme stellt ``random`` bereit, bin mir nicht sicher in wie weit das portabel ist.

Edit: Nachgebesserte Version, Scheme kennt ``length`` schon. Ups :)

Verfasst: Montag 21. April 2008, 10:56
von jens
Meine Variante ... extra langer code, extra lange Laufzeit ;)

Code: Alles auswählen

import random

class RND(object):
    def __init__(self, count, max):
        assert count<max, "max must be larger than count!"

        self.count = count
        self.max = max

        self._choosen = []
        self.loop_count = 0

    def __iter__(self):
        return self

    def next(self):
        if len(self._choosen) >= self.count:
            raise StopIteration

        while True:
            self.loop_count += 1
            new_number = random.choice(xrange(1, self.max))

            if not new_number in self._choosen:
                self._choosen.append(new_number)
                return new_number



if __name__ == "__main__":
    r = RND(10,11)
    print list(r)
    print "loop count:", r.loop_count
    print "---"
    for i in RND(10, 11):
        print i,

Verfasst: Montag 21. April 2008, 13:03
von Leonidas
Was spricht dagegen ``time.sleep(sys.maxint)`` einzubauen? Und wie sinvoll es ist ``max`` zu überschreiben, darf sich jeder selbst denken.

Verfasst: Montag 21. April 2008, 13:14
von EyDu
Meine unendlich vielen Affen an Schreibmaschinen bei mir im Keller haben schon eine besser Lösung geschrieben, ich muss sie nur mal eben raussuchen...

Verfasst: Montag 21. April 2008, 13:25
von Leonidas
EyDu hat geschrieben:Meine unendlich vielen Affen an Schreibmaschinen bei mir im Keller haben schon eine besser Lösung geschrieben, ich muss sie nur mal eben raussuchen...
Liegt gleich neben den Werken von Shakespeare.

Verfasst: Montag 21. April 2008, 13:38
von jens
Leonidas hat geschrieben:Und wie sinvoll es ist ``max`` zu überschreiben, darf sich jeder selbst denken.
Ups, da hast du recht ;)

Verfasst: Montag 21. April 2008, 22:12
von BlackJack
@Leonidas: Gegen `sys.maxint` spricht, dass es das ab Python 3.0 nicht mehr gibt. Sonst fällt mir kein vernünftiger Grund ein, das nicht einzubauen. :-)

Verfasst: Dienstag 22. April 2008, 10:02
von Leonidas
BlackJack hat geschrieben:@Leonidas: Gegen `sys.maxint` spricht, dass es das ab Python 3.0 nicht mehr gibt. Sonst fällt mir kein vernünftiger Grund ein, das nicht einzubauen. :-)
Wir brauchen dringend ``inf`` :)

Verfasst: Donnerstag 18. September 2008, 09:00
von sea-live
Gibt es auch ne schnelle variante eine zufällige Liste aus ZB 8 ziffern von 0-7 zuerstellen in der jede ziffer nur 1x vorkommt

war eigentlich ganz einfach nur suchen musste ich !

Code: Alles auswählen

stelle = range(8)
print stelle
random.shuffle(stelle)
print stelle

Verfasst: Donnerstag 18. September 2008, 17:09
von Y0Gi
sea-live: Warum hast du dann ``random.sample(items, length)`` nicht gefunden? :) Damit kannst du Listen mit einmalig vorkommenden Items aus Quellen erstellen, die auch größer als die Liste sein können.

Verfasst: Donnerstag 18. September 2008, 17:19
von Hyperion
sample und shuffle wurden ja auch bereits auf der ersten Seite genannt.