4 unterschiedliche Random Zahlen

  • 4 unterschiedliche Random Zahlen

    Hallo Leute,
    bin ein Neuling in Swift, hab jedoch schon Erfahrung im Bereich Java und C#.

    Nun zu meinem Problem, ich arbeite an einer App die ein Multiple Choice Quiz beinhalten soll.
    Die Antwort Möglichkeiten sollen immer an einer anderen Stelle stehen.

    Genau da ist mein Problem, ich brauche 4 Nummern, zwischen 1 und 4, jedoch darf keine doppelt vorkommen.

    Mein Code sieht so aus:

    repeat{
    zahl1 = randomIntFrom(start: 1, to: 4)
    zahl2 = randomIntFrom(start: 1, to: 4)
    zahl3 = randomIntFrom(start: 1, to: 4)
    zahl4 = randomIntFrom(start: 1, to: 4)
    } while( zahl1 == zahl2 && zahl1 == zahl3 && zahl1 == zahl4 &&
    zahl2 == zahl1 && zahl2 == zahl3 && zahl2 == zahl4 &&
    zahl3 == zahl1 && zahl3 == zahl2 && zahl3 == zahl4 &&

    zahl4 == zahl1 && zahl4 == zahl2 && zahl4 == zahl3)

    bin über jede Hilfe Dankbar. :D :D
  • Neu

    torquato schrieb:

    Es geht noch einen kleinen Tacken kürzer, wenn man will:

    Quellcode

    1. let shuffledNumbers = (1...4).sorted { _ in arc4random() < arc4random() }

    Ürgs. Ich sehe gerade durch Zufall (nomen est omen ;) ), daß das so nicht ganz korrekt sein muß. IdR teste ich meinen Code, den ich hier poste. So auch in diesem Fall. Allerdings bin ich meist auf einer Development Toolchain. In dem Fall Swift 3.1. Jetzt habe ich sowas selber in einem Release Build (Swift 3.0.2) verwendet und prompt fliegt es mir um die Ohren. Das (_, _) in nach _ in ist anscheinend nicht in jeder Swit 3 Version möglich.
    Stellt sich jetzt die Frage, ob das ein (regression) Bug oder Feature ist. Hat hier nicht letztens jemand was von 'Pizza für Bugs' geschrieben? Ich nehme eine Capricciosa. :)
    Twix heißt jetzt Raider!
  • Neu

    Michael schrieb:

    Nimm ein Array uns sortiere das zufällig:

    C-Quellcode

    1. let numbers = [1, 2, 3, 4]
    2. let shuffledNumbers = numbers.sorted { (_, _) -> Bool in arc4random() < arc4random() }
    Wer kann mir das mal bitte erklären. Also so wenn man keine Ahnung hat von Swift. Angeblich muss das ja ganz einfach sein. Wenn ich mir das jetzt aber so ansehen verstehe ich nur:

    Benutze die Methode sorted eines Array (_, _) könnten die PArameter eines Enclosures sein (Vielleicht) ergebnis wäre dann aber Bool aus einer Zufallszahl die aus einer Zufallszahl kommt?
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Neu

    Thallius schrieb:

    Benutze die Methode sorted eines Array (_, _) könnten die PArameter eines Enclosures sein (Vielleicht) ergebnis wäre dann aber Bool aus einer Zufallszahl die aus einer Zufallszahl kommt?
    Die zwei underlines drücken wohl aus dass die Parameter nicht benötigt werden.
    Das boolsche Ergebnis wird wohl aussagen dass der erste parameter kleiner als der zweite ist (oder eben nciht).
    Es wird keine Zufallszahl aus einer Zufallszahl erstellt sondern zwei Zufallszahlen verglichen.

    Ich frage mich nur gerade ob das so wirklich korrekt funktioniert?
    Das Ergebnis hängt ja komplett vom verwendeten sort-algo ab denn die Wahrscheinlichkeit dass die "1" an der letzten Stelle ist, sollte meiner Meinung nach 25% betragen. Abhängig vom sort-algo wären es aber zb 50% * 50% * 50% = 12,5 %

    Ist es noch zu früh für mich???
  • Neu

    Die Abschätzung der Zufallsqualität wird bei den Divide-And-Conquer-Verfahren wahrscheinlich richtig haarig, wenn beim Zusammenfügen der Teilergebnisse wieder Vergleiche (z. B. Merge-Sort) gebraucht werden. Bei Quicksort sollte die Wahrscheinlichkeit, dass eine Zahl an einer bestimmten Position erscheint, gleichverteilt sein.
    „Meine Komplikation hatte eine Komplikation.“

    Apps programmieren für iPhone und iPad
  • Neu

    macmoonshine schrieb:

    Die Abschätzung der Zufallsqualität wird bei den Divide-And-Conquer-Verfahren wahrscheinlich richtig haarig, wenn beim Zusammenfügen der Teilergebnisse wieder Vergleiche (z. B. Merge-Sort) gebraucht werden. Bei Quicksort sollte die Wahrscheinlichkeit, dass eine Zahl an einer bestimmten Position erscheint, gleichverteilt sein.
    Man sollte aber keine Annahmen über verwendete Algorithmen machen und sich nur darauf verlassen was dokumentiert ist (und soweit ich weiß ist dazu nix dokumentiert).
    Die Lösung würd ich also eher als "quick, dirty and erroneous" bezeichnen ;)
  • Neu

    gritsch schrieb:

    Man sollte aber keine Annahmen über verwendete Algorithmen machen und sich nur darauf verlassen was dokumentiert ist (und soweit ich weiß ist dazu nix dokumentiert).
    Nö, so war das auch nicht gemeint. Das ging eher in Richtung, dass man die Qualität des Verfahrens noch nicht mal abschätzen kann.
    „Meine Komplikation hatte eine Komplikation.“

    Apps programmieren für iPhone und iPad