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.